SpringMVC
SpringMVC框架学习
SpringMVC
SpringMVC初识
SpringMVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架
额外需要两个包:
1 | <!-- SpringMVC框架 --> |
SpringMVC工作流程
配置MVC四个主要的类
MVC框架内部主要工作由四个构成,无需我们操作,只需要配置即可:
DispatcherServlet
前端控制器HandlerMapping
处理器映射器HandlerAdapter
处理器适配器ViewResolver
视图解析器
以一个简单的demo来看他们的作用:
简单的Demo
web.xml
配置文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<web-app>
<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>
</web-app>springmvc-config.xml
配置文件1
2
3
4
5
6
7
8
9<!-- beans中配置 -->
<!-- handler 处理器:我们在此进行逻辑业务代码的实现 -->
<bean name="/myController" class="com.dwh.controller.myController" />
<!-- handlerMapping 处理器映射器配置 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- handlerAdapter 处理器适配器配置-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- ViewResolver 视图解析器配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>myController
:继承Controller接口,这就是我们所说的处理器handler1
2
3
4
5
6
7
8public class myController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","第一个SpringMVC程序");
modelAndView.setViewName("/WEB-INF/jsp/first.jsp");
return modelAndView;
}
}first.jsp
返回的JSP页面1
2
3
4
5
6
7
8
9<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>tomcat运行,访问
http://localhost:8080/myController
就会返回第一个SpringMVC程序
这几个字了
MVC工作流程
如图:(图中橙色标记的是框架内部的实现,白色的(view与handler)是我们程序员需要编写的)
流程详述:
- 用户在浏览器,输入网址
http://localhost:8080/myController
后,请求会被SpringMVC的前端控制器(DispatcherServlet)拦截 - 前端控制器拦截后,调用处理器映射器(HandlerMapping)
- 处理器映射器根据URL,找到具体的处理器,生成处理器对象及处理器拦截器,一并返回给前端控制器
- 前端控制器选择合适的处理器适配器(HandlerAdapter)
- 处理器适配器调用处理器(Handler)(也被称为后端控制器),返回一个
ModelAndView
对象 - 返回给HA
- 返回给DS
- 根据
ModelAndView
选择合适的视图解析器(ViewResolver) - VR解析后,向DS发送具体的View
- DS对View进行渲染(将数据填充至视图中)
- 显示在浏览器,展示给用户
SpringMVC核心类
前端控制器DispatcherServlet配置详解
在web.xml
中配置
1 | <servlet> |
Controller相关注解
@Controller
注解
@Controller
注解可以帮助我们快速的实现后端控制器,而不需要再实现Controller接口重写handleRequest方法
如下:
1 |
|
@RequestMapping
注解
可以配置在类或是方法上,指明URL访问所调用的处理器
1 |
|
这样就可以访问http://localhost:8080/hello/userService
,就会调用对应方法进行处理
@RequestMapping
有很多属性,这里提几个重要的属性:
- name:为映射地址指定别名
- value:默认属性,映射请求到一个方法或类上
- method:可以选择POST、GET等请求方式
例如:
1 |
等同于
1 |
而且
1 |
等同于
1 |
PostMapping、PutMapping等同理
视图解析器ViewResolver配置
在springmvc-config.xml
文件中配置:
1 | <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> |
配置prefix
与suffix
就可以更改返回字符串的内容
比如:
1 |
|
SpringMVC支持的返回类型有很多种,最重要的有三种:
ModelAndView
:可以添加Model数据String
:跳转页面,但不能携带数据Void
:多用在异步请求
String类型只可以跳转页面,配置VR就可以设置它的前缀与后缀,进而访问到对应的Jsp文件
比如这里就访问到:/WEB-INF/jsp/first.jsp
文件
而且我们也能看到,String虽然不能携带数据,但是我们可以传入Model参数,间接传递数据
重定向与请求转发
SpringMVC中使用返回类型为String的方法来进行重定向与转发,只需要更改返回值即可
重定向:
1 | public String update(Model model){ |
请求转发:
1 | public String update(Model model){ |
扫描配置
为了使我们的注解起作用,还需要进行配置扫描
如下:
1 | <mvc:annotation-driven/> |
- 不配置
<mvc:annotation-driven/>
有可能会扫描不到Controller等注解,进而导致404报错 - 注意不要给一个handler映射多个路径
以上可以解决问题,注意base-package
配置你对应的位置