栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号