第一次发帖,谨作为以后的回顾以及参考,有问题的地方,希望高手指正!
1.Spring MVC工作原理
①当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息(比如说请求的URL信息,用户名,密码什么的)。
②请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将
用户的请求委托给其他的组件(这里是交给Spring MVC的控制器)去处理。这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Handler Mapping)了。处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么DispatcherServlet就将请求交给ControllerA进行处理。
③当选择了一个合适的控制器后,DispatcherServlet就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻辑交给一个或多个服务器对象(Model)去处理。
④当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模型、视图名称以及request请
求一起发送给DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给DispatcherServlet的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是JSP或其他什么名称),它只要是一个可以产生输出和展示结果的逻辑名称就可以了。
⑤DispatcherServlet会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。
⑥现在DispatcherServlet知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过response对象返回给客户端进行显示。
2.Spring MVC的一个简单实现(视图是通过Velocity模板进行显示)
①配置DispatcherServlet(必须在web应用的l里面进行配置):
[html] view plaincopyprint?
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app version="2.5" xmlns="java.sun/xml/ns/javaee"
3. xmlns:xsi="/2001/XMLSchema-instance"
4. xsi:schemaLocation="java.sun/xml/ns/javaee
5. java.sun/xml/ns/javaee/web-app_2_5.xsd">
6. <servlet>
7. <servlet-name>dispatcherServlet</servlet-name>
8. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
9.
10. <init-param>
11. <param-name>contextConfigLocation</param-name>
12. <param-value>l</param-value>
13. </init-param>
14. <load-on-startup>1</load-on-startup>
15. </servlet>
16.
17. <servlet-mapping>
18. <servlet-name>dispatcherServlet</servlet-name>
19. <url-pattern>*.html</url-pattern>
20. </servlet-mapping>
21. </web-app>
②配置l:
[html] view plaincopyprint?
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="/schema/beans"
3. xmlns:xsi="/2001/XMLSchema-instance" xmlns:context="/schema/context"
4. xsi:schemaLocation="/schema/beans
5. /schema/beans/spring-beans-3.0.xsd
6. /schema/context
7. /schema/context/spring-context-3.0.xsd">
8.
9. <context:component-scan base-package=springmvc常用标签"com.spring.mvc"></context:component-scan>
10.
11. <bean id="handlerMapping"
12. class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
13.
14.
15. <bean id="handlerAdapter"
16. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>
17.
18.
19. <!-- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
20. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView">
21. </property> <property name="suffix" value=".jsp"></property> </bean> -->
22.
23. <bean id="velocityConfigurer"
24. class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
25. <property name="resourceLoaderPath" value="/"></property>
26. </bean>
27. <bean id="viewResolver"
28. class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
29. <property name="suffix" value=".vm"></property>
30. </bean>
31. </beans>
③控制器HelloController.java:
[java] view plaincopyprint?
1. package com.spring.mvc;
2.
3. import javax.servlet.http.HttpServletRequest;
4.
5. import org.springframework.stereotype.Controller;
6. import org.springframework.ui.ModelMap;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论