spring web mvc 感觉就是高大上啊!啥都是配置文件就能够了。所以第一步就是弄清楚配置文件使用和总体框架的流程!
Spring web mvc 最重要的当然是 Controller, 也就是首先要明确的就是 Dispatch, 它将用户的请求转化成 Controller 处理的对象。在
在 Spring 的 Web MVC 中,担任前段控制器角色的是 org.springframework.web.servlet.DispatcherServlet.DispatcherServlet 负责将客户的请求分配给控制对象。所以使用 Spring Web MVC 的第一步就是在 Web.xml 中定义 DispatcherServlet.
- <span style="font-family:Courier New;font-size:14px;">
- <servlet>
- <servlet-name>
- dispatcherServlet
- </servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <init-param>
- <param-name>
- contextConfigLocation
- </param-name>
- <param-value>
- /WEB-INF/mvc-config.xml
- </param-value>
- </init-param>
- <load-on-startup>
- 1
- </load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>
- dispatcherServlet
- </servlet-name>
- <url-pattern>
- *.do
- </url-pattern>
- </servlet-mapping>
- </span>
DispatcherServlet 实例是 dispatcherServlet。从 url-pattern 能够知道它拦截. do 的随意请求。"contextConfigLocation" 初始參数用来设定 Bean 定义文件的位置与名称。假设不设置 "contextConfigLocation" 初始參数,则 DispatcherServlet 默认会使用 Servlet 的名称为前置,读取 "Servlet 名称 - servlet.xml" 作为其 Bean 定义文件。在上面的设定中则会读取 mvc-config.xml 当然你也能够定义多个 Bean 定义文件的来源.
DispatcherServlet 负责分配请求至控制对象(Controller),在 Spring Web MVC 中,控制对象要实现 org.springframework.web.servlet.mvc.Controller 接口,Controller 接口有一个不许实现的 handleRequest()
- <span style="font-family:Courier New;">
- <servlet>
- <servlet-name>
- dispatcherServlet
- </servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <init-param>
- <param-name>
- contextConfigLocation
- </param-name>
- <param-value>
- /WEB-INF/mvc-config.xml,/WEB-INF/other-servlet.xml
- </param-value>
- </init-param>
- <load-on-startup>
- 1
- </load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>
- dispatcherServlet
- </servlet-name>
- <url-pattern>
- *.do
- </url-pattern>
- </servlet-mapping>
- </span>
- <span style="font-family:Courier New;font-size:14px;">public interface Controller {
- ModelAndView handleRequest(HttpServletRequest request,
- HttpServletResponse response) throws Exception;
- }</span>
当 Controller 接收到 DispatcherServlet 分配的请求时,会运行 handleRequest() 方法来处理请求,处理完毕后回传一个 org.springframework.web.servlet.ModelAndView 的实例. ModelAndView 包含了要呈如今 View 层的 Model 数据,以及其它 View 层的相关信息。
- <span style="font-family:Courier New;font-size:14px;">public class HellowController implements Controller {
- private String viewPage。
- public void setViewPage(String viewPage) {
- this.viewPage = viewPage;
- }
- public ModelAndView handleRequest(HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- String user = request.getparameter("user");
- retrun new ModelAndView(viewPage, "user", user);
- }
- }</span>
在这个 Controller 中。取得来自使用者的 user 请求參数。并设定在 ModelAndView 的实例中,在这个样例中,高见 ModelAndView 的第一个自变量为要呈现的目标网页(或资源)路径,第二个自变量是设定用来取得 Model 对象的键(key),而第三个自变量是个 View 层呈现数据的 Model 对象我们能够在 xml 文件设定 Controller 请求处理完成之后,所要呈现数据的网页路径,来看一下 Bean 定义文件的内容,根据 web.xml 中对 dispatcherServlet 的初始參数设定为 mvc-config.xml,假设没有初始參数的话,默认会调用 dispatcherServlet-servlet.xml 文件
- <span style="font-family:Microsoft YaHei;font-size:14px;">
- </span>
- <span style="font-family:Courier New;font-size:14px;">
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- <bean name="/hello.do" class="包路径.HellowController">
- <property name="viewPage">
- <value>
- hello
- </vlaue>
- </property>
- </bean>
- </span>
实际上 DispatcherServlet 必须依据一个 HandlerMapping 对象,决定请求由哪一个 Controller 来处理,DispatcherServlet 默认使用 org.springframework.web.servlet.handler.BeanNameUrlHandlerMappin,也就是依据 Bean 在定义时的 "name" 属性及使用者请求的 URL,决定使用哪一个 Controller 实例,比如上面的样例。请求 /.../hello.do 时,DispatcherServlet 依据 "hello.do",决定要使用 "name" 为 "hello.do" 的 Bean 实例。所以依据上面的设定。就会将请求交给 HelloController 的实例来处理。
在 Controller 返回 ModelAndView 后,DispatcherServlet 会交由 ViewResolver 对象来作 View 层的相关解析。因而你须要设置一个 ViewResolver 实例,在这个样例中将一 jsp 作为 View 层技术,所以使用 org.springframework.web.servlet.view.InternalResourceViewResolve。 InternalResourceViewResolver 须要设置 "viewClass",默认是 org.springframework.web.servlet.InternalResourceView,这个类支持 Servlet 技术的相关资源。InternalResourceViewResolver 的 "prefix" 和 "suffix" 属性会与 ModelAndView 返回的路径信息借个。比如路径信息返回为 "hello" 字符串,则与以上的样例设定结合。实际路径就是 / WEB-INF/jsp/hello.jsp。
来源: http://www.bubuko.com/infodetail-2129204.html