【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递

post传递的编码问题,解决的方式有两种,一种是修改Tomcat的配置文件,这种方式是我反对的,因为你并不能保证自己的工程在任意一个Tomcat都能跑,当然如果以后出现什么情况,处理修改Tomcat配置文件,没有别的的话,那么才修改也不迟,另一种是在页面取值之前使用:

request.setCharacterEncoding("utf-8");  

本来这样没什么的,不就一行代码吗?但是在现在JSP编程不停强调页面绝对不能出现后端代码的趋势下,不能使用《【Jsp】使用Post与Get正确传递表单信息与乱码问题》(点击打开链接)的方式去取值,你必须使用更加强大的技术。下面举例子说明如果利用利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递。

一、基本目标

还是一个基础得不能再基础的页面,不会就不要跟别人说自己学过服务器网页编程,

如下所示,设置一个过滤器,保证post传递是正常的,但是get方法只能保持英文传递是正常,做到这里就不要有强迫症了,毕竟一般不用get传递重要信息,都是一些数字、英文之类,配合翻页这样的小功能。

二、基本准备

网络目录结构图如下所示,还是放入servlet的jar包,

为了避免在页面使用JSP代码,使用过滤器Filter,也不用每次取值都要:

request.setCharacterEncoding("utf-8");

所以写一个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变量也不是必须的,构造函数与析构函数可以为空
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	// 相当于在每个网址执行之前,都要经过这个方法的所有代码,直到读到chain.doFilter(request, response);为止
	// 所以再也不用担心用post传递的编码问题了
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		chain.doFilter(request, response);
	}

	@Override
	public 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容器内某一项的值。

时间: 2024-10-01 06:49:07

【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递的相关文章

JavaEE---过滤器Filter ,过滤器Filter的实现与部署,编码案例+权限案例

过滤器是一种Web组件,用于对客户端发送的请求信息和返回给客户端的响应信息进行处理.  过滤器Filter的工作原理 ---通过使用过滤器,可以拦截客户端的请求和响应,查看 .提取或者以某种方式操作正在客户端和服务器之间进行交换的数据. ---通过使用过滤器,可以对Web组件的前期处理和后期处理进行控制. ---过滤器可以有多个,以构成一个过滤器链.Servlet容器会根据过滤器的配置情况来决定过滤器的调用次序. 过滤器Filter的实现和部署 ---必须实现接口javax.serclet.Fi

web day21 web过滤器Filter,应用案例统计IP,解决全站乱码,粗粒度权限控制,页面静态化

JavaWeb三大组件 1. 都需要在web.xml中进行配置 Servlet Listener(2个感知监听器不需要配置) Filter 过滤器 它会在一组资源(jsp.servlet..css..html等等)的前面执行! 它可以让请求得到目标资源,也可以不让请求达到! * 过滤器有拦截请求的能力! 登录: 允许它访问AServlet.BServlet.CServlet ------------------------------- 过滤器如何编写 1. 写一个类实现Filter接口 2.

利用filter和动态代理解决全站乱码问题

1.利用filter和动态代理解决全站乱码问题 1.1filter的代码 package com.baowei.filter; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javax.servlet.Filter; import javax.servlet

过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理.使用Filter 的完整流程:Filter 对用户请求

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)

拦截一些请求进行处理,比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,编码,或者限制时间点访问等等,是非常有必要的.所以就有了此篇文章啦. 文章结构:(1)Servlet过滤器Filter:(2)SpringMVC的HandlerInterceptor:(3)对比认知. 一.Servlet过滤器Filter: 此部分是从赵四大佬那里学来的,并补充自己的认知 (1)概念: 能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能

Bloom Filter布隆过滤器

http://blog.csdn.net/pipisorry/article/details/64127666 Bloom Filter简介 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定

JavaWeb-19 (JDBC之过滤器Filter)

JavaWeb-19 JDBC之过滤器Filter 一.Filter过滤器概述 Filter(过滤器):Web三大组件之一,就是对目标资源进行请求前或请求后. Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 实际中:过滤器就相

好记性不如烂笔头30-java应用中的过滤器Filter(2)

Filter的创建和销毁由WEB服务器负责. web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次.通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象. Web容器调用destroy方法销毁Filter.destroy方法在Filter的生命周期中仅执行一次.在destroy方法中,可以释放过滤器使用的