SpringMVC个人总结1
来源:互联网 发布:阿拉伯菜 知乎 编辑:程序博客网 时间:2024/05/21 13:23
SpringMVC:
概念:
Spring框架中的一个模块,属于MVC框架
springMVC原理:
前端控制器 :
org.springframework.web.servlet.DispatcherServlet
处理器映射 :HandlerMapping
1、org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
2、org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping
以上两个基于xml文件配置
3、org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
基于注解配置
处理适配器 :HandlerAdapter
1. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现Controller接口
2. org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.class
要求编写的Handler实现HttpRequestHandler接口
3. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
基于注解的配置
<mvc:annotation-driven />等于实例化 注解的映射器和适配器
视图解析器 :ViewResolver
org.springframework.web.servlet.view.InternalResourceViewResolver
一般使用此解析器,支持JSTL
利用SpringMVC的开发步骤:
1、导入jar包
2、springMVC的Servlet的配置 (前端控制器)
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
如果这样配置servlet,spring默认读取WEB-INF/[servletName]-servlet.xml
如果修改配置 文件的名称和路径:需要配置一个初始化参数
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servletMVC.xml</param-value>
</init-param>
3、spring配置文件
<!-- 配置spring容器扫描注解 -->
<context:component-scan base-package="com.geminno.springmvc" />
<!-- 默认的注解映射的支持 等同于配配置了两个bean,一个是映射处理器,适配器 -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
4、编写处理器(就是struts2中的action,在spring中一般叫controller)
http://localhost:8888/SpringMVCDemo/user/userName.form
参数的传递:
1、自动匹配参数
2、自动装箱
3、日期处理:
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),
true));
}
4、特定参数的参数的处理
@requestParam
@PathVariable //按照占位符
5、转发和重定向
a、转发到一个jsp :return "string";
b、转发到action :return "forward:url" 注:加后缀 //forward:/user/showUser.form
c、重定向到一个JSP:return "redirect:/jsp/list.jsp";
存放到Model中的数据,会自动加到url地址栏中传递
d、重定向到action:return "redirect:/user/userList.form";
6、ajax请求:
7、springMVC操作Servlet的API
Spring拦截器:
两种方式:
1、实现 HandlerInterceptor 接口 抽象类:HandlerInterceptorAdapter
preHandle() :该方法将在请求处理之前进行调用,一般进行初始化操作
返回false时,后续的拦截器和controller不会执行
postHandle():在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在 DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对 Controller 处理之后ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用 ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的afterCompletion():该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在 DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。
2、实现 WebRequestInterceptor 类:WebRequestInterceptor
WebRequest :Spring 定义的一个接口,它里面的方法定义都基本跟HttpServletRequest 一样,在 WebRequestInterceptor 中对WebRequest 进行的所有操作都将同步到 HttpServletRequest 中,然后在当前请求中一直传递preHandle():该方法将在请求处理之前进行调用,也就是说会在Controller 方法调用之前被调用。这个方法跟HandlerInterceptor 中的preHandle 是不同的,主要区别在于该方法的返回值是void ,也就是没有返回值,所以我们一般主要用它来进行资源的准备工作,比如我们在使用Hibernate 的时候可以在这个方法中准备一个Hibernate 的Session 对象,然后利用WebRequest 的setAttribute(name, value, scope) 把它放到WebRequest 的属性中。这里可以说说这个setAttribute 方法的第三个参数scope ,该参数是一个Integer 类型的。在WebRequest 的父层接口RequestAttributes 中对它定义了三个常量:
SCOPE_REQUEST :它的值是0 ,代表只有在request 中可以访问。
SCOPE_SESSION :它的值是1 ,如果环境允许的话它代表的是一个局部的隔离的session,否则就代表普通的session,并且在该session范围内可以访问。
SCOPE_GLOBAL_SESSION :它的值是2 ,如果环境允许的话,它代表的是一个全局共享的session,否则就代表普通的session,并且在该session 范围内可以访问
postHandle():该方法将在请求处理之后,也就是在Controller 方法调用之后被调用,但是会在视图返回被渲染之前被调用,所以可以在这个方法里面通过改变数据模型ModelMap 来改变数据的展示。该方法有两个参数,WebRequest 对象是用于传递整个请求数据的,比如在preHandle 中准备的数据都可以通过WebRequest 来传递和访问;ModelMap 就是Controller 处理之后返回的Model 对象,我们可以通过改变它的属性来改变返回的Model模型afterCompletion():该方法会在整个请求处理完成,也就是在视图返回并被渲染之后执行。所以在该方法中可以进行资源的释放操作。而WebRequest 参数就可以把我们在preHandle 中准备的资源传递到这里进行释放。Exception 参数表示的是当前请求的异常对象,如果在Controller 中抛出的异常已经被Spring 的异常处理器给处理了的话,那么这个异常对象就是null
概念:
Spring框架中的一个模块,属于MVC框架
springMVC原理:
前端控制器 :
org.springframework.web.servlet.DispatcherServlet
处理器映射 :HandlerMapping
1、org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
2、org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping
以上两个基于xml文件配置
3、org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
基于注解配置
处理适配器 :HandlerAdapter
1. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现Controller接口
2. org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.class
要求编写的Handler实现HttpRequestHandler接口
3. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
基于注解的配置
<mvc:annotation-driven />等于实例化 注解的映射器和适配器
视图解析器 :ViewResolver
org.springframework.web.servlet.view.InternalResourceViewResolver
一般使用此解析器,支持JSTL
利用SpringMVC的开发步骤:
1、导入jar包
2、springMVC的Servlet的配置 (前端控制器)
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
如果这样配置servlet,spring默认读取WEB-INF/[servletName]-servlet.xml
如果修改配置 文件的名称和路径:需要配置一个初始化参数
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servletMVC.xml</param-value>
</init-param>
3、spring配置文件
<!-- 配置spring容器扫描注解 -->
<context:component-scan base-package="com.geminno.springmvc" />
<!-- 默认的注解映射的支持 等同于配配置了两个bean,一个是映射处理器,适配器 -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
4、编写处理器(就是struts2中的action,在spring中一般叫controller)
http://localhost:8888/SpringMVCDemo/user/userName.form
参数的传递:
1、自动匹配参数
2、自动装箱
3、日期处理:
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),
true));
}
4、特定参数的参数的处理
@requestParam
@PathVariable //按照占位符
5、转发和重定向
a、转发到一个jsp :return "string";
b、转发到action :return "forward:url" 注:加后缀 //forward:/user/showUser.form
c、重定向到一个JSP:return "redirect:/jsp/list.jsp";
存放到Model中的数据,会自动加到url地址栏中传递
d、重定向到action:return "redirect:/user/userList.form";
6、ajax请求:
7、springMVC操作Servlet的API
Spring拦截器:
两种方式:
1、实现 HandlerInterceptor 接口 抽象类:HandlerInterceptorAdapter
preHandle() :该方法将在请求处理之前进行调用,一般进行初始化操作
返回false时,后续的拦截器和controller不会执行
postHandle():在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在 DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对 Controller 处理之后ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用 ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的afterCompletion():该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在 DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。
2、实现 WebRequestInterceptor 类:WebRequestInterceptor
WebRequest :Spring 定义的一个接口,它里面的方法定义都基本跟HttpServletRequest 一样,在 WebRequestInterceptor 中对WebRequest 进行的所有操作都将同步到 HttpServletRequest 中,然后在当前请求中一直传递preHandle():该方法将在请求处理之前进行调用,也就是说会在Controller 方法调用之前被调用。这个方法跟HandlerInterceptor 中的preHandle 是不同的,主要区别在于该方法的返回值是void ,也就是没有返回值,所以我们一般主要用它来进行资源的准备工作,比如我们在使用Hibernate 的时候可以在这个方法中准备一个Hibernate 的Session 对象,然后利用WebRequest 的setAttribute(name, value, scope) 把它放到WebRequest 的属性中。这里可以说说这个setAttribute 方法的第三个参数scope ,该参数是一个Integer 类型的。在WebRequest 的父层接口RequestAttributes 中对它定义了三个常量:
SCOPE_REQUEST :它的值是0 ,代表只有在request 中可以访问。
SCOPE_SESSION :它的值是1 ,如果环境允许的话它代表的是一个局部的隔离的session,否则就代表普通的session,并且在该session范围内可以访问。
SCOPE_GLOBAL_SESSION :它的值是2 ,如果环境允许的话,它代表的是一个全局共享的session,否则就代表普通的session,并且在该session 范围内可以访问
postHandle():该方法将在请求处理之后,也就是在Controller 方法调用之后被调用,但是会在视图返回被渲染之前被调用,所以可以在这个方法里面通过改变数据模型ModelMap 来改变数据的展示。该方法有两个参数,WebRequest 对象是用于传递整个请求数据的,比如在preHandle 中准备的数据都可以通过WebRequest 来传递和访问;ModelMap 就是Controller 处理之后返回的Model 对象,我们可以通过改变它的属性来改变返回的Model模型afterCompletion():该方法会在整个请求处理完成,也就是在视图返回并被渲染之后执行。所以在该方法中可以进行资源的释放操作。而WebRequest 参数就可以把我们在preHandle 中准备的资源传递到这里进行释放。Exception 参数表示的是当前请求的异常对象,如果在Controller 中抛出的异常已经被Spring 的异常处理器给处理了的话,那么这个异常对象就是null
阅读全文
0 0
- SpringMVC个人总结1
- SpringMVC细节 :个人总结
- SpringMVC-Mybatis 个人总结
- SpringMVC个人零碎总结
- SpringMVC个人总结
- SpringMVC个人零碎总结
- SpringMVC个人零碎总结
- SpringMVC 框架个人总结
- SpringMVC个人零碎总结
- Ehcache整合springmvc 个人总结
- SpringMVC个人笔记1
- SSM(Spring+SpringMVC+MyBatis)开发框架的搭建个人总结
- 个人总结1
- 2016.2.1个人总结
- 个人总结1
- 个人总结1
- 个人总结(1)
- hibernate个人总结1
- 849852十里桃花招商主管:别告诉我你懂SEO
- 从Excel生成sql语句
- php导出excel报表类
- Spring Boot 启动加载数据 CommandLineRunner
- 笨办法学linux階段小结
- SpringMVC个人总结1
- BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系
- Java中堆内存和栈内存详解
- DP学习 经典例题 三角形最佳路径问题(NOI7625)
- Android源码编译开启ccache缓存
- Wireshark安装及抓本地环路包
- js中时间比较
- ubuntu 16.04 配置java环境变量
- Java 五大框架之间的对比