1、首先编写一个Java类的filter代码。操作步骤:
塔城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
(1)在myeclipse中新建一个java类,
(2)单击“Add”按钮,在弹出来的对话框中“选择接口”文本框中输入Filter,
并选择匹配好的类型javax.servlet
(3)单击“OK”按钮返回"New Java Class"对话,然后单击“Finish”按钮,就可以看到创建的过滤器框架:
过滤器类:Encoding.java,代码如下:
package com;
import java.io.IOException;
import javax.servlet.*;
public class Encoding implements Filter {
protected String encoding=null;
protected FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(request.getCharacterEncoding()==null){
//得倒指定的编码
String encode=getEncoding();
if(encode!=null){
//设置request的编码
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.config=filterConfig; //得到web.xml中的配置编码
this.encoding=filterConfig.getInitParameter("Encoding");
}
protected String getEncoding(){
return encoding;
}
}
2、在web.xml文件写入以下代码:
?xml version="1.0" encoding="UTF-8"?
web-app version="2.5"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation="
"
display-name/display-name
filter !-- 控制编码 --
filter-nameEncodingFilter/filter-name
filter-classcom.Encoding/filter-class
init-param !-- 初始化参数 --
param-nameEncoding/param-name
param-valueGB2312/param-value
/init-param
/filter
filter-mapping
filter-nameEncodingFilter/filter-name
url-pattern/*/url-pattern
/filter-mapping
/web-app
其实是一个问题
????? 这里为何要将request转换为重写后的Request对象???? 不转换是否可以?
答:不转换 也行,把所有的字符过滤操作全部放这,放什么?就是放 ( ?????这里为什么要重写HttpServletRequestWrapper?)下边这个类所干的事
看到Servlet,可以明确这是个web项目。
所以你需要新建一个web工程,然后在web.xml中配置该过滤器。
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
if (null != encoding) {
HttpServletRequest request = (HttpServletRequest)srequest;
HttpServletResponse response = (HttpServletResponse)sresponse;
// 对请求进行编码设置
request.setCharacterEncoding(encoding); //把请求用指定的方法编码
response.setContentType("text/html");
response.setCharacterEncoding(encoding); //把返回响应指定 编码方式
System.out.println("------------过滤编码-------------" + encoding);
}
// 把处理权限交给下一个过滤器
chain.doFilter(srequest, sresponse);
}//这是核心方法
正好项目中有用到
弄过滤器,要实现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 EncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");//处理编码
response.setCharacterEncoding("GBK");//处理编码
chain.doFilter(request, response);//让过滤器执行下一个请求
}
public void destroy() {}
public void init(FilterConfig arg0) throws ServletException {}
}
//下面这个是在web.xml下的配置
filter
filter-nameencoding/filter-name
filter-class
刚刚创建的那个实现filter接口的类的位置
例如:com.temp.filter.EncodingFilter
/filter-class
/filter
filter-mapping
filter-nameencoding/filter-name
url-pattern*.jsp这个是以jsp为后缀的文件都拦截下来/url-pattern
/filter-mapping
可以写多个的filter-mapping来配置你所要拦截的东西
恩,有点唠叨,希望可以帮助到你