11.Filter(過濾器)
Filter(過濾器):用於過濾網站的數據。
-
處理中文亂碼
-
登錄驗證
-
……
結構圖:
Filter開發步驟:
1.導包
2.編寫過濾器
過濾器文件導包:
重寫三個方法:
3.代碼:
ShowServlet
package com.edwin.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Edwin D
* @date 2020.6.12 下午 1:02
*/
public class ShowServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 不用Filter的時候,需要下面三行代碼
// req.setCharacterEncoding("Utf-8");
// resp.setCharacterEncoding("Utf-8");
// resp.setContentType("text/html;charset=Utf-8");
resp.getWriter().write("Hello,New World!");
resp.getWriter().write("你好,新世界!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
CharacterEncodingFilter:
package com.edwin.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @author Edwin D
* @date 2020.6.12 下午 12:56
*/
public class CharacterEncodingFilter implements Filter {
// 初始化:web服務器啓動時,就已經初始化了隨時等待過濾對象。
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter初始化成功");
}
// Chain-->鏈;起放行的作用。
/*
1.過濾器中的所有代碼,在過濾特定請求的時候,都會執行。
2.必須要讓過濾器同時執行。
3......
*/
public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain Chain) throws IOException, ServletException {
Request.setCharacterEncoding("Utf-8");
Response.setCharacterEncoding("Utf-8");
Response.setContentType("text/html;charset=Utf-8");
System.out.println("CharacterEncodingFilter執行之前……");
Chain.doFilter(Request, Response);//讓我們的程序繼續走,如果不寫的話,程序到這裏會被截停。
System.out.println("CharacterEncodingFilter執行之後……");
}
// 銷燬:web服務器關閉的時候,過濾器纔會銷燬。
public void destroy() {
System.out.println("CharacterEncodingFilter銷燬成功");
}
}
Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>com.edwin.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/Show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/servlet/Show</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.edwin.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--只要是/servlet目錄下的任何請求,都會過這個過濾器。-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
</web-app>
啓用Filter前的效果:
啓用FIlter之後:
《成功的花》——冰心
成功的花,
人們只驚羨她現時的明豔!
然而當初她的芽兒,
浸透了奮鬥的淚泉,
灑遍了犧牲的血雨!
參考文獻
《【狂神說Java】JavaWeb入門到實戰》
2020.06.16