Spring MVC 3 详解
最全最经典spring_mvc教程
spring mvc学习教程(一)-入门实例引言1.MVC:Model-View-Control框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.简要概述springmvcSpring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。
Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。
并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例1. 搭建环境在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用:org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar:spring核心包org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
Spring3MVC搭建全过程
用了大半年的Spring MVC3.0,用着感觉不错。
简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目(没有jar包)。
整个项目架构如下图所示:1、去官网下载3.0.5所有jar包,所需jar包,见附件图片,每个jar包得用处如下:org.springframework.aop- 3.0.0.RELEASE--------------------Spring的面向切面编程,提供AOP(面向切面编程)实现org.springframework.asm- 3.0.0.RELEASE--------------------Spring独立的asm程序,相遇Spring2.5.6的时候需要asmJar 包.3.0开始提供他自己独立的asmJarorg.springframework.aspects- 3.0.0.RELEASE----------------Spring提供对AspectJ框架的整合\org.springframework.beans- 3.0.0.RELEASE------------------SpringIoC(依赖注入)的基础实现org.springframework.context.support- 3.0.0.RELEASE--------Spring-context的扩展支持,用于MVC方面org.springframework.context- 3.0.0.RELEASE----------------Spring提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等org.springframework.core- 3.0.0.RELEASE-------------------Spring3.0的核心工具包org.springframework.expression- 3.0.0.RELEASE-------------Spring表达式语言org.springframework.instrument.tomcat- 3.0.0.RELEASE------Spring3.0对Tomcat的连接池的集成org.springframework.instrument- 3.0.0.RELEASE-------------Spring3.0对服务器的代理接口org.springframework.jdbc- 3.0.0.RELEASE-------------------对JDBC的简单封装org.springframework.jms- 3.0.0.RELEASE--------------------为简化JMS API的使用而作的简单封装org.springframework.orm- 3.0.0.RELEASE--------------------整合第三方的ORM框架,如hibernate,ibatis,jdo,以及spring的JPA实现org.springframework.oxm-3.0.0.RELEASE--------------------Spring 对Object/XMl的映射支持,可以让Java与XML之间来回切换org.springframework.test- 3.0.0.RELEASE--------------------对Junit等测试框架的简单封装org.springframework.transaction- 3.0.0.RELEASE-------------为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理org.springframework.web.portlet- 3.0.0.RELEASE-------------SpringMVC的增强org.springframework.web.servlet- 3.0.0.RELEASE-------------对JEE6.0 Servlet3.0的支持org.springframework.web.struts- 3.0.0.RELEASE--------------整合Struts的时候的支持org.springframework.web- 3.0.0.RELEASE--------------------SpringWeb下的工具包2、借鉴spring官网写法,建立一个src-resources Source Folder,再新建目录META-INF,存放springmvc-servlet.xml和jdbc-context.xml文件(事务和数据库连接池的管理);以及database.properties和log4j.properties。
Spring MVC3注解学习之简单入门范例
Spring MVC3注解学习之简单入门范例文章均为原创,转载请注明出处。
本文地址:/post/430.html之前做Web应用都是在用Struts2,觉得功能强大,效率也能提升很多,所以一直都很喜欢Struts。
虽然也曾经在接手前人遗留的项目时遭遇过Spring MVC,不过不知道是前人用的不好,还是自己水平差,亦或者是Spring MVC(那个时候还是2)本身的问题,让Spring MVC给自己留下了很不好的印象:配置文件繁琐、功能一般甚至简陋、不能够在开发效率上与Struts2媲美等等问题,致使自己一直以来都是带着偏见看待Spring MVC的,也因此一直都没有再去尝试过。
最近是一次偶然的机会,再次正面遭遇Spring MVC,不过这次它改头换面,由2升级到3了,看到别人基于Spring MVC注解方式写出来的简洁流畅的代码后,惊叹于Spring MVC3的注解驱动能力之强大,代码之简洁,觉得自己以前的偏见简直就是愚昧至极,不由地暗自对Spring MVC有了好感,打算实实在在尝试一把。
不过自己之前对Spring MVC确实不熟,加之这次升级的内容有点多,所以我找来了一份很好的入门文档《Spring3_MVC注解教程》作为自己的领路人。
这份PPT做的很好,本文也是在此基础上有感而发的,在此感谢作者陈雄华先生的辛勤劳动和无私奉献!本文所示代码均基于最新版SpringFrameword3.2.3,请知悉。
Spring MVC框架简介∙支持REST风格的URL∙添加更多注解,可完全注解驱动∙引入HTTP输入输出转换器(HttpMessageConverter)∙和数据转换、格式化、验证框架无缝集成∙对静态资源处理提供特殊支持∙更加灵活的控制器方法签名,可完全独立于Servlet API Spring MVC框架结构框架的实现者如何在应用中使用Spring-MVC?1.在应用中添加Spring框架支持;2.在web.xml中配置Spring-MVC的请求转发器(前端控制器)3.编写Spring-MVC的配置文件4.将任意JavaBean通过注解配置成Controller(控制器)并注解其中的方法5.完成步骤简单明了,接下来我们一步一步详细说明:在应用中加入Spring支持:因为Spring-MVC是属于SpringFramework的一部分,因此要在应用中使用Spring-MVC,就必须以引入Spring基础框架为前提,另外还包括beans、context、aop、web组件,将上述组件的jar及其依赖添加到buildpath下,就算完成了为应用添加Spring框架支持的工作,然后在web.xml中配置Spring的监听器,代码如下:另外,因为是在web应用中使用Spring,因此建议配置一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器来处理资源回收的工作:再配置一个编码过滤器在web.xml中配置Spring-MVC的请求转发器(前端控制器)在应用中使用Spring-MVC比较简单,除了需要引入相关依赖库外,还需要在web.xml配置Spring-MVC的请求转发器,代码如下:编写Spring-MVC的配置文件在上述代码中,我们告知Spring-MVC的请求转发器我们的mvc配置在classpath:mvc-config.xml中,因此我们需要在该文件中正确描述我们的mvc配置信息,配置代码如下:将任意JavaBean通过注解配置成Controller(控制器)并注解其中的方法本文主要示范如何使用注解为应用添加Spring-MVC支持,因此本文中的所有MVC映射配置都采用注解方式,范例Controller如下所示:为了是上面的Controller能够正常使用,我们还需要在WebRoot下创建Controller 中使用的逻辑视图对应的视图文件,以上例中create为例,我们在WEB-INF/jsp/目录下新建jsp文件,内容如下:完成上述四个步骤后,将工程部署到任意web容器(本文采用tomcat6.0),然后启动,即可在浏览器中浏览映射出来的地址,如果需要在记录详细的Spring调试信息,则可以通过配置log4j来实现(这里多说一句,Spring的调试信息真的很详细很丰富,通过分析日志,将有助于我们快速理解和掌握Spring-MVC的工作原理)。
Spring3.0 MVC 中文教程
Spring3 MVC - 3到Spring MVC框架简介Spring3 MVC框架简介Spring MVC是Spring的框架的Web组件。
它提供了丰富的功能,为建设强大的Web应用程序。
Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。
此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。
这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。
比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。
喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。
Spring3.0 MVC系列∙第1部分:到Spring 3.0 MVC框架简介∙第2部分:在Spring 3.0 MVC创建Hello World应用程序∙第3部分:在Spring 3.0 MVC的形式处理∙第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程∙第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse∙第6部分:Spring3 MVC示例教程Spring主题∙第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。
Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。
因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。
相反,它往往是最好直接绑定到业务对象。
请求处理生命周期Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。
SpringMVC框架知识点详解
SpringMVC框架知识点详解官⽅的下载⽹址是:⼀、Spring MVC简介1.1Spring MVC⼯作流程映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑1.2Spring MVC VS Struts21)springmvc的⼊⼝是⼀个servlet,即前端控制器;struts2⼊⼝是⼀个filter过虑器,即前端过滤器,2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯;struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据4)springmvc开发运⾏速度快于struts2⼆、Spring MVC⼯程搭建(xml)2.1导⼊springioc,springweb , springmvc相关的jar包2.2在/WEB-INF/ web.xml⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控制器)<!-- 注册springmvc核⼼控制器 --><servlet><!-- servlet-name名字随便写 --><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通知DispatcherServlet去指定的⽬录下加载springmvc.xml配置⽂件classpath:是在⼯程的src路径下寻找如果不配置init-param的话,控制器会⾃动寻找/WEB-INF/<servlet-name>-servlet.xml⽂件--><init-param><!-- 值是固定的,相当于键值对 --><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>*.action</url-pattern>//拦截请求</servlet-mapping>注:在默认情况下:springmvc框架的配置⽂件必须叫<servlet-name>-servlet.xml且必须放在/WEB-INF/⽬录下,我们可以在web.xml⽂件中,为DispatcherServlet配置⼀个初始化参数,让它去我们指定的⽬录下加载springmvc.xml配置⽂件2.3配置springmvc.xml注:该配置⽂件的命名规则遵循web.xml⽂件中核⼼控制器配置。
SpringMVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式
SpringMVC(三)控制器获取页⾯请求参数以及将控制器数据传递给页⾯和实现重定向的⽅式⾸先做好环境配置在mvc.xml⾥进⾏配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="/schema/beans"3 xmlns:xsi="/2001/XMLSchema-instance"4 xmlns:context="/schema/context"5 xmlns:lang="/schema/lang"6 xmlns:mvc="/schema/mvc"7 xmlns:util="/schema/util"8 xmlns:task="/schema/task"9 xmlns:aop="/schema/aop"10 xsi:schemaLocation="/schema/mvc /schema/mvc/spring-mvc-4.1.xsd11 /schema/task /schema/task/spring-task-4.1.xsd12 /schema/beans /schema/beans/spring-beans.xsd13 /schema/context /schema/context/spring-context-4.1.xsd14 /schema/lang /schema/lang/spring-lang-4.1.xsd15 /schema/aop /schema/aop/spring-aop-4.1.xsd16 /schema/util /schema/util/spring-util-4.1.xsd">17 <!-- 开启组件扫描 -->18 <context:component-scan base-package="com.xcz"></context:component-scan>19 <!-- 开启mvc标注 -->20 <mvc:annotation-driven></mvc:annotation-driven>21 <!-- 配置视图处理器 -->22 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">23 <property name="prefix" value="/WEB-INF/"></property>24 <property name="suffix" value=".jsp"></property>25 </bean>26 </beans>mvc.xml在web.xml配置 1.配置请求参数如⼊⼝ 2.配置初始化参数1 <?xml version="1.0" encoding="UTF-8"?>2 <web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd" version="3.1">3 <display-name>SpringMVC-03</display-name>4 <welcome-file-list>5 <welcome-file>index.html</welcome-file>6 <welcome-file>index.htm</welcome-file>7 <welcome-file>index.jsp</welcome-file>8 <welcome-file>default.html</welcome-file>9 <welcome-file>default.htm</welcome-file>10 <welcome-file>default.jsp</welcome-file>11 </welcome-file-list>12 <!-- 配置请求⼊⼝ -->13 <servlet>14 <servlet-name>SpringMVC</servlet-name>15 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>16 <!-- 配置初始化参数 -->17 <init-param>18 <param-name>contextConfigLocation</param-name>19 <param-value>classpath:mvc.xml</param-value>20 </init-param>21 <load-on-startup>1</load-on-startup>22 </servlet>23 <servlet-mapping>24 <servlet-name>SpringMVC</servlet-name>25 <url-pattern>*.do</url-pattern>26 </servlet-mapping>27 </web-app>web.xml控制器获取页⾯请求参数⽅式如下: 1.使⽤HttpServletRequest获取直接定义 HttpServletRequest参数 2.直接把请求参数的名字定义成控制器的参数名 3.当页⾯参数和控制器参数不⼀致可以使⽤ @RequestParam("页⾯参数名"),加在控制器⽅法对应的参数上1package com.xcz.controller;23import javax.servlet.http.HttpServletRequest;45import org.springframework.stereotype.Controller;6import org.springframework.ui.Model;7import org.springframework.ui.ModelMap;8import org.springframework.web.bind.annotation.RequestMapping;9import org.springframework.web.bind.annotation.RequestParam;10import org.springframework.web.servlet.ModelAndView;1112 @Controller13public class LoginController {14// 获取参数⽅式⼀15 @RequestMapping("/login.do")16public String login(HttpServletRequest request) {17 String username = request.getParameter("username");18 String password = request.getParameter("password");19 System.out.println(username + ":" + password);20return "login";21 }2223// 获取参数⽅式⼆24 @RequestMapping("/login2.do")25public String login2(String username, String password) {26 System.out.println(username + ":" + password);27return "login";2930// 获取参数⽅式三31 @RequestMapping("/login3.do")32public String login3(@RequestParam("username") String uname, @RequestParam("password") String pwd) {33 System.out.println(uname + ":" + pwd);34return "login";35 }36 }LoginController1 <%@ page language="java" contentType="text/html; charset=utf-8"2 pageEncoding="utf-8"%>3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">7 <title>Insert title here</title>8 </head>9 <body>10 <form action="${pageContext.request.contextPath }/login8.do"> <!--${pageContext.request.contextPath }动态获取路径 --> 11账号:<input type="text" name="username" ><br>12密码:<input type="text" name="password" ><br>13 <input type="submit" value="登录"><br>14 </form>15 </body>16 </html>login.lsp控制器中数据传递给页⾯的⽅式如下: 1.使⽤ request session application 这些域对象传输 2.使⽤ModelAndView来传输数据 //mav.getModel().put("username", username); mav.getModelMap().addAttribute("username", username); 3.使⽤ Model 来传输数据 4.使⽤ModelMap 进⾏传参1package com.xcz.controller;23import javax.servlet.http.HttpServletRequest;45import org.springframework.stereotype.Controller;6import org.springframework.ui.Model;7import org.springframework.ui.ModelMap;8import org.springframework.web.bind.annotation.RequestMapping;9import org.springframework.web.bind.annotation.RequestParam;10import org.springframework.web.servlet.ModelAndView;1112 @Controller13public class LoginController {14// 將控制器中的数据传给页⾯⽅式⼀15 @RequestMapping("/login4.do")16public String login4(@RequestParam("username") String uname, @RequestParam("password") String pwd,17 HttpServletRequest request) {18 System.out.println(uname + ":" + pwd);19 request.setAttribute("username", uname);20return "main";21 }2223// 將控制器中的数据传给页⾯⽅式⼆24 @RequestMapping("/login5.do")25public ModelAndView login5(@RequestParam("username") String uname, @RequestParam("password") String pwd) {26 System.out.println(uname + ":" + pwd);27 ModelAndView mav = new ModelAndView();28 mav.setViewName("main");29 mav.getModel().put("username", uname);30return mav;31 }3233// 將控制器中的数据传给页⾯⽅式三34 @RequestMapping("/login6.do")35public ModelAndView login6(@RequestParam("username") String uname, @RequestParam("password") String pwd,36 ModelAndView mav) {37 System.out.println(uname + ":" + pwd);38 mav.setViewName("main");39 mav.getModelMap().addAttribute("username", uname);40// mav.getModelMap().put("username", uname);41return mav;42 }4344// 將控制器中的数据传给页⾯⽅式四45 @RequestMapping("/login7.do")46public String login7(@RequestParam("username") String uname, @RequestParam("password") String pwd, Model model) {47 System.out.println(uname + ":" + pwd);48 model.addAttribute("username", uname);49return "main";50 }5152//將控制器中的数据传给页⾯⽅式五53 @RequestMapping("/login8.do")54public String login8(@RequestParam("username") String uname, @RequestParam("password") String pwd,ModelMap map) {55 System.out.println(uname + ":" + pwd);56 map.put("username", uname);57return "main";58 }59 }LoginController1 <%@ page language="java" contentType="text/html; charset=utf-8"2 pageEncoding="utf-8"%>3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">7 <title>Insert title here</title>8 </head>9 <body>10 <form action="${pageContext.request.contextPath }/login8.do"> <!--${pageContext.request.contextPath }动态获取路径 --> 11账号:<input type="text" name="username" ><br>12密码:<input type="text" name="password" ><br>13 <input type="submit" value="登录"><br>14 </form>15 </body>16 </html>1 <%@ page language="java" contentType="text/html; charset=utf-8"2 pageEncoding="utf-8"%>3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">7 <title>Insert title here</title>8 </head>9 <body>10 <h1>欢迎${username }来访</h1>11 </body>12 </html>main.jsp实现重定向⽅式如下: 1.当控制器⽅法返回String时return"redirect:路径"; 默认是转发,转发的结果直接交给ViewResolver可以通过加forward:来继续处理,⽽不交给ViewResolver 2.当控制器⽅法返回 ModelAndView 时使⽤RedirectView 完成重定向(/代表项⽬名前⾯的部分不包含项⽬名)1package com.xcz.controller;23import javax.servlet.http.HttpServletRequest;4import org.springframework.stereotype.Controller;5import org.springframework.web.bind.annotation.RequestMapping;6import org.springframework.web.bind.annotation.RequestParam;7import org.springframework.web.servlet.ModelAndView;8import org.springframework.web.servlet.view.RedirectView;910 @Controller11public class LoginController {12private static final String URL = "toMain.do";13 @RequestMapping("/toLogin.do")14public String toLogin() {15return "login";16 }17 @RequestMapping("/toMain.do")18public String toMain() {19return "main";20 }21// 实现重定向⽅式⼀22 @RequestMapping("/login.do")23public String login(@RequestParam("username") String uname,@RequestParam("password") String pwd,HttpServletRequest request) {24 System.out.println(uname + ":" + pwd);25 request.setAttribute("usernameq", uname);26 request.setAttribute("password", pwd);27//return "redirect:/toMain.do"; //使⽤redirect: 直接重定向,导致数据丢失,所以页⾯⽆法获取28return "forward:/toMain.do"; //使⽤forward: 先转发后跳转到main.jsp,不会导致数据丢失,所以页⾯可以获取控制器数据29 }30// 实现重定向⽅式⼆31 @RequestMapping("/login1.do")32public ModelAndView login1(@RequestParam("username") String uname,@RequestParam("password") String pwd,HttpServletRequest request) {33 System.out.println(uname + ":" + pwd); //打印后台数据34 String path = request.getServletContext().getContextPath(); //获取项⽬名前⾯的路径35 ModelAndView mView = new ModelAndView();36 RedirectView rView = new RedirectView(path + "/" + URL); //将路径和项⽬名进⾏拼接起来37 mView.setView(rView);38 mView.getModelMap().addAttribute("username", uname); //将控制器的数据传给页⾯39return mView;40 }41 }LoginController1 <%@ page language="java" contentType="text/html; charset=utf-8"2 pageEncoding="utf-8"%>3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">7 <title>Insert title here</title>8 </head>9 <body>10 <form action="${pageContext.request.contextPath }/login1.do"> <!--${pageContext.request.contextPath }动态获取路径 -->11账号:<input type="text" name="username" ><br>12密码:<input type="text" name="password" ><br>13 <input type="submit" value="登录"><br>14 </form>15 </body>16 </html>login.jsp1 <%@ page language="java" contentType="text/html; charset=utf-8"2 pageEncoding="utf-8"%>3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">7 <title>Insert title here</title>8 </head>9 <body>10 <h1>欢迎${ername }来访</h1>11 </body>12 </html>main.jsp。
Spring3_MVC与Struts2.x比较
Spring MVCSpringMVC非常优秀的MVC框架, 由其是在3.0版本发布后, 现在有越来越多的团队选择了Spring3 MVC来作为MVC的框架.SpringMVC结构简单,灵活性较高,性能也很优秀。
核心类与接口:DispatcherServlet -- 前置控制器HandlerMapping接口-- 处理请求的映射HandlerMapping接口的实现类:SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上HandlerAdapter接口-- 处理请求的映射AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上Controller接口-- 控制器由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,所以我们并没有用到这个接口。
HandlerInterceptor 接口--拦截器我们自己实现这个接口,来完成拦截的器的工作。
ViewResolver接口的实现类UrlBasedViewResolver类通过配置文件,把一个视图名交给到一个View来处理InternalResourceViewResolver类,比上面的类,加入了JSTL的支持View接口JstlView类LocalResolver接口HandlerExceptionResolver接口--异常处理SimpleMappingExceptionResolver实现类ModelAndView类核心流程图DispatcherServlet说明使用Spring MVC,配置DispatcherServlet是第一步。
DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。
spring3.0MVC注解(附实例)
0.提示1) Spring发行版本附带了PetClinic 示例,它是一个在简单的表单处理的上下文中,利用了本节中说明的注解支持的Web应用程序。
可以在“samples/petclinic ”目录中找到PetClinic 应用程序。
2) 另外一个建立在基于注解的Web MVC上的示例应用程序,请见imagedb 。
这个示例集中在无状态的multi-action控制器,包括多段文件上传的处理。
可以在“samples/imagedb ”目录找到imagedb 应用程序。
1.建立dispatcher实现注解支持只有对应的HandlerMapping(为了实现类型级别的注解)和/ 或HandlerAdapter(为了实现方法级别的注解)出现在 dispatcher中时, @RequestMapping 才会被处理。
这在DispatcherServlet 和DispatcherPortlet 中都是缺省的行为。
然而,如果是在定义自己的HandlerMappings或HandlerAdapters,就需要确保一个对应的自定义的DefaultAnnotation HandlerMapping和 /或AnnotationMethod HandlerAdapter同样被定义——假设想要使用@RequestMapping 。
例1:雁联zfpt-servlet.xml例2:web.xml2.1 webAppRootKey2.3 log4jConfigLocation2.4 contextConfigLocation2.5 springSecurityFilterChain2.6 Log4jConfigListener2.7 ContextLoaderListener2.8 DispatcherServlet2.9 exception.java例3:雁联web.xml如果你想要自定义映射策略,显式的定义一个DefaultAnnotationHandlerMapping和 /或AnnotationMethodHandlerAdapter也有实际意义。
springMVC详解以及注解说明
springMVC详解以及注解说明基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置Bean、装配Bean 的功能,您可以使用基于注释的Spring IoC 替换原来基于XML 的配置。
本文通过实例详细讲述了Spring 2.5 基于注释IoC 功能的使用。
概述注释配置相对于XML 配置具有很多的优势:∙ 它可以充分利用Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。
如使用JPA 注释配置ORM 映射时,我们就不需要指定PO 的属性名、类型等信息,如果关系表字段和PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过Java 反射机制获取。
∙ 注释和Java 代码位于一个文件中,而XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。
而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
因此在很多情况下,注释配置比XML 配置更受欢迎,注释配置有进一步流行的趋势。
Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。
在这篇文章里,我们将向您讲述使用注释进行Bean 定义和依赖注入的内容。
Spring2.5的注释Spring 2.5 提供了AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor这四个主要的关于Annotation 的BeanPostProcessor。
S3M3框架
1.框架描述:对于现在的开发框架我们使用开源的spring3, spring3mvc,mybatis3,esayui,需要jdk5以上mybatis3作为数据持久层用来对实体层进行各种操作其中spring3作为容器用来管理类的注入,事务作用在业务逻辑层Spring3mvc+easyui作为表示层,spring3mvc主要用来作为业务逻辑与前端页面的交互,Easyui作为对业务数据的展现。
整体框架图如下所示:2.Spring就我们目前框架使用的部分做下说明:主要是作为生成Bean实例的工厂的容器,把j2ee应用中所有的组件都被当作Bean来管理,包括数据源。
这里主要使用spring的IoC容器,依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。
Spring有3种注入方式我们这里用到的都是通过set的设置方式注入的,下面在配置文件中对dao和service实现类进行注入为例:<!-- dao 注入--><bean id="userDao" class="org.mybatis.spring.MapperFactoryBean"><property name="sqlSessionFactory" ref="sqlSessionFactory" /><!-- 注入映射器,这里是接口而不是实现类--><property name="mapperInterface" value="erDao"/></bean><!-- Service注入--><bean id="userService" class="erServiceImpl"><property name="userDao" ref="userDao" /></bean>使用<context:annotation-config/>简化配置隐形注册spring中处理元数据的类,这样就能在使用的地方,使用注解自动装配了@Autowiredpublic void setUserService(UserService userService) {erService = userService;}这里userService不再需要new3.springmvc下面对主要的核心类和接口的简介1.DispatcherServlet(前置控制器)作用:拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。
SpringMVC配置文件的三个常用配置详解
SpringMVC配置⽂件的三个常⽤配置详解 Spring MVC项⽬中通常会有⼆个配置⽂件,sprng-servlet.xml和applicationContext.xml⼆个配置⽂件,通常会出现以下⼏个配置 1. <context:annotation-config /> 它的作⽤是隐式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor。
其作⽤是如果你想在程序中使⽤注解,就必须先注册该注解对应的类,如下图所⽰:依赖的类注解CommonAnnotationBeanPostProcessor@Resource 、@PostConstruct、@PreDestroy PersistenceAnnotationBeanPostProcessor的Bean@PersistenceContextAutowiredAnnotationBeanPostProcessor Bean@AutowiredRequiredAnnotationBeanPostProcessor@Required 当然也可以⾃⼰进⾏注册:<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/><bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> 2. <context:component-scan base-package="com.*" ><context:component-scan/> 配置项不但启⽤了对类包进⾏扫描以实施注释驱动 Bean 定义的功能,同时还启⽤了注释驱动⾃动注⼊的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使⽤<context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。
spring mvc面试知识点
Spring MVC面试知识点1. 什么是Spring MVCSpring MVC是一个基于Java的框架,用于构建Web应用程序。
它是Spring框架的一部分,提供了用于处理HTTP请求和响应的组件和功能。
Spring MVC的核心目标是实现MVC(Model-View-Controller)设计模式,以实现松耦合、可重用和可测试的Web应用程序。
2. MVC设计模式MVC设计模式是一种将应用程序分为三个主要组件的架构模式:模型(Model)、视图(View)和控制器(Controller)。
这个模式的目标是将应用程序的数据逻辑、业务逻辑和用户界面分离开来,以提高代码的可维护性和可测试性。
•模型(Model):模型代表应用程序的数据和业务逻辑。
它负责处理数据的读取、写入和验证,并包含与业务逻辑相关的方法和操作。
•视图(View):视图是应用程序的用户界面。
它负责以用户可以理解的方式呈现数据,并处理与用户交互的相关操作。
•控制器(Controller):控制器是模型和视图之间的协调者。
它负责接收用户的请求,处理请求,并相应地更新模型和视图。
3. Spring MVC的核心组件在Spring MVC中,有几个核心组件负责处理请求和响应。
•DispatcherServlet:DispatcherServlet是Spring MVC的前端控制器(Front Controller)。
它是整个请求处理流程的中央处理器,负责接收所有的HTTP请求,并将它们分发给相应的处理器。
•HandlerMapping:HandlerMapping负责将URL映射到具体的处理器(Controller)上。
它根据请求的URL确定要执行的处理器,并返回一个处理器对象。
•HandlerAdapter:HandlerAdapter负责根据请求的处理器的类型,调用相应的处理方法。
它根据处理器的类型和方法的参数,将请求的参数传递给处理器,并处理返回值。
SpringMVC框架详解
SpringMVC框架详解随着Web应用程序变得越来越复杂,使用适当的框架变得越来越重要。
SpringMVC是一个流行的Java Web框架,它提供了许多功能,使开发Web应用程序更容易和更快速。
本文将对SpringMVC框架进行详细介绍,包括其架构、工作流程、控制器、视图和模型等方面的内容。
1. SpringMVC架构SpringMVC框架基于Model-View-Controller(MVC)架构。
在这种架构中,应用程序被分为三个组件,分别是:1. Model:负责管理数据的处理和存储。
2. View:负责呈现数据给用户的界面。
3. Controller:负责接收用户的请求和处理数据,控制应用程序的行为。
SpringMVC通过DispatcherServlet实现了这种MVC架构。
DispatcherServlet是一个前端控制器(Front Controller),它接收所有的客户端请求并将其分配给相应的处理程序。
2. SpringMVC的工作流程SpringMVC框架具有以下的工作流程:1. 用户发送请求到DispatcherServlet。
2. DispatcherServlet收到请求后,根据配置文件中的URL映射找到相应的Controller。
3. Controller接收请求,并将数据传递给Service层。
4. Service层对数据进行处理,并将处理结果返回给Controller。
5. Controller根据视图解析器的配置选择相应的视图,将处理结果传递给视图并渲染。
6. 视图呈现处理结果,并将其返回给客户端。
3. SpringMVC的控制器控制器是SpringMVC架构中最重要的组件之一。
它负责接收客户端请求,并根据请求的类型执行相应的逻辑。
SpringMVC提供了以下几种类型的控制器:1. @Controller:该注解标注的类被SpringMVC视为控制器。
2. @RestController:可以理解为@Controller和@ResponseBody的组合注解。
三层架构介绍和MVC设计模型介绍
三层架构介绍和MVC设计模型介绍springmvc是什么?
Spring Web MVC是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层
进⾏职责解耦,基于请求驱动指的就是使⽤请求-响应模型,框架的⽬的就是帮助我们简化开发,Spring Web MVC也是要简化我们⽇常Web开发的。
服务器端分成三层框架
表现层:SpringMVC 包含JSP和Servlet等与WEB相关的内容
业务层:Spring框架 业务层中不包含JavaWeb API,它只关⼼业务逻辑
持久层:MyBatis 封装了对数据库的访问细节
MVC设计模型
MVC 是⼀种使⽤ MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应⽤程序的模式:
Model(模型)表⽰应⽤程序核⼼(⽐如数据库记录列表)。
View(视图)显⽰数据(数据库记录)。
Controller(控制器)处理输⼊(写⼊数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应⽤程序中处理数据显⽰的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应⽤程序中处理⽤户交互的部分。
通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据。
01-SpringMVC、三层架构、组件、请求参数绑定、常用注解
01-SpringMVC、三层架构、组件、请求参数绑定、常⽤注解⼀、SpringMVC的基本概念1.1、关于三层架构和MVC1.1.1、三层架构开发架构⼀般都是基于两种形式,⼀种是 C/S 架构,也就是客户端/服务器,另⼀种是 B/S 架构,也就 是浏览器服务器。
在 JavaEE 开发中,⼏乎全都是基于 B/S架构的开发。
那么在 B/S架构中,系统标准的三层架构 包括:表现层、业务层、持久层。
三层架构在实际开发中使⽤的⾮常多。
三层架构中:表现层:也就是我们常说的web层。
它负责接收客户端请求,向客户端响应结果,通常客户端使⽤http协议请求 web 层,web 需要接收 http 请求,完成 http 响应。
表现层包括展⽰层和控制层:控制层负责接收请求,展⽰层负责结果的展⽰。
表现层业务层:也就是我们常说的 service 层。
它负责业务逻辑处理,和我们开发项⽬的需求息息相关。
web 层依赖业务层,但是业务层不依赖 web 层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务⼀致性。
(也就是我们说持久层:也就是我们是常说的 dao 层。
负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进⾏持久化的载体,数据访问层是业务层和持久层交互的接⼝,业务层需要通过数据访问层将数据持久化到数据库中。
通俗的讲,持久层就1.1.2、MVC模型MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是⼀种⽤于设计创建 Web 应⽤程序表现层的模式。
MVC 中每个部分各司其职:Model(模型): 通常指的就是我们的数据模型。
作⽤⼀般情况下⽤于封装数据。
View(视图): 通常指的就是我们的 jsp 或者 html。
作⽤⼀般就是展⽰数据的。
通常视图是依据模型数据创建的。
Controller(控制器): 是应⽤程序中处理⽤户交互的部分。
mvc三层架构的原理
mvc三层架构的原理MVC三层架构的原理随着软件开发的不断发展,为了提高软件的可维护性、可扩展性和可复用性,各种架构模式应运而生。
MVC(Model-View-Controller)是一种常用的软件架构模式,它将软件系统分为三个独立的部分:模型(Model)、视图(View)和控制器(Controller)。
这三个部分之间通过定义良好的接口进行交互,实现了业务逻辑的分离和模块化,使系统更易于开发和维护。
MVC三层架构的原理可以简单地概括为以下几点:1. 模型(Model)层:模型层是整个系统的核心,负责处理数据逻辑和业务逻辑。
它封装了与数据相关的操作,包括数据的获取、更新和删除等。
模型层不依赖于具体的用户界面或展示方式,只关注数据的处理和管理。
通过定义良好的接口,模型层可以被其他层或模块复用,提高了系统的可扩展性和可复用性。
2. 视图(View)层:视图层负责展示数据和与用户进行交互。
它根据模型层提供的数据,将数据以用户友好的方式呈现出来,如图表、表格、文本等。
视图层不应包含任何业务逻辑,只负责数据的展示和用户输入的接收。
通过与控制器层的交互,视图层可以更新模型层的数据或通知控制器层进行相应的操作。
3. 控制器(Controller)层:控制器层是模型层和视图层之间的桥梁,负责处理用户的输入和对应的业务逻辑。
它接收来自视图层的用户输入,并根据输入的不同调用模型层的相应方法进行数据处理和更新。
控制器层还负责将模型层的数据更新通知给视图层,以便视图层可以及时更新展示的数据。
控制器层的存在使得模型层和视图层可以独立发展,提高了系统的灵活性和可维护性。
MVC三层架构的原理在实际应用中有以下几个优点:1. 分离关注点:MVC将系统的不同功能分离到不同的层中,使得每个层只关注自己的职责,降低了模块之间的耦合度。
这样一来,当某一层需要改动时,只需修改对应的层,而不会对其他层产生影响,提高了系统的可维护性。
2. 提高代码复用性:通过将业务逻辑封装在模型层中,其他模块可以直接调用模型层提供的接口来实现功能,避免了重复编写相同的代码,提高了代码的复用性。
mvc三大框架的原理
mvc三大框架的原理MVC是一种软件设计模式,将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。
每个部分都有特定的任务和职责,协同工作来实现应用程序的功能。
MVC框架就是基于MVC模式的应用程序框架,常见的三大MVC框架是Spring MVC、Struts2和 MVC。
它们都是开源的、成熟的框架,被广泛应用于Web应用程序的开发中。
下面我们来了解一下这三个MVC框架的原理。
1. Spring MVCSpring MVC在MVC模式的基础上,增加了IoC(控制反转)和AOP(面向切面编程)的概念,使得开发者能够更加方便地管理和组装组件。
Spring MVC将请求分解为控制器、模型和视图三部分,在控制器处理请求,模型提供数据,视图渲染数据。
Spring MVC的工作流程如下:1)客户端发送请求到DispatcherServlet。
2)DispatcherServlet调用HandlerMapping查找处理器。
3)HandlerMapping返回处理器,DispatcherServlet将请求发送到处理器。
4)处理器执行业务逻辑,并将数据存储在模型中。
5)处理器返回逻辑视图名字给DispatcherServlet。
6)DispatcherServlet将逻辑视图名字发送给ViewResolver。
7)ViewResolver返回视图,DispatcherServlet将模型和视图合并,并将HTML响应发送给客户端。
2. Struts2Struts2是Apache Struts的继承者,它将MVC设计模式应用于Web应用程序开发中。
Struts2通过拦截器(Interceptor)实现了AOP的功能,通过以拦截器为基础的过滤器链,将请求从客户端发送到控制器,再由控制器调用模型和视图。
Struts2的工作流程如下:1)客户端发送请求到FilterDispatcher。
SpringMVC(思维导图)
@RequestMapping注解
@RequestMapping注解的位置
如果按上面的一个请求对应一个控制器方法来处理又会出现一个新问题,项目中 有很多模块,可能多个模块中都有一个list列表功能,那么就很尴尬
@RequestMapping注解的Value属性
@RequestMapping注解的value属性通过请求的请求地址匹配请求映射
SpringMVC简介
MVC是一种软甲架构思想,将软件按照模型,视图,控制器来划分
什么是MVC
M:Model,模型层,指工程中的JavaBean,作用是处理数据
JavaBean分为两类
V:View,视图层,指工程中的html或jsp等页面,作用是于用户进行交互,展示 数据
一类称为实体类Bean:专门存储业务数据的,如Studnet,User等
转发视图
SpringMVC中默认的转发视图是InternalResourceView
什么是SpringMVC
SpringMVC是Spring的一个后续产品,是Spring的一个子项目
SpringMVC是Spring为表述层开发提供的一整套完备的解决方案。在表述层框架 经历Strust,WebWork,Strust2等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC作为JavaEE项目表述层开发的首选方案
域对象共享数据
使用map向request域对象共享数据
使用ModelMap向request域对象共享数据
Model,ModelMap,Map的关系
Model,ModelMap,Map类型的参数其实本质上都是BindingAwareModelMap 类型。Model是一个接口,Model是一个类,Map是一个接, ExtendedModelMap则继承ModelMap并实现了Model,而ModelMap继承了 LinkedHashMap,也就间接继承了LinkedHashMap;而 BindingAwareModelMap继承了ExtendedModelMap,也就说明 BindingAwareModelMap即可实例Map,也可以实例Model,ModelMap,所打印 类型结果都为BindingAwareModelMap
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、前言:大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。
Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。
官方的下载网址是:/download(本文使用是的Spring 3.0.5版本)Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。
但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。
Struts2的多层拦截器、多实例action性能都很好。
可以参考我写的一篇关于Spring MVC与Struts2Spring3 MVC的优点:1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。
呵呵,当然这不是决定因素。
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
Struts2的众多优点:略... (呵呵,是不是不公平?)众多文章开篇时总要吹些牛,吸引一下读者的眼球,把读者的胃口调起来,这样大家才有兴趣接着往后看。
本文也没能例外。
不过保证你看了之后不会后悔定有收获。
二、核心类与接口:先来了解一下,几个重要的接口与类。
现在不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础。
DispatcherServlet -- 前置控制器HandlerMapping接口-- 处理请求的映射HandlerMapping接口的实现类:SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上HandlerAdapter接口-- 处理请求的映射AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上Controller接口-- 控制器由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,所以我们并没有用到这个接口。
HandlerInterceptor 接口--拦截器无图,我们自己实现这个接口,来完成拦截的器的工作。
ViewResolver接口的实现类UrlBasedViewResolver类通过配置文件,把一个视图名交给到一个View来处理InternalResourceViewResolver类,比上面的类,加入了JSTL的支持View接口JstlView类LocalResolver接口HandlerExceptionResolver接口--异常处理SimpleMappingExceptionResolver实现类ModelAndView类无图。
三、核心流程图本图是我个人画的,有不严谨的地方,大家对付看吧。
总比没的看强。
四、DispatcherServlet说明使用Spring MVC,配置DispatcherServlet是第一步。
DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。
DispatcherServlet是前置控制器,配置在web.xml文件中的。
拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。
“某某规则”:是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。
先来看第一个例子:Xml代码1.<web-app>2.<servlet>3.<servlet-name>example</servlet-name>4.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>5.<load-on-startup>1</load-on-startup>6.</servlet>7.<servlet-mapping>8.<servlet-name>example</servlet-name>9.<url-pattern>*.form</url-pattern>10.</servlet-mapping>11.</web-app><load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动。
<url-pattern>*.form</url-pattern> 会拦截*.form结尾的请求。
<servlet-name>example</servlet-name>这个Servlet的名字是example,可以有多个DispatcherServlet,是通过名字来区分的。
每一个DispatcherServlet有自己的WebApplicationContext上下文对象。
同时保存的ServletContext中和Request对象中,关于key,以后说明。
在DispatcherServlet的初始化过程中,框架会在web应用的WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。
第二个例子:Xml代码1.<servlet>2.<servlet-name>springMVC</servlet-name>3.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>4.<init-param>5.<param-name>contextConfigLocation</param-name>6.<param-value>classpath*:/springMVC.xml</param-value>7.</init-param>8.<load-on-startup>1</load-on-startup>9.</servlet>10.<servlet-mapping>11.<servlet-name>springMVC</servlet-name>12.<url-pattern>/</url-pattern>13.</servlet-mapping>指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。
其中<param-value>**.xml</param-value> 这里可以使用多种写法1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml2、<param-value>/WEB-INF/classes/springMVC.xml</param-value>3、<param-value>classpath*:springMVC-mvc.xml</param-value>4、多个值用逗号分隔Servlet拦截匹配规则可以自已定义,Servlet拦截哪种URL合适?当映射为@RequestMapping("/user/add")时:1、拦截*.do,例如:/user/add.do,弊端:所有的url都要以.do结尾。
不会影响访问静态文件。
2、拦截/app/*,例如:/app/user/add,弊端:请求的url都要包含/app,@RequestMapping("/user/add")中不须要包含/app。
3、拦截/,例如:/user/add,弊端:对jpg,js,css静态文件的访问也被拦截不能正常显示。
后面有解决办法。
4、拦截/*,可以走到Action中,但转发到jsp时再次被拦截,不能访问到jsp。
五、双亲上下文的说明如果你使用了listener监听器来加载配置,一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的。
如下Java代码1.<listener>2. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>3.</listener>Spring会创建一个全局的WebApplicationContext上下文,称为根上下文,保存在ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE属性的值。
可以使用工具类取出上下文:WebApplicationContextUtils.getWebApplicationContext(ServletContext);DispatcherServlet是一个Servlet,可以同时配置多个,每个DispatcherServlet有一个自己的WebApplicationContext上下文,这个上下文继承了根上下文中所有东西。
保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。
当一个Request对象产生时,会把这个WebApplicationContext上下文保存在Request对象中,key是DispatcherServlet.class.getName() + ".CONTEXT"。