SpringMVC介绍
Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。我们这里借用狂神说的原理图及流程说明
执行流程
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。我们假设请求的url为 : http://localhost:8080/SpringMVC/hello 。url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
- HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
使用注解编写SpringMVC程序
1.环境准备
建立一个普通的Maven项目,并添加Web框架支持。
首先导入依赖包
junit
junit
4.12
org.springframework
spring-webmvc
5.2.7.RELEASE
javax.servlet
servlet-api
3.0-alpha-1
javax.servlet.jsp
jsp-api
2.2
javax.servlet
jstl
1.2
并设置过滤文件,保证输出配置文件
src/main/resources
**/*.properties
**/*.xml
false
src/main/java
**/*.properties
**/*.xml
false
配置完Pom.xml文件后,进入项目结构(快捷键F4),进入构建,选择当前项目,在输出布局中添加lib文件夹及导入包的依赖,目的是保证我们打完的war包中包含我们所使用的依赖包,而不会报错。
2.配置web.xml文件
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc-servlet.xml
1
springmvc
/
说明:
1.web.xml中最为核心的配置是 DispatcherServlet ,接收请求并拦截请求,控制转发。
2.init-param 需要绑定我们Spring的配置文件。
3./ 和 /* 的区别:< url-pattern > / url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* url-pattern > 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
3.编写springmvc-servlet.xml配置文件
我们在resources下建议Spring的配置文件springmvc-servlet.xml,并在建立相应的com.tioxy.controller包。
说明:
1.mvc:default-servlet-handler/标签目的是保证比如 .css .js .html文件不经过视图解析器。
2.mvc:annotation-driven/标签,是注册我们适配器和映射器。
3.最后就是视图解析器,我们这里在WEB-INF目录下建jsp文件夹,并建立测试用的hello.jsp,目的是把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。
4.创建Controller
编写一个controller类,com.tioxy.controller.HelloController
package com.tioxy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model){
// 封装数据
model.addAttribute("msg","Hello.SpringMVCAnnotation!");
return "hello";// 会被视图解析器处理,这里是要跳转视图的名字
}
}
说明:
1.@Controller是为了让Spring IOC容器初始化时自动扫描到.
2.@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello。
3.方法中声明Model类型的参数是为了把Action中的数据带到视图中。
4.方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
5.创建视图层
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${msg}
6.配置Tomcat并启动
输入正确的地址
引用说明:
狂神说Java之使用注解开发SpringMVC:https://www.bilibili.com/video/BV1aE41167Tu?p=7