# Filter(過濾器) ###### tags: `Java Web-mvc` 1)Filter也屬於Servlet規範 ```java= import javax.servlet.*; ``` 2)Filter開發步驟:新建類實現Filter接口,然後實現其中三個方法:init、doFilter、destroy ```java= @WebFilter("*.do") public class Filter01 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //請求發送時的攔截 System.out.println("A"); //放行 filterChain.doFilter(servletRequest,servletResponse); //響應時的攔截 System.out.println("A2"); } @Override public void destroy() { } } ``` 配置Filter,可以用註解@WebFilter,也可以使用xml文件<filter><filter-mapping> ```xml= <filter> <filter-name>Demo01Filter</filter-name> <filter-class>com.atguigu.filters.Demo01Filter</filter-class> </filter> <filter-mapping> <filter-name>Demo01Filter</filter-name> <url-pattern>/demo01.do</url-pattern> </filter-mapping> ``` 3)Filter在配置時,和servlet一樣,也可以配置通配符,例如:@WebFilter("*.do")表示攔截所有以.do結尾的請求 ```java= @WebFilter("*.do") ``` 4)過濾器鏈 1.執行的順序依序是:A B C demo03 C2 B2 A2   2.如果採取的是註解的方式進行配置,那麼過濾器的攔截順序是按照全類名的先後排順序排序的 3.如果採取的是xml的方式進行配置,那麼按照配置的先後順序進行排序 5)補充:過濾器應用在添加編碼 ```java= @WebFilter(urlPatterns = {"*.do"},initParams = {@WebInitParam(name = "encoding",value = "UTF-8")}) public class CharacterEncodingFilter implements Filter { private String encoding = "UTF-8"; @Override public void init(FilterConfig filterConfig) throws ServletException { String encodingStr = filterConfig.getInitParameter("encoding"); //如果沒有初始編碼,就設置為UTF-8 if(StringUtil.isNotEmpty(encodingStr)){ encoding = encodingStr; } } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //請求通過時,將編碼設置為UTF-8過濾添加後,發送請求到服務器 ((HttpServletRequest)servletRequest).setCharacterEncoding("UTF-8"); filterChain.doFilter(servletRequest,servletResponse); } ```
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.