SpringMVC
一、基本操作
1、介绍
封装Servlet
2、SpringMVC优势
SpringMVC是Spring为表述层开发提供的一整套完备的解决方案。
在表述层框架历经Strust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为Java EE项目表述层开发的首选方案。之所以能做到这一点,是因为SpringMVC具备如下显著优势:
- Spring 家族原生产品,与IOC容器等基础设施无缝对接
- 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
- 代码清新简洁,大幅度提升开发效率
- 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
- 性能卓著,尤其适合现代大型、超大型互联网项目要求
3、环境搭建
①导入依赖
<dependencies>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
②转换module类型
将当前module转换为Web工程,在这个过程中生成web.xml。
需要手动调整xml路径
③web.xml
<!-- 配置SpringMVC中的前端控制器DispatcherServlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 对DispatcherServlet来说,url-pattern有两种方式配置 -->
<!-- 方式一:配置“/”,表示匹配整个Web应用范围内所有请求。这里有一个硬性规定:不能写成“/*”,因为SpringMVC不能解析jsp。只有这一个地方有这个特殊要求,以后我们再配置Filter还是可以正常写“/*”。 -->
<!-- 方式二:配置“*.扩展名”,表示匹配整个Web应用范围内部分请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
④创建请求控制器
SPringMVC中的控制器由一个POJO担任,因此使用**@Controller注解将其标记成为控制层组件**,交给IOC管理,SpringMVC才能够识别
@Controller
public class HelloController {
}
⑤Spring配置文件
<!-- 自动扫描包 -->
<context:component-scan base-package="controller"/>
<!-- Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8" />
</bean>
</property>
</bean>
</property>
</bean>
注意该路径:/WEB-INF/templates/
所有html文件需要放置在templates下
⑥设置TomCat
⑦在请求控制器中使用@RequestMapping注解
@Controller
public class HelloController {
//如果请求路径和Value值相同,则执行该处理方法
@RequestMapping("/")
public String entrance(){
//将逻辑视图返回
return "index";
}
}
处理流程:
1.检测到@RequestMapping(“/”)相同路径
2.方法将视图逻辑层返回
3.Thymeleaf拼接前后缀:index.html
⑧执行测试即可
tips:
<a th:href="@{/hello}"></a>
使用Thymeleaf语法可以自动添加上下文路径
4、总结
- 浏览器发送请求,在 web.xml 中进行筛选,如果格式符合(不为jsp格式),则被DIspatcherServlet处理(所有的Servlet都经过此处理)
- 通过SpringMVC.xml找到控制器(controller),通过注解**@RequestMapping中的value值** 与路径匹配
- 如果一致则执行注解下的方法
- 方法的 返回值 会被Thymeleaf拼接成完整地址,之后进行渲染并转发