目录
1. 什么是springmvc
2.项目中加入springmvc支持
2.1 导入依赖
2.2 springMVC配置文件
2.3 web.xml配置
2.4 中文编码处理
3. 编写一个简单的controller
4. 视图层配置
4.1 视图解析器配
4.2 静态资源配置
4.2 编写页面
4.3 页面跳转方式
5. SpringMVC处理请求的流程
6. 常用注解
1. 什么是springmvc
Spring Web MVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。
ssm:即springmvc, spring, mybatis
2.项目中加入springmvc支持
2.1 导入依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version>
</dependency><!-- JSTL依赖 原因:org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包-->
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version>
</dependency>
2.2 springMVC配置文件
将课件中的spring-mvc.xml放入WEB-INF目录下,详细信息见配置文件中的注释。
注:关于注解扫描的优化:
在使用spring+springmvc时会存在两个上下文,一个父上下文spring上下文,一个子上下文springmvc上下文,springmvc上下文可以访问父上下文(即spring上下文),但spring上下文不能访问到子上下文(即springmvc上下文)。
优化思路:spring中配置的注解扫描排除掉controller,而springmvc配置文件中的注解扫描则只需要扫描controller即可。具体配置详见课件中的配置文件。
2.3 web.xml配置
将随课件提供的web.xml放入WEB-INF目录,替换原来的配置文件。需要理解配置文件的各个部分的作用。
2.4 中文编码处理
将随课件提供的EncodingFiter.java,将入项目并在web.xml中配置,以便于处理中文编码。
3. 编写一个简单的controller
注: 示例中用到的注解:
- @Controller:该注解在springmvc中用于标记一个控制器,类似的注解还有@RestController,不同的是@RestController专门用于标记一个rest风格的接口,相当于@ResponseBody + @Controller合在一起的作用。
- @RequestMapping:该用于标记请求路径,在有些参考资料中也称之为服务端点。该注释可以用在方法上也可以用在类上。
使用浏览器测试,如果服务后台输出了提示字符串,则说明配置成功,现在页面上会显示错误,因为目前还没有配置页面。
4. 视图层配置
4.1 视图解析器配
注: 如果是前后端分离的开发方式则不需要配置。
4.2 静态资源配置
注: 如果加该配置,则不能正常显示图片, 可以注释掉测试看看。
4.2 编写页面
1)编写一个测试页面
2)修改controller的配置
4.3 页面跳转方式
1)转发: "forward:path"
2)重定向: "redirect:path"
注: 因为页面文件放置在了WEB-INF目录下,所以不能直接重定向到页面。注意看示例。
5. SpringMVC处理请求的流程
主要组件
1 首先用户发送请求-->DispatherServlet
2 DispatcherServlet-->HandlerMapping
3 DispatcherServlet-->HandlerAdapter
4 HandlerAdapter-->处理器功能处理方法的调用
5 ModelAndView的逻辑视图名-->ViewRecolver
6 View-->渲染
7 返回控制权给DispatcherServlet,由DispatcherServlet返回呼应给用户,流程结束
处理流程示意图:
Spring工作流程描述
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
6. 常用注解
- @Controller:用于标识处理器类
- @RestController注解相当于@ResponseBody + @Controller合在一起的作用
- @RequestMapping:请求到处理器功能方法的映射规则,可定义到类和方法,常用参数:value、method
- @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定,常用参数:value、required、defaultValue, (required设置成false的参数类型必须是引用类型,因为基本数据类型是不能为null的)
- @ModelAttribute:请求参数到命令对象的绑定。
可用@ModelAttribute标注方法参数,方法参数会被添加到Model对象中(作用:向视图层传数据)
可用@ModelAttribute标注一个非请求处理方法,此方法会在每次调用请求处理方法前被调用(作用:数据初始化)
可用@ModelAttribute标注方法,方法返回值会被添加到Model对象中(作用:向视图层传数据) - @RequestBody:用于目前比较流行的ajax开发的数据绑定(即提交数据的类型为json格式)