spring mvc原理

上传人:第*** 文档编号:32697472 上传时间:2018-02-12 格式:DOCX 页数:5 大小:80.36KB
返回 下载 相关 举报
spring mvc原理_第1页
第1页 / 共5页
spring mvc原理_第2页
第2页 / 共5页
spring mvc原理_第3页
第3页 / 共5页
spring mvc原理_第4页
第4页 / 共5页
spring mvc原理_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《spring mvc原理》由会员分享,可在线阅读,更多相关《spring mvc原理(5页珍藏版)》请在金锄头文库上搜索。

1、第一次发帖,谨作为以后的回顾以及参考,有问题的地方,希望高手指正!1.Spring MVC 工作原理当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息(比如说请求的 URL 信息,用户名,密码什么的)。请求的第一站到达的是 Spring 的 DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给 Spring MVC 的控制器)去处理。这里 DispatcherServlet 要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Han

2、dler Mapping)了。处理器映射会看请求的 URL 信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器 ControllerA 和 ControllerB,分别处理后缀名为.html 和.jsp 送来的请求,那么当请求者的后缀名为.html 时,那么 DispatcherServlet 就将请求交给 ControllerA 进行处理。当选择了一个合适的控制器后,DispatcherServlet 就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻

3、辑交给一个或多个服务器对象(Model)去处理。当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模型、视图名称以及 request 请求一起发送给 DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给 DispatcherServlet 的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是 JSP 或其他什么名称),它只要是一个可

4、以产生输出和展示结果的逻辑名称就可以了。 DispatcherServlet 会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。现在 DispatcherServlet 知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过 response 对象返回给客户端进行显示。2.Spring MVC 的一个简单实现(视图是通过 Velocity 模板进行显示)配置 DispatcherServlet(必须在 web 应用的 web.xml 里面进行配置):html view plaincopyprint?1.

5、 2. 6. 7. dispatcherServlet 8. org.springframework.web.servlet.DispatcherServlet 9. 10. 11. contextConfigLocation 12. classpath:applicationContext.xml 13. 14. 1 15. 16. 17. 18. dispatcherServlet 19. *.html 20. 21. 配置 applicationContext.xml:html view plaincopyprint?1. 2. 8. 9. 10. 11. 13. 14. 15. 17.

6、 18. 19. 20. 21. 22. 23. 25. 26. 27. 29. 30. 31. ?xml version=1.0 encoding=Ubeans xmlns=http:/www.springxmlns:xsi=http:/www.wxsi:schemaLocation=htthttp:/www.springframework. http:/www.springframework.控制器 HelloController.java:java view plaincopyprint?1. package com.spring.mvc; 2. 3. import javax.serv

7、let.http.HttpServletRequest; 4. 5. import org.springframework.stereotype.Controller; 6. import org.springframework.ui.ModelMap; 7. import org.springframework.web.bind.annotation.RequestMapping; 8. import org.springframework.web.servlet.ModelAndView; 9. /使用注解Controller 声明该类是一个控制器 10. Controller 11. p

8、ublic class HelloController 12. 13. /使用注解RequestMapping 声明这个控制器处理 index.html 的请求 14. RequestMapping( index.html ) 15. public ModelAndView helloAnotherWorld( final HttpServletRequest request ) 16. 17. System.out.println( request.getRequestURI() ); / 输出/springMVC/index.html 18. final ModelMap model =

9、new ModelMap(); 19. /增加一个 key-value 键值对,相当于 request.setAttribute(name,SpringMVC); 20. model.addAttribute( name, SpringMVC ); 21. /将 model 的数据交给文件名为 helloSpringMVC,后缀名为 vm(在 applicationContext.xml里面设置)的文件显示 22. final ModelAndView mav = new ModelAndView( helloSpringMVC, model ); 23. return mav; 24. 25

10、. package com.spring.mvc;import javax.servlet.http.HttpSimport org.springframework.sterimport org.springframework.ui.M视图 helloSpring.vm:plain view plaincopyprint?1. #set($myName=Hello) 2. $myName 3. $name #set($myName=Hello)$myName$name在浏览器地址栏里面输入:http:/localhost:8080/springMVC/index.html ,最后显示结果:He

11、llo SpringMVC。最后看一下全部过程,在浏览器地址栏里面输入:http:/localhost:8080/springMVC/index.html,拦截器发现请求的 URL 后缀名是 html 的,那么进行拦截,又通过 Handle Mapping 发现 index.html 与控制器 HelloController 所处理的文件一致,然后交给 HelloController 去处理,该控制器处理完请求后将生成的模板数据交给指定的文件helloSpring.vm 去处理并显示(这里有 Velocity 视图解析器的作用),最后显示结果:Hello SpringMVC。而显示结果时地址栏里面的内容仍然是 http:/localhost:8080/springMVC/index.html,这样就隐藏了真正处理结果的页面以及使用的模板技术。这样,一个简单的例子就实现了,这里用的是 Spring3.0 以及相关依赖包,这其中要注意包的导入,如果缺少了相关的包,那么会报编译或者运行错误。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号