Spring MVC 框架搭建及详解
现在主流的Web MVC 框架除了Struts 这个主力 外,其次就是Spring MVC 了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC 来应对大多数的Web 开发,就必须要掌握它的配置及原理。
一、Spring MVC 环境搭建:(Spring 2.5.6 + Hibernate 3.2.0)
1. jar 包引入
Spring 2.5.6:spring.jar 、spring-webmvc.jar 、commons-logging.jar 、
cglib-nodep-2.1_3.jar
Hibernate 3.6.8:hibernate3.jar 、hibernate-jpa-2.0-api-1.0.1.Final.jar 、antlr-2.7.6.jar 、commons-collections-3.1、dom4j-1.6.1.jar 、javassist-3.12.0.GA.jar 、jta-1.1.jar 、slf4j-api-1.6.1.jar 、slf4j-nop-1.6.4.jar 、相应数据库的驱动jar 包
2. web.xml 配置(部分)
01
02
03
04
05
06
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 30
31
33 3. spring-servlet.xml 配置
spring-servlet 这个名字是因为上面web.xml 中
spring-servlet.xml 文件名,如果改为springMVC ,对应的文件名则为
springMVC-servlet.xml 。
01
02 04 xmlns:context="https://www.sodocs.net/doc/1f4200160.html,/schema/conte xt" 05 xsi:schemaLocation="https://www.sodocs.net/doc/1f4200160.html,/schema/beans https://www.sodocs.net/doc/1f4200160.html,/schema/beans/spring-beans-3.0.xsd 06 https://www.sodocs.net/doc/1f4200160.html,/schema/aop https://www.sodocs.net/doc/1f4200160.html,/schema/aop/spring-aop-3.0.xsd 0 https://www.sodocs.net/doc/1f4200160.html,/schema/tx 7 https://www.sodocs.net/doc/1f4200160.html,/schema/tx/spring-tx-3.0.xsd 08 https://www.sodocs.net/doc/1f4200160.html,/schema/context https://www.sodocs.net/doc/1f4200160.html,/schema/context/spring-co ntext-3.0.xsd"> 09 10 11 12 13 14 15 16 17 18 19 20 21
4. applicationContext.xml 配置
01
02
11
12
13
14
16
17
18
19
20
22
23
24
25
26
27
28
29
31
32
33
34
35
二、详解
Spring MVC 与Struts 从原理上很相似(都是基于MVC 架构),都有一个控制页面请求的Servlet ,处理完后跳转页面。看如下代码(注解):
01 package controller;
02
03 import javax.servlet.http.HttpServletRequest;
04
05 import org.springframework.stereotype.Controller;
06 import org.springframework.web.bind.annotation.RequestMapping; 07 import org.springframework.web.bind.annotation.RequestParam; 08
09 import https://www.sodocs.net/doc/1f4200160.html,er;
10
11 @Controller //类似Struts 的Action
12 public class TestController {
13
14 @RequestMapping("test/login.do") // 请求url 地址映射,类似Struts 的action-mapping
15 publicString testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {
16 // @RequestParam 是指请求url 地址映射中必须含有的参数(除非属性required=false)
17 // @RequestParam 可简写为:@RequestParam("username") 18
19 if (!"admin".equals(username) || !"admin".equals(password)) {
20 return"loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet 配置文件中配置的前缀和后缀
21 }
22 return "loginSuccess";
23 }
24
25 @RequestMapping("/test/login2.do")
26 public ModelAndView testLogin2(String username, String password, int age){
27 // request 和response 不必非要出现在方法中,如果用不上的话可以去掉
28 // 参数的名称是与页面控件的name 相匹配,参数类型会自动被转换
29
30 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
31 return newModelAndView("loginError"); // 手动实例化ModelAndView 完成跳转页面(转发),效果等同于上面的方法返回字符串
32 }
33 return new ModelAndView(newRedirectView("../index.jsp")); // 采用重定向方式跳转页面
34
// 重定向还有一种简单写法 35 // return new ModelAndView("redirect:../index.jsp"); 36 }
37
38 @RequestMapping("/test/login3.do")
39 public ModelAndView testLogin3(User user) {
40 // 同样支持参数为表单对象,类似于Struts 的ActionForm ,User 不需要任何配置,直接写即可
41 String username = user.getUsername();
42 String password = user.getPassword();
43 int age = user.getAge();
44
45 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
46 return new ModelAndView("loginError");
47 }
48 return new ModelAndView("loginSuccess");
49 }
50
51 @Resource(name = "loginService") // 获取applicationContext.xml 中bean 的id 为loginService 的,并注入
52 privateLoginService loginService; //等价于spring 传统注入方式写get 和set 方法,这样的好处是简洁工整,省去了不必要得代码
53
54 @RequestMapping("/test/login4.do")
55 public String testLogin4(User user) {
56 if (loginService.login(user) == false) {
57 return "loginError";
58 }
59 return "loginSuccess";
60 }
61 }
以上4个方法示例,是一个Controller 里含有不同的请求url ,也可以采用一个url 访问,通过url 参数来区分访问不同的方法,代码如下:
01 package controller;
02
03 import org.springframework.stereotype.Controller;
04 import org.springframework.web.bind.annotation.RequestMapping; 05 import org.springframework.web.bind.annotation.RequestMethod; 06
07 @Controller
08 @RequestMapping("/test2/login.do") // 指定唯一一个*.do 请求关联到该Controller
09 public class TestController2 {
10
11 @RequestMapping
12 public String testLogin(String username, String password, int age) {
13 // 如果不加任何参数,则在请求/test2/login.do 时,便默认执行该方法
14
15 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
16 return "loginError";
17 }
18 return "loginSuccess";
19 }
20
21 @RequestMapping(params = "method=1", method=RequestMethod.POST) 22 public String testLogin2(String username, String password) { 23 // 依据params 的参数method 的值来区分不同的调用方法 24 // 可以指定页面请求方式的类型,默认为get 请求
25
26 if (!"admin".equals(username) || !"admin".equals(password)) {
27 return "loginError";
28 }
29 return "loginSuccess";
30 }
31
32 @RequestMapping(params = "method=2")
33 public String testLogin3(String username, String password, int age) {
34 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
35 return "loginError";
36 }
37 return "loginSuccess";
38 }
39 } 其实RequestMapping 在Class 上,可看做是父Request 请求url ,而RequestMapping 在方法上的可看做是子Request 请求url ,父子请求url 最终会拼起来与页面请求url 进行匹配,因此RequestMapping 也可以这么写:
01 package controller;
02
03 import org.springframework.stereotype.Controller;
04 import org.springframework.web.bind.annotation.RequestMapping; 05
06 @Controller
07 @RequestMapping("/test3/*") // 父request 请求url
08 public class TestController3 {
09
10 @RequestMapping("login.do") // 子request 请求url ,拼接后等价于/test3/login.do
11 public String testLogin(String username, String password, int age) {
12 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
13 return "loginError";
14 }
15 return "loginSuccess";
16 }
17 }
三、结束语
掌握以上这些Spring MVC就已经有了很好的基础了,几乎可应对与任何开发,在熟练掌握这些后,便可更深层次的灵活运用的技术,如多种视图技术,例如Jsp、Velocity、Tiles、iText 和POI。Spring MVC框架并不知道使用的视图,所以不会强迫您只使用JSP 技术。
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。 我们可以使用
Springmvc框架配置步骤 小弟是个新手,有不对的地方请tell me,一起研究探讨。谢谢。 1062140832@https://www.sodocs.net/doc/1f4200160.html, 配置springmvc框架其实不是很难,要现有一个总体的认识,确定要分几步,每一步主要是干什么,不要太盲目。 以为web.xml是项目的入口,所以所有的配置文件,都必须引入到wem.xml中,不然,配置了等于没用。所以,要先从入口入手。 配置web.xml 1、首先引入springmvc-servlet.xml文件
spring的@Transactional注解详细用法 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! spring的@Transactional注解详细用法Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API 提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用提供比其他事务API如JTA更简单的编程式事务管理API与spring数据访问抽象的完美集成事务管理方式spring支持编程式事务管理和声明式事务管理两种方式。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。显然声明式事务管理要优于编程式事务管理,这正是spring
一、前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。 官方的下载网址是:https://www.sodocs.net/doc/1f4200160.html,/download(本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章https://www.sodocs.net/doc/1f4200160.html,/admin/blogs/698217 Spring3 MVC的优点: 1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。 2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。 Struts2的众多优点:略... (呵呵,是不是不公平?) 众多文章开篇时总要吹些牛,吸引一下读者的眼球,把读者的胃口调起来,这样大家才有兴趣接着往后看。本文也没能例外。不过保证你看了之后不会后悔定有收获。
Spring注解详解 目录 一、注解说明 (2) 1.使用简化配置 (2) 2.使用Bean定义注解 (2) 3.Spring支持以下4种类型的过滤方式: (2) 二、注解介绍 (2) 1.@Controller (3) 2.@Service (3) 3.@Autowired (4) 4.@RequestMapping (4) 5.@RequestParam (5) 6.@ModelAttribute (6) 7.@Cacheable和@CacheFlush (7) 8.@Resource (7) 9.@PostConstruct和@PreDestroy (8) 10.@Repository (8) 11.@Component(不推荐使用) (8) 12.@Scope (8) 13.@SessionAttributes (9) 14.@InitBinder (9) 15.@Required (9) 16.@Qualifier (10)
一、注解说明 1.使用简化配置
Spring mvc架构及执行流程一、请求处理流程图 二、执行流程说明 三、组件说明
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc 的三大组件。 需要用户编写的组件有handler、view 四、Spring MVC配置 1、组件扫描器:使用组件扫描器省去在spring容器配置每个controller类,使用
2、RequestMappingHandlerMapping:注解处理器映射器,对类中标记@RequestMapping 的方法进行映射,根据RequestMapping定义的url匹配RequestMapping标记的方 法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装 注解描述: @RequestMapping:定义请求url到处理器功能方法的映射 3、RequestMappingHandlerAdapter:注解式处理器适配器,对标记@RequestMapping 的方法进行适配。 从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用 4、
Spring对于Bean的依赖注入,支持多种注解方式: 直观上看起来,@Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring 对这些注解也进行了支持。但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,发现一些有意思的特性。 区别总结如下: 一、@Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean 是不会抛异常的。@Inject和@Resource没有提供对应的配置,所以必须找到否则会抛异常。 二、@Autowired和@Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是@Resource是个例外,它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。
TIPS Qualified name VS Bean name 在Spring设计中,Qualified name并不等同于Bean name,后者必须是唯一的,但是前者类似于tag或者group的作用,对特定的bean进行分类。可以达到getByTag(group)的效果。对于XML配置的bean,可以通过id属性指定bean name(如果没有指定,默认使用类名首字母小写),通过标签指定qualifier name: 如果是通过注解方式,那么可以通过@Qualifier注解指定qualifier name,通过@Named或者@Component(@Service,@Repository等)的value值指定bean name:
牧涛 --<-<-<@态度决定一切→_→。。。 ?博客园 ?首页 ?新闻 ?新随笔 ?联系 ?管理 ?订阅 随笔- 171 文章- 3 评论- 79 spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib -nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、a ntlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.G A.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar 包 SpringMVC是一个基于DispatcherServlet(分发器)的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。 DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherSe rvlet的,那么我们先来配置一下DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet是在web.xml文件中声明的。