javaweb修改表单参数---使用过滤器
需求:
所有的字段要将空字符串转成null;
问题:
我们知道表单如果不写值的时候,传递到后台的不是null,而且是空字符串。那么怎么改成null呢?
解决:
使用过滤器,将请求的参数修改过后继续,再传递下去。
Request请求对象是无法修改它本身数据(通过getXXX方法获得的数据)的!!而ServletRequest对象又是Web服务器自动产生的,我们有没有办法通过new创建来创建。但现实中,我们就有需要修改request请求的本身数据的情况,可以通过HttpServletRequestWrapper类可以 重写Request请求的get方法来达到修改Request本身数据的目的。
实现步骤
第一步:创建一个请求的包装类
package cn.gzsxt.basic.filter; import java.util.Enumeration;
import java.util.Map;
import java.util.Vector; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; public class NullValueHandlerRequestWrapper extends HttpServletRequestWrapper { private Map<String, String[]> parameterMap; public void setParameterMap(Map<String, String[]> parameterMap) {
this.parameterMap = parameterMap;
} public NullValueHandlerRequestWrapper(HttpServletRequest request) {
super(request);
} @Override
public Enumeration<String> getParameterNames() {
Vector<String> vector = new Vector<String>(parameterMap.keySet());
return vector.elements();
} @Override
public String getParameter(String name) {
String[] results = parameterMap.get(name);
return results[0];
} @Override
public Map<String, String[]> getParameterMap() {
return this.parameterMap;
} @Override
public String[] getParameterValues(String name) {
return this.parameterMap.get(name);
} } 第二步:实现过滤器调用包装后的请求
package cn.gzsxt.basic.filter; import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; public class NullvalueHandlerFilter implements Filter{ @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//获得所有字段
Map<String, String[]> parameterMap = new HashMap<>(request.getParameterMap()); Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
Iterator<Entry<String, String[]>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, String[]> entry = iterator.next();
if (entry.getValue()!=null) {
for(int i=0;i<entry.getValue().length;i++) {
if ("".equals(entry.getValue()[i])) {
iterator.remove();
}
}
} }
//parameterMap就会将空字符串转成null.
//注意:request对象是无法修改表单数据的!!ServletRequest对象是容Tomcat产生的,我们有没有办法new创建.
NullValueHandlerRequestWrapper wrapper =new NullValueHandlerRequestWrapper((HttpServletRequest)request);
wrapper.setParameterMap(parameterMap);
//获得重写后的请求
chain.doFilter(wrapper, response); } @Override
public void destroy() { } }
javaweb修改表单参数---使用过滤器的更多相关文章
- 统一修改表单参数(表单提交的空字符串统一转null)
统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...
- JavaWeb - 模仿SpringMVC抽取 BaseServlet + 封装表单参数
模仿SpringMVC抽取一个BaseServlet,接收所有请求,然后自动封装表单参数和分发到对应的servlet执行,下面用一个页面表单提交,转发显示的项目做示例. 1)首先准备一个Entity, ...
- struts2(二) 表单参数自动封装和参数类型自动转换
前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使 ...
- struts2(三)之表单参数自动封装与参数类型自动转换
前言 对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化, struts2的 ...
- Golang里实现Http服务器并解析header参数和表单参数
在http服务里,header参数和表单参数是经常使用到的,本文主要是练习在Go语言里,如何解析Http请求的header里的参数和表单参数,具体代码如下: package server import ...
- Struts2学习(二)———— 表单参数自动封装和参数类型自动转换
前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使 ...
- jquery.form插件中动态修改表单数据
jquery.form jquery.form插件(http://malsup.com/jquery/form/)是大家经常会用到的一个jQuery插件,它可以很方便将表单转换为ajax的方式进行提交 ...
- 基于jQuery会员中心安全修改表单代码
基于jQuery会员中心安全修改表单代码.这是一款登录密码,交易密码,手机号码,实名认证,电子邮箱,安全设置表单,会员表单等设置代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: ...
- Servlet之doPost获取表单参数
/** * 获取表单参数 */ private void readForm() { // TODO Auto-generated method stub Enumeration e = request ...
随机推荐
- install-newton部署安装--------控制节点
#################################################################################################### ...
- python列表表达式
[expression for i in iterable if condition] expression 就是对每一个元素的具体操作表达式;iterable是某个可迭代对象,如列表,元组或字符串等 ...
- 【小白学AI】XGBoost推导详解与牛顿法
文章来自微信公众号:[机器学习炼丹术] 目录 1 作者前言 2 树模型概述 3 XGB vs GBDT 3.1 区别1:自带正则项 3.2 区别2:有二阶导数信息 3.3 区别3:列抽样 4 XGB为 ...
- RabbitMQ高级之如何保证消息可靠性?
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第四弹. RabbitMQ我已经写了三篇了,基础的收发消息和基础的概念我都已经写了,学任何东西都是这样,先 ...
- Helix QAC/QAC++—代码静态测试工具介绍—符合功能安全标准MISRA ISO26262
Helix QAC是静态代码分析工具,依据C和C++编码规则自动扫描代码对规则的违背.开发团队在开发过程的早期就可以用它来检测缺陷,因为此时修改代码是最方便也最经济的.Helix QAC因此自动化强制 ...
- 企业站做seo用什么程序好
http://www.wocaoseo.com/thread-306-1-1.html 随着互联网的兴起,越来越多的人通过网络来了解自已想了解的资讯,网络营销已经慢慢的取代了传统的营销模式.很多企业现 ...
- Cobalt strike与内网渗透
cobalt strike的用法参照我之前的博客: https://www.cnblogs.com/vege/p/12743274.html 这里只演示上线之后的操作. Socks代理 开启socks ...
- 【Go语言入门系列】(七)如何使用Go的方法?
[Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...
- React设计模式相关
关于我在React设计模式上做的一些思考: 一,项目里实战的经历 最开始我根据组件不同的职能定义,拆分了展示组件和容器组件两大类,后来随着业务逻辑越来越复杂,容器组件代码越来越冗长,我又加入了HOC高 ...
- Intermediate English Book 1
List x1.0 x1.5 Lesson 1 Reading Lesson 1 Details Lesson 2 Dialogue Lesson 2 Details Lesson 3 Reading ...