SpringMVC学习笔记.docx
- 文档编号:16991006
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:11
- 大小:528.09KB
SpringMVC学习笔记.docx
《SpringMVC学习笔记.docx》由会员分享,可在线阅读,更多相关《SpringMVC学习笔记.docx(11页珍藏版)》请在冰点文库上搜索。
SpringMVC学习笔记
核心架构的具体流程步骤如下:
1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet——>HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名——>ViewResolver,ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
此处我们只是讲了核心流程,没有考虑拦截器、本地解析、文件上传解析等,后边再细述。
到此,再来看我们前边提出的问题:
1、 请求如何给前端控制器?
这个应该在web.xml中进行部署描述,在HelloWorld中详细讲解。
2、 前端控制器如何根据请求信息选择页面控制器进行功能处理?
我们需要配置HandlerMapping进行映射
3、 如何支持多种页面控制器呢?
配置HandlerAdapter从而支持多种类型的页面控制器
4、 如何页面控制器如何使用业务对象?
可以预料到,肯定利用SpringIoC容器的依赖注入功能
5、 页面控制器如何返回模型数据?
使用ModelAndView返回
6、 前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染?
使用ViewResolver进行解析
7、 不同的视图技术如何使用相应的模型数据?
因为Model是一个Map数据结构,很容易支持其他视图技术
在此我们可以看出具体的核心开发步骤:
1、 DispatcherServlet在web.xml中的部署描述,从而拦截请求到SpringWebMVC
2、 HandlerMapping的配置,从而将请求映射到处理器
3、 HandlerAdapter的配置,从而支持多种类型的处理器
4、 ViewResolver的配置,从而将逻辑视图名解析为具体视图技术
5、处理器(页面控制器)的配置,从而进行功能处理
load-on-startup:
表示启动容器时初始化该Servlet;
url-pattern:
表示哪些请求交给SpringWebMVC处理,“/”是用来定义默认servlet映射的。
也可以如“*.html”表示拦截所有以html为扩展名的请求。
自此请求已交给SpringWebMVC框架处理,因此我们需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。
本示例为WEB-INF/chapter2-servlet.xml。
BeanNameUrlHandlerMapping:
表示将请求的URL和Bean名字映射,如URL为“上下文/hello”,则Spring配置文件必须有一个名字为“/hello”的Bean,上下文默认忽略。
SimpleControllerHandlerAdapter:
表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为SpringWebMVC中的处理器。
如果需要其他类型的处理器可以通过实现HadlerAdapter来解决。
InternalResourceViewResolver:
用于支持Servlet、JSP视图解析;
viewClass:
JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;
prefix和suffix:
查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;
org.springframework.web.servlet.mvc.Controller:
页面控制器/处理器必须实现Controller接口,注意别选错了;后边我们会学习其他的处理器实现方式;
publicModelAndViewhandleRequest(HttpServletRequestreq,HttpServletResponseresp):
功能处理方法,实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回ModelAndView对象;
ModelAndView:
包含了视图要实现的模型数据和逻辑视图名;“mv.addObject("message","HelloWorld!
");
”表示添加模型数据,此处可以是任意POJO对象;“mv.setViewName("hello");”表示设置逻辑视图名为“hello”,视图解析器会将其解析为具体的视图,如前边的视图解析器InternalResourceVi。
wResolver会将其解析为“WEB-INF/jsp/hello.jsp”。
1.
2.
3.
/springMVC.xml
4.
指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。
其中
1、不写,使用默认值:
/WEB-INF/
2、
3、
springMVC-mvc.xml
4、多个值用逗号分隔
Servlet拦截匹配规则可以自已定义,拦截哪种URL合适?
当映射为@RequestMapping("/user/add")时,为例:
1、拦截*.do、*.htm,例如:
/user/add.do
这是最传统的方式,最简单也最实用。
不会导致静态文件(jpg,js,css)被拦截。
2、拦截/,例如:
/user/add
可以实现现在很流行的REST风格。
很多互联网类型的应用很喜欢这种风格的URL。
弊端:
会导致静态文件(jpg,js,css)被拦截后不能正常显示。
想实现REST风格,事情就是麻烦一些。
后面有解决办法还算简单。
3、拦截/*,这是一个错误的方式,请求可以走到Action中,但转到jsp时再次被拦截,不能访问到jsp。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SpringMVC 学习 笔记
![提示](https://static.bingdoc.com/images/bang_tan.gif)