spring mvc

SPRING MVC
一,什么是spring mvc
spring mvc 是spring的后续产品,是一个mvc框架,通过实现model-view-controller 模式将数据,
业务,视图进行分离
spring mvc是围绕着dispatcherServlet这个核心控制器设计的,
DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、
view resolution、locale以及theme resolution来处理请求并且转到对应的视图

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,
即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,
框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
二,为什么要spring mvc
a。实现了零配置,不用想以前那样在xml配置很多bean标签
b,通过注解现实依赖注入和url的注入
c,通过注解实现页面数据的封装,
三,如何使用spring mvc
a,先在web.xml上配置spring mvc的核心控制器
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/conf/floor/dao/system_dao.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
b,就是在spring-servlet.xml上配置
1,启动spring mvc 注解
<context:annotation-config></context:annotation-config>
2,启动的时候,你要到这个包下面去扫描所有类的注解,将类生成实例放到ioc容器
<context:component-scan base-package="com.controller"></context:component-scan>
3,DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上
配置org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
4,AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上
完成请求和注解POJO的映射
bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
5,对转向页面的路径解析。prefix:前缀, suffix:后缀
bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/jsp/" p:suffix=".jsp" />
6, 设置json 格式,和编码
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"设置返回格式和编
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
C,在程序中的使用
spring mvc的原理与struts的原理是相似的,都是基于mvc架构,都有一个控制页面请求的servlet
处理完后跳转到相应的页面
1,在一个处理请求的类头中要用注解@Controller 标示是控制类,类似struts的action
2,在控制类中要处理请求的方法上面需要写@requestMapping(请求的action)
括号里边可以是xx!xx,(action名!方法名)也可以是/xx(方法名,但要跟jsp的请求想对应)
3,也可以吧@requestMapping(请求的action)写在类体上,然后再该类的方法上写上请求的参数
例如:@RequestMapping(params = "method=2"[ method=RequestMethod.POST])
4,方法中的参数可以用@ModelAttribute 参数类型,参数
也可以是直接写上参数,但字段要跟jsp的请求字段保持一致
D,httpServletRequest 的获取
1,直接在方法上当做参数写入,就可以获取,httpServletResponse也是一样的
2,RequestAttributes ra = RequestContextHolder.getRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)ra).getRequest();
response获取就比较麻烦了。。好像得些方法
E,spring mvc常用的注解有:
@Controller:用于标识是处理器类;
@RequestMapping:请求到处理器功能方法的映射规则;
@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute:请求参数到命令对象的绑定;
@SessionAttributes:用于声明session级别存储的属性,放置在处理器类上,通常列出模型属性
(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session中;
@InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;
@CookieValue:cookie数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader:请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody:请求的body体的绑定(通过HttpMessageConverter进行类型转换);
@ResponseBody:处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换);
@ResponseStatus:定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler:注解式声明异常处理器;
@PathVariable:请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful
架构风格的URI;
F:spring mvc 处理请求的的流程
a,首先用户发送请求web容器,web容器根据URL路径映射到DispatcherServlet(url-pattern为/)进行处理;
b,DispatcherServlet——>BeanNameUrlHandlerMapping进行请求到处理的映射,
BeanNameUrlHandlerMapping将url路径直接映射到名字为url的Bean进行处理,
即HelloWorldController,BeanNameUrlHandlerMapping将其包装为HandlerExecutionChain
(只包括HelloWorldController处理器,没有拦截器);
c,DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter
将HandlerExecutionChain中的处理器(HelloWorldController)
适配为SimpleControllerHandlerAdapter;
d,SimpleControllerHandlerAdapter——> HelloWorldController处理器功能处理方法的调用,
SimpleControllerHandlerAdapter将会调用处理器的handleRequest方法进行功能处理,
该处理方法返回一个ModelAndView给DispatcherServlet;
e,hello(ModelAndView的逻辑视图名)——>InternalResourceViewResolver,
InternalResourceViewResolver使用JstlView,具体视图页面在/WEB-INF/jsp/hello.jsp;
f,JstlView(/WEB-INF/jsp/hello.jsp)——>渲染,将在处理器传入的模型数据(message=HelloWorld!)
在视图中展示出来;
h,返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
四,spring mvc 用于做什么
五,struts2 和 spring mvc的区别:
1,spring mvc的核心控制器是dispatchServlet,是依赖于servlet api的,而
struts2 的核心控制器是fileDispatch或者是StrutsPrepareAndExecuteFilter(struts2 2.1.3之后),
是不依赖于servlet api
2,spring mvc是基于方法的设计,而sturts是基于类。也就是说:spring3 mvc是方法级别的拦截,
拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,
一个方法对应一个request上下文。
而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法
把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;
struts2中,一个Action对象对应一个request上下文。
3,struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式
六,spring mvc的拦截器
spring mvc 它的主要作用是拦截用户的请求并进行相应的处理
定义Interceptor实现类
1,实现HandlerInterceptor接口

2,实现WebRequestInterceptor 接口
preHandle(): 在请求处理之前执行,该方法主要是用于准备资源数据的,
然后可以把它们当做请求属性放到WebRequest中。
在WebRequest 的父层接口RequestAttributes 中对它定义了三个常量:
SCOPE_REQUEST :它的值是0 ,代表只有在request 中可以访问。
SCOPE_SESSION :它的值是1 ,如果环境允许的话它代表的是一个局部的隔离的session,
否则就代表普通的session,并且在该session范围内可以访问。
SCOPE_GLOBAL_SESSION :它的值是2 ,如果环境允许的话,它代表的是一个全局共享的session,
否则就代表普通的session,并且在该session 范围内可以访问。
postHandle():该方法将在Controller执行之后,返回视图之前执行,ModelMap表示请求
Controller处理之后返回的Model对象,所以可以在这个方法中修改ModelMap的属性,
从而达到改变返回的模型的效果。
afterCompletion():该方法将在整个请求完成之后,也就是说在视图渲染之后进行调用,
主要用于进行一些资源的释放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值