JavaWeb-Filter(過濾器)解決網頁中文亂碼問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章