1、1. 2. web-app version=2.5 xmlns=3. xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance4. xsi:schemaLocation=5. 6. 7. spring8. servlet-classorg.springframework.web.servlet.DispatcherServlet9. load-on-startup110. /servlet11. servlet-mapping12. 13. url-pattern*.do14. /servlet-mapping15. 16. 17. !- 所有请求都
2、要由DispatcherServlet来处理,因此映射到/上面(包括静态页面), 不加经测试也未见出错,而且如果要修改spring-servlet.xml的配置位置或名字,18. 可以加 param-namecontextConfigLocationparam-value/WEB-INF/spring-servlet.xml19. /init-param 但一定要放到前面,否则xml校验出错(经测试)。20. 21. 简要说明:DispatcherServlet就是一个Servlet,也是对请求进行转发的核心Servlet。在这里即所22. 有.do 的请求将首先被DispatcherServ
3、let处理,而DispatcherServlet它要作的工作就是对请求进行分23. 发(也即是说把请求转发给具体的Controller)。可以简单地认为,它就是一个总控处理器,但事实上24. 它除了具备总控处理理器对请求进行分发的能力外,还与spring的IOC 容器完全集成在一起,从而可以25. 更好地使用spring的其它功能。在这里还需留意复制代码步骤三、建立spring-servlet.xml文件,它的命名规则:servlet-name-servlet.xml。它的主要代码如下:2. 3. 16. prop key=/hello.dohelloControl- 说明:hello.do的
4、请求将给名为helloControl的bean进行处理。 -17. /props/property/beanhelloControlcontroller.HelloWord21. 22. 步骤四、完成HelloWord.java的编写,代码如下:1. package controller;3. import javax.servlet.http.HttpServletRequest;4. import javax.servlet.http.HttpServletResponse;5. 6. import org.springframework.web.servlet.ModelAndView;
5、7. import org.springframework.web.servlet.mvc.Controller;8. 9. public class HelloWord implements Controller public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)throws Exception ModelAndView mav = new ModelAndView(hello.jsp);mav.addObject(message, Hello World!re
6、turn mav;17. /*18. * 说明:ModelAndView对象是包含视图和业务数据的混合对象,即是说通过此对象,我们可以知道所19. 返回的相应页面(比如这里返回hello.jsp页面),也可以在相应的页面中获取此对象所包含的业务数据20. (比如这里message-hello worrld)。*/21. 步骤五、在当前项目web根目录下编写hello.jsp,主要代码如下:% page language=java import=java.util.* pageEncoding=%3. String path = request.getContextPath();4. Strin
7、g basePath = request.getScheme()+:/+request.getServerName()+request.getServerPort()+path+;5. %6. 7. DOCTYPE HTML PUBLIC -/W3C/DTD HTML 4.01 Transitional/EN8. headbase href=%=basePath%titleMy JSP hello.jsp starting pagemeta http-equiv=pragma content=no-cachecache-controlexpires0keywordskeyword1,keywo
8、rd2,keyword3descriptionThis is my page-link rel=stylesheet type=text/css href=styles.css23. /head24. 25. body26. 获取值:$message/body28. 29. 步骤六:输入./hello.do 进行测试。如http:/localhost/springmvc/hello.do运行的结果是:获取值:4.简析spring mvc工作原理(1)启动服务器,根据web.xml的配置加载前端控制器(也称总控制器)DispatcherServlet。在加载时、会完成一系列的初始化动作。(2)根
9、据servlet的映射请求(上面的helloWorld实例中针对.do 请求),并参照“控制器配置文件”(即spring-servlet.xml这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld控制器进行处理)(3)后端控制器调用相应的逻辑层代码,完成处理并返回视图对象(ModelAndView)给前端处理器。(4)前端控制器根据后端控制器返回的ModelAndView对象,并结合一些配置(后面有说明),返回一个相应的页面给客户端。小结:这种Front Controller模式常应用在主流的web框架中,比如典型的struts1.x框架.Fron
10、tController模式:所有请求先交给一个前端处理器(总控处理器)处理,然后前端处理器会参照一些配置文件再把具体的请求交给相应的后端处理器。后端处理器调用逻辑层代码,并根据逻辑返回相应的视图对象给前端控制器。然后前端控制器再根据视图对象返回具体的页面给客户端(提示:和spring mvc一样,在struts1.x中前端控制器是Servlet,而在struts2中前端控制器是Filter)。概述Front前端控制器预处理并分发请求给后端控制器,后端控制器进行真正的逻辑处理并返回视图对象,前端控器器根据视图对象返回具体页面给客户端。5.初识spring mvc的视图在前面的HelloWorld
11、实例中,在HelloWorld.java中返回ModelAndView mav =newModelAndView() 参数为hello.jsp,它会对应于当前项目根目录下的hello.jsp页面。但spring mvc为我们提供了一个特别的视图定位方式,下面改进前面的HelloWord实例:改进一:在spring-servlet.xml中增加如下代码:viewResolverorg.springframework.web.servlet.view.InternalResourceViewResolverprefix value=/WEB-INF/page/ /suffix.jsp4. 改进二:
12、在HelloWorld.java重新定义返回的ModelAndView对象,即把ModelAndView mav =newModelAndView() 改为ModelAndView mav =newModelAndView(hello)改进三:在/WEB-INF/page目录下建立hello.jsp页面进行上面三个改进操作后,重新访问hello.do会访问到WEB-INF/page/hello.jsp页面。简析视图定位:当返回ModelAndView对象名称为hello时,会给hello加上前后缀变成/WEB-INF/page/hello.jsp。因此在给前后缀赋值时,应特别注意它和返回的Mo
13、delAndView对象能否组成一个正确的文件全路径。在前面的“简析spring mvc工作原理(4)”点中提到在根据ModelAndView对象返回页面时,会结合一些配置。这里就是结合了视图定位方式,给viewName加上前后缀进行定位spring mvc学习教程(二)-后端控制器(上)1.概述SpringMVC后端控制器为了方便开发人员快捷地建立适合特定应用的后端控制器,springMVC实现Controller接口,自定义了许多特定控制器。这些控制器的层次关系如下:-AbstractController-AbstractUrlViewController-UrlFilenameViewC
14、ontroller-BaseCommandController-AbstractCommandController-AbstractFormController-AbstractWizardFormController-SimpleFormController-CancellableFormController-MultiActionController-ParameterizableViewController-ServletForwardingController-ServletWrappingController下面重点分析两个特色控制器:2.SimpleFormController控制
15、器在正式开发前,请先熟悉上前面的HelloWord实例。在保证熟悉前一个实例后,我们建立名为springMVC_02_controllerweb项目,并导入相关的jar包。步骤一:建立后端控制器RegControl.java代码如下:6. import org.springframework.validation.BindException;7. import org.springframework.web.servlet.ModelAndView;8. import org.springframework.web.servlet.mvc.SimpleFormController;9. 10.
16、 public class RegControl extends SimpleFormController SuppressWarnings(deprecation) public RegControl() setCommandClass(User.class); protected ModelAndView processFormSubmission(HttpServletRequest arg0, HttpServletResponse arg1,Object formbean, BindException arg3) throws Exception User user = (User)
17、 formbean;user, user);22. protected ModelAndView showForm(HttpServletRequest arg0, HttpServletResponse arg1, BindException arg2)throws Exception return null;28. 29. User.java,代码如下:3. public class User private String username; private int age; public String getUsername() return username; public void setUsername(String username) this.username = username; public int getAge() return age; public void setAge(int age) this.age = age;19. 如果熟悉struts1.x相信很容易理解Object formbean参
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1