一、过滤器
编码过滤器的作用:在接收请求的资源中做编码设置与转换,在多个请求资源中都需要相同的操作,使用过滤器可以只需一次设置,整个Web可用。
建立一个过滤器涉及下列五个步骤:
(1)建立一个实现Filter接口的类。
(2)在doFilter方法中实现过滤行为。
(3)调用FilterChain对象的doFilter方法。
(4)对相应的servlet和JSP页面注册过滤器。
(5)禁用激活器servlet。
二、代码实现
1.写死的编码编译器
如果需要改变编码方式,要在doFilter方法中改变
(1)定义过滤器
package filter;
import java.io.IOException;
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;
import javax.servlet.http.HttpServletResponse;
public class MyFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
//将Servlet类型的请求和响应转化为HttpServlet的请求和响应
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//设置请求和响应的编码方式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
//通过过滤器传递响应和请求
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
(2)配置过滤器
在web.html中配置
<!-- 配置过滤器 -->
<filter>
<filter-name>a</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>a</filter-name>
<!-- 过滤器处理所有的路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)创建Servlet测试一下
response.getWriter().print("这是通过编码过滤器显示的内容!");
2.通过改变配置可以换编码方式的过滤器
(1)定义过滤器
package filter;
import java.io.IOException;
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;
import javax.servlet.http.HttpServletResponse;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
public class MyFilter implements Filter{
String MyEncoding;//定义变量接受初始化的值
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
//将Servlet类型的请求和响应转化为HttpServlet的请求和响应
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//设置请求和响应的编码方式
request.setCharacterEncoding(this. MyEncoding);
response.setCharacterEncoding(this. MyEncoding);
response.setContentType("text/html");
//传递响应和请求
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
MyEncoding=config.getInitParameter("encoding");
}
}
(2)配置过滤器
<!-- 配置过滤器 -->
<filter>
<filter-name>a</filter-name>
<filter-class>filter.MyFilter</filter-class>
<init-param>
<!--param-name为初始化参数的名 param-value为参数的值 -->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>a</filter-name>
<!-- 过滤器处理所有的路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)创建Servlet测试一下
response.getWriter().print("这是通过编码过滤器显示的内容!");