Maxon's Blog

SpringMVC

1

SpringMVC

  • 简介:
    • SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFramework的后续产品,已经融合在Spring Web Flow
  • SpringMVC已经成为目前主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架.他通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口.同时它还支持RESTful编程风格的请求.

一般请求过程:

image-20221023113932628

Xml
<!--    配置SpringMVC的前端控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<!--    配置映射地址-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
Java
@Controller
public class UserController {

    @RequestMapping("/quick")
    public String save(){
        System.out.println("UserController save running....");
        //跳转的视图
        return "success.jsp";
    }
}

注意: spring-mvc.xml 要开组件扫描!!

(32条消息) 解决SpringMVC报404错误_weixin_46085086的博客-CSDN博客_springmvc报404

image-20220905124922422

SpringMVC 执行流程:

  • 用户发送请求至前端控制器DispatcherServlet
  • DispatcherServlet受到请求调用HandlerMapping处理器映射器
  • 处理器映射器找到具体的处理器(可以根据xml配置,注解进行查找),生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet
  • DispatcherServlet 调用HandlerAdapter处理器适配器
  • HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器).
  • Controller 执行返回 ModelAndView
  • HandlerAdapter将 Controller 执行结果 ModelAndView返回给DispatcherServlet
  • DispatcherServletModelAndView传给ViewReslover视图解析器
  • ViewReslover解析后 返回具体 View
  • DispatcherServlet根据 View 进行渲染视图(即将模型数据填充至视图中).DispatcherServlet响应用户

SpringMVC 注解解析

@RequestMapping

  • 作用:用于建立请求URL和处理请求方法之间的对应关系
  • 位置:
    • 类上,请求URL的第一级访问目录.此处不写的话,相对于访问应用的根目录.
    • 方法上,请求URL的第二级访问目录,与类上的使用@RequestMapping标注的一级目录一起组成访问的虚拟路径
Java
@Controller
// 类上 http://localhost:port/xxx/quick
@RequestMapping("/xxx")
public class UserController {

    //方法上 请求地址 http://localhost:port/quick
    @RequestMapping("/quick")
    public String save(){
        System.out.println("UserController save running....");
        //跳转的视图
        //默认 forward:  可以改成 redirect:
        return "/success.jsp";
    }
}
  • 参数:
    • value: 用于指定请求的URL.它和path属性的左右是一样的
    • method: 用于指定请求的方式 默认是Get方法
    • params: 用于指定限制请求参数的条件.它支持简单的表达式.要求请求参数的keyvalue必须和配置的一毛一样
      • params={"accountName"},表示请求参数必须有accountName
      • params={"money!100"},表示请求参数中money不能是100
Xml
@RequestMapping(value="/xxx",method=RequestMethod.POST,params={"username"})

SpringMVC的xml配置解析

Xml
<!--配置内部资源视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

要点:

SpringMVC相关组件

  • 前端控制器 DispatcherServlet
  • 处理器映射器 HandlerMapping
  • 处理器适配器 HandlerAdapter
  • 处理器 Handler
  • 视图解析器 View Resolver
  • 视图 View

SpringMVC的注解和配置

  • 请求映射注解: @RequestMapping
  • 视图解析器配置:
    • REDIRECT_URL_PREFIX="redirect:"
    • FORWARD_URL_PREFIX="forward:"
    • prefix="";
    • suffix="";