JavaWeb笔记(8):Filter过滤器ThreadLocal

JavaWeb笔记(8):Filter过滤器ThreadLocal,第1张

JavaWeb笔记(8):Filter过滤器/ThreadLocal

目录

1、Filter 是什么过滤器

2、Filter 的工作流程图:

3、Filter 过滤器的使用步骤:

4、Filter 的生命周期

5、FilterConfig 类

6、FilterChain 过滤器链

7、Filter 的拦截路径

8、ThreadLocal 的使用

9、使用 Filter 和 ThreadLocal 组合管理事务


1、Filter 是什么过滤器

1、 JavaWeb 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器。2、Filter 过滤器它是 JavaEE 的规范。也就是接口。3、Filter 过滤器作用是: 拦截请求,过滤响应。

拦截请求常见的应用场景有:

①、权限检查②、日记 *** 作③、事务管理……等等 2、Filter 的工作流程图:

Filter实现原理:

3、Filter 过滤器的使用步骤:

1、编写一个类去实现 Filter 接口2、实现过滤方法 doFilter()3、到 web.xml 中去配置 Filter 的拦截路径

Filter 的代码:

public class AdminFilter implements Filter {

    
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpSession session = httpServletRequest.getSession();
        Object user = session.getAttribute("user");
        // 如果等于 null ,说明还没有登录
        if (user == null) {
            servletRequest.getRequestDispatcher("/admin/a.html").forward(servletRequest,servletResponse);
            return;
        } else {
            // 让程序继续往下访问用户的目标资源
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

web.xml 中的配置:

 
        
        AdminFilter
        
        com.crane.filter.AdminFilter
    
    
    
        
        AdminFilter
        
    /*

把 baseServlet 中的异常往外抛给 Filter 过滤器

public abstract class baseServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决 post 请求中文乱码问题
        // 一定要在获取请求参数之前调用才有效
        req.setCharacterEncoding("UTF-8");
        String action = req.getParameter("action");
        try {
            // 获取 action 业务鉴别字符串,获取相应的业务 方法反射对象
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            System.out.println(method);
            // 调用目标业务 方法
            method.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);// 把异常抛给 Filter 过滤器
        }
    }
}
3、将所有异常都统一交给 Tomcat ,让 Tomcat 展示友好的错误信息页面

在 web.xml 中我们可以通过错误页面配置来进行管理


    
    500
    
    /pages/error/error500.jsp



    
    404
    
    /pages/error/error404.jsp

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存