搜档网
当前位置:搜档网 › SpringMvc注解开发实例教程

SpringMvc注解开发实例教程

SpringMvc注解开发实例教程
SpringMvc注解开发实例教程

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 spring

05 org.springframework.web.servlet.DispatcherServle t

06

12 1

13

14

15

16 spring

17 *.do

18

19

20

21

22

23

24

25 org.springframework.web.context.ContextLoaderLi stener

26

27

28

29 30

31

contextConfigLocation 32 classpath:config/applicationContext.xml

33 3. spring-servlet.xml 配置

spring-servlet 这个名字是因为上面web.xml 中标签配的值为spring (spring),再加上“-servlet”后缀而形成的

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 10

11

12

13

14 classpath:config/hibernate.cfg.xml 15

16

17

18

19

20

21

22

23

24

25

26

27

28

29 30

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详解以及注解说明

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。 我们可以使用 来方便地、一次性的声明者四个BeanPostProcessor。 1.Autowired... 提供对Spring 特有的Autowired 和Qualifier 注释。

SpringMVC配置的基本步骤

Springmvc框架配置步骤 小弟是个新手,有不对的地方请tell me,一起研究探讨。谢谢。 1062140832@https://www.sodocs.net/doc/1f4200160.html, 配置springmvc框架其实不是很难,要现有一个总体的认识,确定要分几步,每一步主要是干什么,不要太盲目。 以为web.xml是项目的入口,所以所有的配置文件,都必须引入到wem.xml中,不然,配置了等于没用。所以,要先从入口入手。 配置web.xml 1、首先引入springmvc-servlet.xml文件 springMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/mvc/springmvc-servlet.xml 1 2、将spring加载到web.xml中 org.springframework.web.context.ContextLoaderListener 3、配置上下文路径 contextConfigLocation /WEB-INF/spring/spring.xml,/WEB-INF/spring/spring-*.xml 说明:如果有很多的关于spring的配置文件,建议分开写,比如事务一个文件(spring-transaction.xml),springmvc-hibernate.xml一个配置文件,这样方便读写。

spring的@Transactional注解详细用法

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

SpringMVC深入总结

一、前言: 大家好,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注解详解

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容器注册以下4个BeanPostProcessor: AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor 2.使用Bean定义注解 如果要使注解工作,则必须配置component-scan,实际上不需要再配置annotation-config。base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。还允许定义过滤器将基包下的某些类纳入或排除。 3.Spring支持以下4种类型的过滤方式: 1)注解org.example.SomeAnnotation将所有使用SomeAnnotation注解的类过滤出来 2)类名指定org.example.SomeClass过滤指定的类 3)正则表达式com.kedacom.spring.annotation.web..*通过正则表达式过滤一些类 4)AspectJ表达式org.example..*Service+通过AspectJ表达式过滤一些类 二、注解介绍 注解种类: 1)@Controller 2)@Service 3)@Autowired 4)@RequestMapping 5)@RequestParam 6)@ModelAttribute

2.Spring-mvc框架结构及执行流程

Spring mvc架构及执行流程一、请求处理流程图 二、执行流程说明 三、组件说明

说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc 的三大组件。 需要用户编写的组件有handler、view 四、Spring MVC配置 1、组件扫描器:使用组件扫描器省去在spring容器配置每个controller类,使用 自动扫描标记@controller的配置如下:

2、RequestMappingHandlerMapping:注解处理器映射器,对类中标记@RequestMapping 的方法进行映射,根据RequestMapping定义的url匹配RequestMapping标记的方 法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装 注解描述: @RequestMapping:定义请求url到处理器功能方法的映射 3、RequestMappingHandlerAdapter:注解式处理器适配器,对标记@RequestMapping 的方法进行适配。 从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用 4、:spring mvc 使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在spring-mvc.xml 配置文件总使用替代注解处理器和适配器的配置。 5、视图解析器 InternalResourceViewResolver:支持JSP视图解析 viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl 的相关jar 包。此属性可以不设置,默认为JstlView。 prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:

Java Spring各种依赖注入注解的区别

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:

spring MVC配置详解

牧涛 --<-<-<@态度决定一切→_→。。。 ?博客园 ?首页 ?新闻 ?新随笔 ?联系 ?管理 ?订阅 随笔- 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文件中声明的。 spring org.springframework.web.servlet.DispatcherServlet< /servlet-class>