SpringMVC
Posted 梦Dreamer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC相关的知识,希望对你有一定的参考价值。
什么是springmvc
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。springmvc是一个基于mvc的web框架。
springmvc框架
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
Springmvc的使用
web.xml中配置前端控制器
springmvc.xml中配置处理器适配器、处理器映射器、处理器配置(Controller)、视图解析器。
配置前端控制器
在web.xml中配置springmvc前端控制器。
load-on-startup:表示servlet随服务启动;
servlet拦截方式解析:
1、拦截固定后缀的url,比如设置为 *.do、*.action,例如:/user/add.action
此方法最简单,不会导致静态资源(jpg,js,css)被拦截。
2、拦截所有,设置为/,例如:/user/add /user/add.action
此方法可以实现REST风格的url,很多互联网类型的应用使用这种方式。
但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示。需要特殊处理。
3、 拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功。
配置处理器适配器、处理器映射器、处理器配置(Controller)、视图解析器
此处配置的是非注解的处理器适配器和处理器映射器
<!--配置Handler -->
<bean name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/>
<!--处理器适配器:所有处理器适配器都实现HandlerAdapter接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置处理器映射器:HandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--配置视图解析器:ViewResolver,解析jsp,默认使用jstl标签,classpath下需要有jstl标签 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
处理器开发,也就是Controller需要实现Controller接口才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
配置注解处理器映射器和处理器适配器
注:注解的映射器和注解的适配器必须配对使用
<!--注解映射器 -->
<!-- <bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> -->
<!--注解适配器 -->
<!-- <bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> -->
<!--也可以使用这种方式 -->
<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置 mvc:annotation-driven默认加载很多的参数绑定方法,
比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和
RequestMappingHandlerAdapter 实际开发时使用mvc:annotation-driven -->
<mvc:annotation-driven />
<!-- 配置controller扫描 -->
<context:component-scan base-package="com.dmsd.itoo.card.controller" />
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 写法二 -->
<!-- <bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/> -->
<!--资源映射 -->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/Script/" mapping="/Script/**" />
<!-- <mvc:resources location="/images/" mapping="/images/**"/> -->
配置了视图解析器的前缀和后缀,在Handler中可以不用指定前缀和后缀:
注解Handler的开发:
1、需要在类上面添加@Controller,说明这个类是一个控制器;
2、@RequestMapping(“/queryItems”)用来定义访问Url,可以为整个类或者方法定义;
3、可以在方法的参数上添加@PathVariable("pageIndex")注解,表示方法参数绑定到地址URL的模板。即,获取RequestMapping中的参数,如果RequestMapping中没有参数,则使用PathVariable将会报错。
4、@ModelAttribute:应用于方法参数,参数可以在页面直接获取,相当于request.setAttribute。
5、@ResponseBody:放在方法上,表示返回类型将会直接作为HTTP响应字节流输出。出去json格式的数据时,经常使用。和@ResponseBody类似的注解,@RequestBody,指定方法参数应该被绑定到HTTP请求Body上。
6、@RequestParam:应用于方法参数,如果jsp传递的参数和方法中使用的参数不一致,可以使用此参数。
7、@SessionAttributes:session管理,Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性,只能声明在类上,不能声明在方法上。
8、@CookieValue: 获取cookie信息
9、@RequestHeader: 获取请求的头部信息
以上是关于SpringMVC的主要内容,如果未能解决你的问题,请参考以下文章