1. 程式人生 > 其它 >javaweb學習22:過濾器Filter

javaweb學習22:過濾器Filter

javaweb學習22:過濾器Filter

  • 過濾器Filter:用來過濾網站的資料

    • 處理中文亂碼;

    • 登入驗證;

       

 

  • Filter開發步驟:

    • 導包;(包不要導錯)

      import javax.servlet.Filter;
    • 編寫過濾器:實現Filter介面;

      public void init(FilterConfig filterConfig) throws ServletException {

      }

      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

      }

      public void destroy() {

      }

 

  • 回顧JDBC操作事務:

    • 開始事務;

    • 回滾事務;

    • 提交事務;

 

 

  • 程式碼案例:編寫過濾器

    //過濾器處理類
    public class CharacterEncodingFilter implements Filter {

       //初始化:web伺服器啟動,就初始化了,隨時等待過濾物件出現;
       public void init(FilterConfig filterConfig) throws ServletException {
           System.out.println("CharacterEncodingFilter已經初始化了");
      }

       //過濾器執行邏輯

       /**
        * Chain:鏈
        * 1,過濾器中的所有程式碼,在過濾特定的請求的時候都會執行;
        * 2,必須要讓過濾器繼續同行: chain.doFilter(request,response);
        *
        */
       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 是放行的作用
           chain.doFilter(request,response);//讓我們的請求繼續走,如果不寫,程式到這裡就停止了
           System.out.println("CharacterEncodingFilter執行前後");


      }

       //銷燬:web伺服器關閉的時候,過濾器會銷燬
       public void destroy() {
           System.gc();
           System.out.println("CharacterEncodingFilter銷燬");
      }
    }

     

  • 程式碼案例:編寫Servlet實現

    //編寫Servlet處理類
    public class ShowServlet extends HttpServlet {

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          /* resp.setCharacterEncoding("UTF-8");
           resp.setContentType("text/html;charaset=utf-8");*/
           resp.getWriter().write("你好啊");
      }

       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           super.doPost(req, resp);
      }
    }

     

  • web.xml配置:

    • 只要是/servlet/的任何請求,都會經過這個過濾器

    <?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>
           <servlet-name>showServlet</servlet-name>
           <servlet-class>com.lesson.demo01.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>
           <filter-name>CharacterEncodingFilter</filter-name>
           <filter-class>com.lesson.demo01.CharacterEncodingFilter</filter-class>
       </filter>

       <filter-mapping>
           <filter-name>CharacterEncodingFilter</filter-name>
           <!--只要是/servlet/的任何請求,都會經過這個過濾器 -->
           <url-pattern>/servlet/*</url-pattern>
       </filter-mapping>
    </web-app>