spring mvc HelloWorld
spring mvc前端控制器是DispatcherServlet, 应用控制器分为处理器映射器(Handler Mapping)和视图解析器(View Resolver),页面控制器为Controller接口的实现。
- 用户发送请求,到达前端控制器,前端控制器根据请求信息决定选择哪一个页面控制器进行处理,并把请求委托给它
- 页面控制器接收到请求后,首先收集和绑定请求参数到一个对象,并进行验证,然后将对象委托给业务对象进行处理,处理完毕后返回ModelAndView
- 前端控制器收回控制权,根据返回的视图名,选择相应的视图进行渲染,并把模型数据传入
- 前端控制器再次收回控制权,将相应返回给用户
前置控制器
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/forms/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
web.xml定义了一个前端控制器,起名叫mvc-dispatcher,load-on-startup表示启动容器时初始化该Servlet,url-pattern表示有哪些请求要交给spring web mvc处理。在这里就是所有以/form/开头的请求会被mvc-dispatcher这个前端控制器处理。
mvc默认前端控制器加载WEB-INF/[dispatcherServletName]-servlet.xml配置文件。
视图解析器
mvc-dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.libin.controller"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
component-scan 对类包进行扫描以实施注释驱动bean定义的功能。
ViewResolver是进行视图解析的,prefix是视图页面的前缀,suffix是视图页面的后缀,在这里也就是说,任何请求x的视图页面放在/WEB-INF/views/x.jsp。
页面控制器
package com.libin.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class HelloWorldController { @RequestMapping("/helloworld") public ModelAndView helloWorld(){ String message="Hello world,Spring MVC 3!"; return new ModelAndView("helloworld","message",message); } }
@Controller注释是说这个类的角色是一个控制器,@RequestMapping注释是说将请求/helloworld映射到下面这个方法。它也可以指明采用的HTTP的方法还有参数,比如 @RequestMapping(value="/new", method = RequestMethod.GET)
接下来是页面部分
首先是最开始的页面index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring MVC Example</title> </head> <body> <h1>Spring MVC</h1> <ul> <li><a href="forms/helloworld.html">Hello World</a></li> </ul> </body> </html>
很简单,在开始页面里,点击Hello World链接到了forms/helloworld.html,因此向浏览器请求forms/helloworld.html。
首先经过前置控制器DispatcherController的过滤,发现正好符合mvc-dispatcher的要求,因此交给mvc-dispatcher处理。
它加载自己对应的配置文件,也就是mvc-dispatcher-serlvet.xml,得到两点,一是页面控制器在base-package下面,另一点是真正的页面文件的路径是/WEB-INF/views/helloworld.jsp。
经过页面控制器helloWorldController,将一个字符串message传递给页面。整个过程就是这样。
最后是helloworld.jsp,把参数message打出来:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring MVC HelloWorld</title> </head> <body> ${message} </body> </html>
参考资料: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html
附件下载:HelloWorldSpringMVC