写点什么

【SSM】SpringMVC 系列——SpringMVC 概述

作者:胖虎不秃头
  • 2022 年 10 月 04 日
    河南
  • 本文字数:2572 字

    阅读完需:约 8 分钟

【SSM】SpringMVC系列——SpringMVC概述

第 1 章 SpringMVC 概述

1.1 SpringMVC 简介

SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在 Spring3.0 后发布的。

1.2 SpringMVC 的优点

1.2.1 基于 MVC 架构

基于 MVC 架构,功能分工明确。解耦合。

1.2.2 容易理解,上手快,使用简单

就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。

1.2.3 作为 Spring 框架一部分,能够使用 Spring 的 IOC 和 AOP

方便整合 Strtus,MyBatis,Hiberate,JPA 等其他框架。

1.2.4 SpringMVC 强化注解的使用

在 Controller, Service, Dao 都可以使用注解。方便灵活。使用 @Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者 @Resource 在控制器类中注入 Service,在 Service 类中注入 Dao。

1.3SpringMVC 优化的方向

1.4 SpringMVC 执行的流程


执行流程说明:


  1. 向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。

  2. DispatcherServlet 根据<servlet-name>中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。

  3. DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。

  4. 提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller)。在填充 Handler 的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。

  5. 数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等。

  6. 数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。

  7. 数据验证:验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中。

  8. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。

  9. 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet。

  10. ViewResolver 结合 Model 和 View,来渲染视图。

  11. 视图负责将渲染结果返回给客户端

1.5 基于注解的 SpringMVC 程序

所谓 SpringMVC 的注解式开发是指:在代码中通过对类与方法的注解,便可完成处理器在 springmvc 容器的注册。注解式开发是重点。


项目案例功能:用户提交一个请求,服务端处理器在接收到这个请求后,给出一条欢迎信息,在响应页面中显示该信息。


创建步骤:


  1. 新建 maven_web 项目



  1. 添加依赖


<dependency>     <groupId>org.springframework</groupId>    <artifactId>spring-webmvc</artifactId>    <version>5.2.5.RELEASE</version></dependency> <dependency>     <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.1.0</version> </dependency>
复制代码


  1. 删除 web.xml 文件重新添加,因为自动生成的 web.xml 文件版本太低了。



  1. 在 web.xml 文件中注册 SpringMvc 框架。


​ 因为 web 的请求都是由 Servlet 来进行处理的,而 SpringMVC 的核心处理器就是一个 DispatcherServlet,它负责接收客户端的请求,并根据请求的路径分派给对应的 action(控制器)进行处理,处理结束后依然由核心处理器 DispatcherServlet 进行响应返回。


中央调度器的全限定性类名在导入的 Jar 文件 spring-webmvc-5.2.5.RELEASE.jar 的第一个包 org.springframework.web.servlet 下可找到。


<servlet>     <servlet-name>springmvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>         <param-name>contextConfigLocation</param-name>        <param-value>classpath:springmvc.xml</param-value>    </init-param></servlet><servlet-mapping>     <servlet-name>springmvc</servlet-name>     <url-pattern>*.action</url-pattern></servlet-mapping>
复制代码


<param-value>classpath:springmvc.xml</param-value>表示从类路径下加载 SpringMVC 的配置文件。


<url-pattern>指定拦截以.action 结尾的请求,交给核心处理器 DispatcherServlet 处理。


  1. 删除 index.jsp 页面,重新建 index.jsp 页面,因为自动生成的页面缺失指令设置。

  2. 开发页面,发出请求。


<a href="${pageContext.request.contextPath}/zar/hello.action">访问action</a>
复制代码


  • 其中:

  • /zar 是类上的注解路径

  • /hello 是方法上的注解路径


  1. 在 webapp 目录上新添目录/admin。

  2. 在/admin 目录下新建 main.jsp 页面。用来进行服务器处理完毕后数据的回显。

  3. 开发 HelloSpringMvc.java-->控制器(相当于以前的 servlet)。这是一个普通的类,不用继承和实现接口。类中的每个方法就是一个具体的 action 控制器。


  • 类中的方法定义有规范:

  • A. 访问权限是 public。

  • B. 方法名自定义。

  • C. 方法的参数可以有多个,任意类型,用来接收客户端提交上来的数据。

  • D. 方法的返回值任意。以返回 String 居多。


@Controller@RequestMapping("/zar")public class HelloSpringMvc {     @RequestMapping("/hello")     public String one(){         return "main";    } }
复制代码


@Controller:表示当前类为处理器,交给 Spring 容器去创建对象。


@RequestMapping:表示路径映射。该注解可以加在类上相当于包名,还可以加在方法上相当于 action 的名称,都是来指定映射路径的。


  1. 完成 springmvc.xml 文件的配置。在工程的类路径即 resources 目录下创建 SpringMVC 的配置文件 springmvc.xml。该文件名可以任意命名。推荐使用 springmvc.xml.


<context:component-scan base-package="com.bjpowernode.controller"></context:component-scan> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">     <property name="prefix" value="/WEB-INF/jsp/"></property>    <property name="suffix" value=".jsp"></property></bean> 
复制代码


SpringMVC 框架为了避免对于请求资源路径与扩展名上的冗余,在视图解析器


InternalResouceViewResolver 中引入了请求的前辍与后辍。而 action 中只需给出要跳转页面的文件名即可,对于具体的文件路径与文件扩展名,视图解析器会自动完成拼接。


context:component-scan:用来进行包扫描,这里用于指定 @Controller 注解所在的包路径。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
【SSM】SpringMVC系列——SpringMVC概述_spring_胖虎不秃头_InfoQ写作社区