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>

     

 

 

 

 

 

 

 

posted @   gzs1024  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示