【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递
来源:互联网 发布:信捷plc 编程软件3.5 编辑:程序博客网 时间:2024/05/16 11:51
post传递的编码问题,解决的方式有两种,一种是修改Tomcat的配置文件,这种方式是我反对的,因为你并不能保证自己的工程在任意一个Tomcat都能跑,当然如果以后出现什么情况,处理修改Tomcat配置文件,没有别的的话,那么才修改也不迟,另一种是在页面取值之前使用:
request.setCharacterEncoding("utf-8");本来这样没什么的,不就一行代码吗?但是在现在JSP编程不停强调页面绝对不能出现后端代码的趋势下,不能使用《【Jsp】使用Post与Get正确传递表单信息与乱码问题》(点击打开链接)的方式去取值,你必须使用更加强大的技术。下面举例子说明如果利用利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递。
一、基本目标
还是一个基础得不能再基础的页面,不会就不要跟别人说自己学过服务器网页编程,
如下所示,设置一个过滤器,保证post传递是正常的,但是get方法只能保持英文传递是正常,做到这里就不要有强迫症了,毕竟一般不用get传递重要信息,都是一些数字、英文之类,配合翻页这样的小功能。
二、基本准备
网络目录结构图如下所示,还是放入servlet的jar包,
为了避免在页面使用JSP代码,使用过滤器Filter,也不用每次取值都要:
request.getParameter("xx");
所以写一个encodingFilter.java设置所有页面的都要经过这个java,相当于网站的宏汇编的作用,在web.xml文件中设置过滤器,不明白过滤器者,可以参考我此前写的《【Filter】拦截器Filter》(点击打开链接)
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>encodingFilter</filter-name><filter-class>encodingFilter</filter-class></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
1、过滤器的代码如下:
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class encodingFilter implements Filter {// config变量也不是必须的,构造函数与析构函数可以为空@Overridepublic void destroy() {// TODO Auto-generated method stub}// 相当于在每个网址执行之前,都要经过这个方法的所有代码,直到读到chain.doFilter(request, response);为止// 所以再也不用担心用post传递的编码问题了@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}}
2、form.jsp没有什么特别的,就是一个普通得不能再普通得表单:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>form</title></head><body>post:<form method="post" action="ExpressionGetPost.jsp">name:<input type="text" name="name" /><br />password:<input type="password" name="password"/><br />sex:<input type="radio" name=sex value="男" />男<input type="radio" name=sex value="女" />女<br /> checkbox:<input type="checkbox" name="checkbox" value="一" />一<input type="checkbox" name="checkbox" value="二" />二<br /> <input type="submit" value="post" /></form><br /> get:<form method="get" action="ExpressionGetPost.jsp">name:<input type="text" id="name" name="name" /><br /> <input type="checkbox" name="checkbox" value="one" />一<input type="checkbox" name="checkbox" value="two" />二<input type="submit" value="get" /></form></body></html>
3、ExpressionGetPost.jsp可以利用EL表达式简化参数传递,EL的中文名字就是表达式语言,EL表达式必须在JSP2.2的版本使用,但请注意到我们的web.xml里面的version值写着等于2.5,所以你可以毫无顾忌的使用,告别:
request.getParameter("xx");同时能够像php类似一句${}就完事。但请注意到取复选框与取其他东西的方式不同,复选框传递过来的东西是一个数组。其他东西只是一个普通的值。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>index</title></head><body><!-- 里面可以是表达式 -->${1+3}<br /><%-- 可以这样去到当前的ip地址 -->ip地址:${header.host}<br /><%-- param.xx,xx为参数名就能够取到相应的参数值 --><%-- 如果复选框第X个值被选中,可以利用${paramValues.checkbox[x]}取到,当然还可以给复选框不同的选项设置不同的名字 --%>传递过来的值:name=${param.name},password=${param.password},sex=${param.sex},checkbox=${paramValues.checkbox[0]},${paramValues.checkbox[1]},<br /></body></html>EL表达式还能有以下的取值方式:
不过注意,el表达式仅能用来取值,不可以像php还能设置session容器内某一项的值。
0 0
- 【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递
- 利用过滤器filter解决乱码问题
- 利用Filter技术设置POST请求的编码
- 使用filter过滤器解决编码问题
- filter过滤器解决全局编码问题
- 使用Filter过滤器解决字符编码问题
- 利用过滤器解决GET和POST请求编码问题
- 利用window.open实现post方式的参数传递
- 利用window.open实现post方式的参数传递
- 利用过滤器filter处理乱码
- 解决spring设置filter过滤器结合rest风格获取post请求body参数输入流问题
- javaWeb利用Filter解决中文乱码问题
- 利用Filter 过滤字符编码的格式
- 过滤器filter-解决乱码的问题
- jsp filter过滤器 解决post 以及get乱码问题
- Filter解决编码问题
- 过滤器 Filter 解决乱码问题
- 利用指针传递参数
- 【LeetCode】Linked List Cycle
- ProGuard
- 通过 MD_SALES_ORDER_STATUS_REPORT 建立MD04展开树
- CentOS7 安装配置 MariaDB
- 自己学驱动18——中断
- 【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递
- llvm 学习笔记 1 :gdb 调试 llvm
- Linux 下编译并运行C++程序
- Linux中设置服务自启动的三种方式
- Android动画学习
- NSDictionary或者NSArray中包含NSNull对象,无法写入文件
- C#读取设置Cookie
- 从零开始学C++之模板(二):类模板、Stack的类模板实现(自定义链栈方式,自定义数组方式)
- 百度朝花夕拾