3月13日,晴天。云淡风轻近午天,傍花随柳过前川。
如果无法深入理解框架,机械的按部就班,最终迷失在代码中,这是代码之殇,还是框架之痛...
第一个Spring MVC
1、搭建环境-使用eclipse-jee-indigo-SR1-win32作为开发平台
1)安装两个依赖插件Spring IDE 和Spring Tool Suite-方便使用Spring。
千万不要去Help->Install NewSoftware…,网上一堆一堆的介绍用该方法,用了就知道,害人呀。
而要用Help->Eclipse Marketplace…,又省事又省了查找各种对应版本之苦,而且把该插件所需的别的插件 (AspectJ,Mylyn)也偷偷安上了,省心。只需在Find里面输入Spring IDE,查到后,点击install即可。
同理,往下找,Spring Tool Suite对应的Eclipse版本就看见了,点击install即可。
安装完毕,快捷按钮多出一个Spring的标识-绿色叶子。
2)新建一个Dynamic Web 工程springMVC_hello,如果使用Tomcat 7作为Web服务器,到Web Module配置时。记得方框内打钩,否者不自动生成web.xml。
3) 本例使用spring-framework-2.5.6-with-docs.zip,只需找出spring.jar,spring-webmvc.jar两个jar包,外加一个commons-logging-1.1.1.jar即可。如果你用spring3.0以上版本,省事的做法是将dist目录下所有jar 包导入。
1 )启动Web服务器时,会根据web.xml 的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载时完成一系列的初始化动作。
<?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_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>myOneMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myOneMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
load-on-startup:当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
2 )现在,请求已交给Spring Web MVC框架处理,因此需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件,本示例为WEB-INF/myOneMVC-servlet.xml。根据servlet 的映射请求,并参照“控制器配置文件”(即myOneMVC-servlet.xml 这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比如会分发给WelcomeController 控制器进行处理)。
myOneMVC-servlet.xml的写法是:选中WEB-INF,左键选中,New->Other->Spring,选Spring Bean Configuration File,输入文件名myOneMVC-servlet.xml,弹出如下xsd选项,勾选你需要的即可。插件的好处体现出来了吧。
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean name="/hello.html" class="edu.eurasia.controller.WelcomeController"></bean>
</beans>
说明:hello.html的请求将给名为WelcomeController的bean进行处理。
3)后端控制器调用相应的逻辑层代码,完成处理并返回视图对象(ModelAndView)给前端处理器。
public class WelcomeController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("hello.jsp");
mav.addObject("message", "Hello World!");
return mav;
}
}
ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能处理方法,实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回ModelAndView对象;
ModelAndView:包含了视图要实现的模型数据和逻辑视图名;mv.addObject("message", "Hello World!"); 表示添加模型数据,此处可以是任意POJO对象;new ModelAndView("hello.jsp");表示设置逻辑视图名为“hello.jsp”,视图解析器会将其解析为具体的视图,默认将其解析为“WEB-INF/hello.jsp”。
4)前端控制器根据后端控制器返回的ModelAndView对象,并结合一些配置,返回一个相应的页面给客户端。
创建 /WEB-INF/hello.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>Insert title here</title>
</head>
<body>
${message }
</body>
</html>
5)运行Tomcat 7 ,输入http://localhost:8080/springMVC_hello/hello.html
项目结构图
3、spring mvc 工作原理
(1 )启动服务器,根据web.xml 的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载
时、会完成一系列的初始化动作。
(2 )根据servlet 的映射请求(上面的WelcomeController 实例中针对hello.html 请求),并参照“控制器配置文件”(即myOneMVC-servlet.xml这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比
如上例会分发给WelcomeController控制器进行处理)。
(3 )后端控制器调用相应的逻辑层代码,完成处理并返回视图对象( ModelAndView )给前端处理器。
(4 )前端控制器根据后端控制器返回的 ModelAndView 对象,并结合一些配置,返回一个相应的页面给客户端。