【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优化的方向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sp6WdY18-1658845738149)(../../../../Pictures/Spring/wps1-16588394965531.jpg)]

1.4 SpringMVC执行的流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYiOKYgy-1658845738151)(../../../../Pictures/Spring/wps2-16588394965532.jpg)]

执行流程说明:

  1. 向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。
  2. DispatcherServlet 根据中的配置对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用 HandlerMapping 获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。
  3. DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。
  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
    • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
    • 数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。
    • 数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
  5. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。
  6. 根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。
  7. ViewResolver 结合Model和View,来渲染视图。
  8. 视图负责将渲染结果返回给客户端

1.5基于注解的SpringMVC程序

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

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

创建步骤:

  1. 新建maven_web项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3xvEjHv-1658845738151)(../../../../Pictures/Spring/wps3-16588394965533.jpg)]

  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文件版本太低了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDefYg8n-1658845738152)(../../../../Pictures/Spring/wps4.jpg)]

  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>

classpath:springmvc.xml表示从类路径下加载SpringMVC的配置文件。

指定拦截以.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注解所在的包路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值