1、首先編寫一個(gè)Java類的filter代碼。操作步驟:
塔城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
(1)在myeclipse中新建一個(gè)java類,
(2)單擊“Add”按鈕,在彈出來(lái)的對(duì)話框中“選擇接口”文本框中輸入Filter,
并選擇匹配好的類型javax.servlet
(3)單擊“OK”按鈕返回"New Java Class"對(duì)話,然后單擊“Finish”按鈕,就可以看到創(chuàng)建的過(guò)濾器框架:
過(guò)濾器類: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){
//設(shè)置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 !-- 初始化參數(shù) --
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
其實(shí)是一個(gè)問(wèn)題
????? 這里為何要將request轉(zhuǎn)換為重寫后的Request對(duì)象???? 不轉(zhuǎn)換是否可以?
答:不轉(zhuǎn)換 也行,把所有的字符過(guò)濾操作全部放這,放什么?就是放 ( ?????這里為什么要重寫HttpServletRequestWrapper?)下邊這個(gè)類所干的事
看到Servlet,可以明確這是個(gè)web項(xiàng)目。
所以你需要新建一個(gè)web工程,然后在web.xml中配置該過(guò)濾器。
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
if (null != encoding) {
HttpServletRequest request = (HttpServletRequest)srequest;
HttpServletResponse response = (HttpServletResponse)sresponse;
// 對(duì)請(qǐng)求進(jìn)行編碼設(shè)置
request.setCharacterEncoding(encoding); //把請(qǐng)求用指定的方法編碼
response.setContentType("text/html");
response.setCharacterEncoding(encoding); //把返回響應(yīng)指定 編碼方式
System.out.println("------------過(guò)濾編碼-------------" + encoding);
}
// 把處理權(quán)限交給下一個(gè)過(guò)濾器
chain.doFilter(srequest, sresponse);
}//這是核心方法
正好項(xiàng)目中有用到
弄過(guò)濾器,要實(shí)現(xiàn)filter接口,下面我寫一個(gè)小例子
主要是用過(guò)濾器處理中文編碼,至于你要用來(lái)做什么,你再自己寫。。。比如權(quán)限控制,登錄驗(yàn)證,之類
//下面這是一個(gè)類。。。。
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);//讓過(guò)濾器執(zhí)行下一個(gè)請(qǐng)求
}
public void destroy() {}
public void init(FilterConfig arg0) throws ServletException {}
}
//下面這個(gè)是在web.xml下的配置
filter
filter-nameencoding/filter-name
filter-class
剛剛創(chuàng)建的那個(gè)實(shí)現(xiàn)filter接口的類的位置
例如:com.temp.filter.EncodingFilter
/filter-class
/filter
filter-mapping
filter-nameencoding/filter-name
url-pattern*.jsp這個(gè)是以jsp為后綴的文件都攔截下來(lái)/url-pattern
/filter-mapping
可以寫多個(gè)的filter-mapping來(lái)配置你所要攔截的東西
恩,有點(diǎn)嘮叨,希望可以幫助到你