您现在的位置:首页 >> 基础 >> Java编程 >> 内容

使用Filter 作为控制器--Java学习网

时间:2016-11-27 12:22:08

  核心提示:1. MVC 设计模式概览实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成: 模型:封装应用程序的数据和业务逻辑POJO(Plain Old Java Ob...

1. MVC 设计模式概览

  • 实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:
    • 模型:封装应用程序的数据和业务逻辑 POJO(Plain Old Java Object):数据模型
    • 视图:实现应用程序的信息显示功能 JSP、Freemarker 等等
    • 控制器:接收来自用户的输入,调用模型层,响应对应的视图组件 Servlet Filter

2. 使用 Filter 作为控制器的好处

  • 使用一个过滤器来作为控制器, 可以方便地在应用程序里对所有资源(包括静态资源)进行控制访问.
  • Servlet VS Filter
    • Servlet 能做的 Filter 是否都可以完成 ? 嗯。
    • Filter 能做的 Servlet 都可以完成吗 ?
      • 拦截资源却不是 Servlet 所擅长的! Filter 中有一个 FilterChain,这个 API 在 Servlet 中没有

3. 使用范例

  • 需求
  • 代码(这里使用的是 Servlet 3.0 的注解的方式,不需要在web.xml 中配置)
@WebFilter(filterName = "filterController", urlPatterns = "*.action")
public class FilterController implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        // Filter 实现Servlet功能
        String servletPath = httpRequest.getServletPath();
        String path = null;
        // 2. 判断 servletPath, 若其等于 "/product-input.action", 则转发到
        // /WEB-INF/pages/input.jsp
        if ("/product-input.action".equals(servletPath)) {
            path = "/WEB-INF/pages/input.jsp";
        }
        if ("/product-save.action".equals(servletPath)) {
            String productName = request.getParameter("productName");
            String productDesc = request.getParameter("productDesc");
            BigDecimal productPrice = new BigDecimal(request.getParameter("productPrice"));
            Product product = new Product(1001, productName, productDesc,
                    productPrice);
            System.out.println("Save Product: " + product);
            request.setAttribute("product", product);
            path = "/WEB-INF/pages/details.jsp";
        }
        if (path != null) {
            request.getRequestDispatcher(path).forward(request, response);
            return;
        }
        chain.doFilter(request, response);
    }
    
    public void destroy() {}
    public void init(FilterConfig fConfig) throws ServletException {}
}

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号