SpringMVC框架(1)
1 .SpringMVC 入门
简介:MVC
M:Model
V:View
C:Controller - servlet/action/controller
Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。
Spring MVC主要由DispatcherServlet、处理器映射【找控制器】、适配器【调用控制器的方法】、控制器【业务】、视图解析器、视图组成。
1.2 SpringMVC的原理(执行流程)
执行流程
1.DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发起请求,DispatcherServlet接收请求并拦截请求
- 我们假设请求的url为:http://localhost:8080/SpringMVC/hello
- 如上吧url拆分为是三个部分:
- http://localhost:8080服务器的域名
- SpringMVC部署在服务器上的web站点
- hello表示控制器
- 通过分析,如上url表示为:请求位于服务器localhost:8080的SpringMVC站点的hello控制器
2.HandlerMapping为处理器映射器,DispatcherServlet调用,HandlerMapping根据请求查找Handler
3.HandlerExecution表示具体的Handler,其主要的作用是根据url查找控制器,如上url被查找控制器为:hello
4.HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等
5.HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler
6.Handler让具体的Controller执行
7.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView
8.HandlerAdapter将视图逻辑或模型传递给DispatcherServlet
9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
10.视图解析器将解析的逻辑视图名传给DispatcherServlet
11.DispatcherServlet根据视图解析器的视图结果,调用具体的视图
12.最终将视图呈现给用户
1.3Spring入门案例
第一步:导入springmvc jar包
暂时先导入下面的jar包
第二步:在web.xml配置DispatcherServlet(前端控制器)
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> |
第三步:在WEB-INF目录下创建DispatcherServlet-servlet.xml
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
</beans> |
第四步:配置DispatcherServlet-servlet.xml
<!-- 1. 配置处理器映射,springmvc默认的处理器映射器 BeanNameUrlHandlerMapping:根据bean的name属性的url去找handlerController --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 2. 配置处理器适配置器执行Controller --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 3.配置一个控制器Handler --> <bean name="/user.do" class="com.gyf.backoffice.web.controller.UserController"/> <!-- 4.配置springmvc视图解析器 视图解析器解析的视频路径为:前缀 + 后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views"/> <property name="suffix" value=".jsp"/> </bean> |
第五步:创建个Controller控制器
第六步:创建一个userList.jsp页面
第七步:运行项目,访问路径
1.4 SpringMVC的各组件
SimpleControllerHandlerAdapter控制器处理适配器源码
(1)URL处理器映射
【1】BeanNameUrlHandlerMapping
功能:寻找Controller,根据url请求去匹配bean的name属性,从而获取Controller
【2】SimpleUrlHandlerMapping
功能:寻找Controller,根据浏览器url匹配简单url的key,key就是Controller的id找到Controller
测试路径:
http://localhost:8080/springmvc-demo01/user1.do
http://localhost:8080/springmvc-demo01/user2.do
http://localhost:8080/springmvc-demo01/user3.do
【3】ControllerClassNameHandlerMapping
功能:寻找Controller
根据类名(MyController)类名.do来访问,类名首字母小写
测试
(2)处理器适配器
【1】SimpleControllerHandlerAdapter
功能:执行controller
调用controller里面方法,返回modelAndView
【2】HttpRequestHandlerAdapter
执行控制器
负责调用实现HttpRequestHandler接口的控制器
注意:两个处理器适配器可以共存
1.5命令控制器【了解】
Springmvc通过命令设计模式接受页面参数
添加页面
|
Command控制器
Info.jsp
views结构
DispatchServelt-sevlet配置文件
如果bean中配置name,都要加上/斜杠 |
测试
默认日期格式只能2017/10/11格式,其它格式接收参数会为空
乱码问题
POST请求乱码
<!-- 配置编码过滤器 --> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter>
<filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
GET请求乱码
Tomcat8 默认进行了url编码,get请求不乱码,Tomcat7会乱码
日期类型转换
springmvc默认接收的日期格式为yyyy/MM/dd,如果添加其它格式,只要重写一个方法,如图
2.注解开发
2.1 注解开发入门案例
修改springmvc的 配置文件
把前面的项目复制一份,修改一个DispatchServlet-Servlet.xml配置文件
<!-- 1.配置注解扫描位置 --> <context:component-scan base-package="com.gyf.backoffice.web.controller"/>
<!-- 2. 配置处理器映射,通过注解来查找 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 3.配置注解处理适配器来执行控制器的方法 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 配置springmvc视图解析器 视图解析器解析的视频路径为:前缀 + 后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views"/> <property name="suffix" value=".jsp"/> </bean> |
把UserController修改下
修改Tomcat运行的jdk版本
因为3.2的springmvc注解与jdk1.8不兼容,跑tomat时会报错,如图
解决办法1:升级spring到4.0的版本
解决办法2:修改Tomcat运行的jdk版本
测试注解配置的访问
MVC:annotation-driven
代化mvc配置文件 |
2.2 RequestMapping讲解
配置请求路径映射路径
写法:
@RequestMapping(“list”) @RequestMapping(“/list.do”) @RequestMapping(value=”/list.do”) @RequestMapping(value = "/list3",method=RequestMethod.POST) 只能使用POST方法 相当于PostMapping @RequestMapping(value = "/list3",method=RequestMethod.Get) 只能使用GET方法 相当于GetMapper |
自定义根路径
可以控制器上添加一个RequestMapping,如图
2.3接收请求参数
封装参数分析
参数类型有:基本类型,int,String等等基本类型, Pojo类
Struts2参数:基于属性封装,在action会添加属性,提供set方法。
Springmvc参数封装:基于方法进行封装。
接收int,String,Date,数组类型
在views/user中提供一个form表单在UserController提供一个用户注册的方法 |
接收pojo类型
创建一个pojo User类型
配置一个注册方法
springmvc接收参数时不需要像struts那样,在表单标签添加user.username这第一个东西
接收包装类型参数
把User写成一个类的属性
添加一个注册方法
修改form表单
接收集合List类型参数
在User扩展中添加一个集合
添加一个注册 的方法,参数写UserExt
表单
接收集合Map类型参数
2.4 Spring与Struts的区别
实现机制:
Struts2是基于过滤器实现的。
Springmvc基于servlet实现。
运行速度:
Servlet比过滤器快。
Struts2是多例
每一次请求,都会创建一个Action对象
请求来了以后,struts2创建多少个对象:ActionContext,valuestack,UAction,ActionSuport,ModelDriven
Springmvc是单例。
同一个Controller请求,只会创建一个Controller
参数封装来分析:
Struts基于属性进行封装,Action有参数属性。
Springmvc基于方法封装,参数是写在Controller的方法。
3.页面回显
3.1 配置一个列表方法
3.2 显示列表数据
3.3 edit方法
3.4 编辑页面
效果
4.URL模版映射
url模版映射可以restfull软件架构。
体验
修改url格式,如图 |
配置接收url模版映射 {}:匹配接受页面Url路径参数 @Pathariable:{}里面参数注入后面参数里面 |
在web.xml中配置rest路径
Web.xml |
测试 |
|
5.转发和重定
转发到同一个控制器的方法
转发到不同一个控制器的方法
重定向,只需要把forward改成redirect
6 RequestParam
/**
* RequestParam参数描述
* value:参数名称
* defaultValue:默认值
* required:参数是否必须有值,如果为true,参数又为空,会报错
* */
本文地址:https://blog.csdn.net/WinnerBear/article/details/112000117