SpringMVC概述
特点
- 是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
- 灵活性强,易于与其他框架集成。
- 提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
- 可自动绑定用户输入,并能正确的转换数据类型。
- 内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
- 支持国际化。可以根据用户区域显示多国语言。
- 支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
- 使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。
传统Servlet存在的问题
使用SpringMVC替换Servlet
1、需要判断调用哪个方法。(逻辑需要自己编写)
2、需要获得request的数据,并且需要手动封装,还要进行类型转换。
3、跳转和转发数据的代码太繁琐。
4、通过ajax请求的对象,需要通过fastjson进行转换,并使用相应对象的输出流写出。
SpringMVC工作原理
DispatcherServlet(前端控制器)
所有的 Web 请求都需要通过它来处理,进行转发,匹配,数据处理后,并转由页面进行展现,是 SpringMVC 最核心的部分。除此之外 SpringMVC 还有不同的 HandlerMapping 映射策略,各种 Controller 控制器的实现,各种视图解析,拦截器,
<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-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
-
映射器
-
适配器
simpleControLLerHandLerAdapter:可以执行实现了ControLler接口的控制器
HttpRequestHandLerAdapter:可以执行实现了HttpRequestHandler接口的控制器 -
视图解析器
Controller的实现
org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller。该注解在使用时不需要再实现Controller接口,只需要将@Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可。
实例
package com.itheima.controller;
import org.springframework.stereotype.Controller;
...
@Controller
public class FirstController{
@RequestMapping(value="/firstController")
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) {
...
return mav;
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.itheima.controller" /><!--指定需要扫描的包-->
</beans>
@RequestMapping
注解的使用
Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用@RequestMapping注解类型,它用于映射一个请求或一个方法。使用时,可以标注在一个方法或一个类上。
组合注解
Spring框架的4.3版本中,引入了新的组合注解,来帮助简化常用的HTTP方法的映射,并更好的表达被注解方法的语义。
注解名称 | 含义 |
---|---|
@GetMapping | 匹配GET方式的请求 |
@PostMapping | 匹配POST方式的请求 |
@PutMapping | 匹配PUT方式的请求 |
@DeleteMapping | 匹配DELETE方式的请求 |
@PatchMapping | 匹配PATCH方式的请求 |
ViewResolver(视图解析器)
pring MVC中的视图解析器负责解析视图。可以通过在配置文件中定义一个ViewResolver来配置视图解析器,其配置示例如下:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" /><!--设置前缀-->
<property name="suffix" value=".jsp" /><!--设置后缀-->
</bean>