1. 使用Filter 作为控制器

最近整理一下学习笔记,并且准备放到自己的博客上。也顺便把Struts2 复习一遍

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 {}
}

转载于:https://www.cnblogs.com/MPPC/p/6104326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在传统的Java Web项目中,web.xml文件是一个重要的配置文件,它定义了Web应用程序的配置信息,包括Servlet、Filter、Listener等组件的配置以及相关的参数设置。在Spring MVC框架中,web.xml文件中的配置主要是与前端控制器有关的配置。 前端控制器是Spring MVC框架中的一个核心组件,它负责接收客户端的请求并将请求分发给相应的处理器进行处理。在web.xml文件中,需要配置一个Servlet来作为前端控制器,通常这个Servlet的名称为“DispatcherServlet”。 以下是一个web.xml文件中配置Spring MVC前端控制器的示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>SpringMVC</display-name> <!-- 配置Spring MVC前端控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 配置Spring MVC配置文件的位置 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <!-- 配置Servlet的启动顺序 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 配置前端控制器的映射 --> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 其他配置 --> ... </web-app> ``` 上述示例中,配置了一个名为“dispatcherServlet”的Servlet作为前端控制器,并将其映射到根路径“/”。此外,还配置了一个用于加载Spring MVC配置文件(通常为spring-mvc.xml)的init-param和一个用于指定Servlet启动顺序的load-on-startup元素。 在配置完web.xml文件后,还需要编写Spring MVC配置文件(如上述示例中的spring-mvc.xml),来定义处理器映射、视图解析器等相关配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值