当前位置:文档之家› SpringMVC注解及实现页面跳转详解

SpringMVC注解及实现页面跳转详解

SpringMVC注解及实现页面跳转详解
SpringMVC注解及实现页面跳转详解

Spring MVC

第一讲:SpringMVC页面跳转实例,通过请求访问start.jsp页面

1.1加包

1.2web.xml

springMVC

org.springframework.web.servlet.Dispatche rServlet

1

springMVC

*.do

abc

1.3建springMVC-servlet.xml(注:spring默认要求建立在WEB-INF目录下,并且名称为servlet-name_servlet.xml

xmlns:xsi="https://www.doczj.com/doc/7c16522097.html,/2001/XMLSchema-instance" xmlns:p="https://www.doczj.com/doc/7c16522097.html,/schema/p"

xmlns:context="https://www.doczj.com/doc/7c16522097.html,/schema/conte xt"

xsi:schemaLocation="

https://www.doczj.com/doc/7c16522097.html,/schema/beans

https://www.doczj.com/doc/7c16522097.html,/schema/beans/spring-beans-3.0.x sd

https://www.doczj.com/doc/7c16522097.html,/schema/context

https://www.doczj.com/doc/7c16522097.html,/schema/context/spring-context-3.

0.xsd">

base-package="https://www.doczj.com/doc/7c16522097.html,.controllers"/>

class="org.springframework.web.servlet.view.InternalResourceViewR esolver">

1.4StartController.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class StartController{

@RequestMapping(value="/start")

public String start(){

System.out.println("start method invoked...");

return"start";

}

}

1.5新建WEB-INF/page/start.jsp

1.6访问:http://localhost:8080/springMVC_001/start.do

总结:本例子搭建一个简单的spingmvc实例,通过本例学习springMVC最简单的流程及搭建元素。

第二讲灵活指定springmvc映射文件及路径

更多情况下,对于第一讲中的springMVC-servlet.xml文件,我们并不想去放在WEB-INF,或者说我们可能在一个项目中并不是只有这一个文件,所以本节我们来讲述如何灵活配置此文件及文件名。

2.1修改web.xml

springMVC

org.springframework.web.servlet.Dispatche

rServlet

contextConfigLocation

classpath*:/com/wdl/cn/config/mvc/*.xml

1

springMVC

*.do

2.2将WEB-INF下面的springMVC-servlet.xml移动到

https://www.doczj.com/doc/7c16522097.html,.config.mvc包下并将其修改名称为springMVC-first.xml

2.3测试原来的路径:http://localhost:8080/springMVC_002/start.do

总结:本讲主要学习了如何灵活配置springMVC配置文件。下节将重点讲述

@RequestMapping的使用。

第三讲springMVC_003@RequestMapping的使用

3.1@RequestMapping使用位置

a.使用于方法,此方法则可以被请求访问;

b.使用于类,则可以将请求分(又叫分路径,分模块)包处理

3.2将controller类上加@RequestMapping,修改StartController.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping(value="/test")

public class StartController{

@RequestMapping(value="/start")

public String start(){

System.out.println("start method invoked...");

return"start";

}

}

3.3访问:http://localhost:8080/springMVC_003/test/start.do,由此可见,可以通过在类上加@RequestMapping将请求分路径。

3.4@RequestMapping参数详解

a.value表示访问的路径

b.method表示请求的方式GET|POST

step1:修改StartController.java

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@Controller

@RequestMapping(value="/test")

public class StartController{

@RequestMapping(value="/start",method=RequestMethod.GET)

public String start(){

System.out.println("start method invoked...");

return"start";

}

@RequestMapping(value="/start",method=RequestMethod.POST)

public String start2(){

System.out.println("start2method invoked...");

return"start";

}

}

step2:修改start.jsp模拟POST请求

3.5访问http://localhost:8080/springMVC_003/test/start.do,接着转到start.jsp页面,接着点击页面的中按钮,发送POST请求,则可以看出不同的请求方式可以调用不同的方法。

3.6参数传递(常用参数传递,restful风格参数传递)

a.httpservletreqeust方式参数传递

step1:修改StartController.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@Controller

@RequestMapping(value="/test")

public class StartController{

@RequestMapping(value="/start",method=RequestMethod.GET)

public String start(HttpServletRequest request){

System.out.println("start method invoked...");

String name=request.getParameter("name");

int age=

Integer.parseInt(request.getParameter("age"));

System.out.println("name="+name+"age="+age);

return"start";

}

@RequestMapping(value="/start",method=RequestMethod.POST)

public String start2(){

System.out.println("start2method invoked...");

return"start";

}

}

step2:访问:

http://localhost:8080/springMVC_003/test/start.do?name=zhangsan&a ge=45

b.restfull风格参数传递

step1:修改StartController.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@Controller

@RequestMapping(value="/test")

public class StartController{

@RequestMapping(value="/start/{name}/{age}",method=Request

Method.GET)

public String start(@PathVariable("name")String name,@PathVariable("age")int age){

System.out.println("start method invoked...");

System.out.println("name="+name+"age="+age);

return"start";

}

@RequestMapping(value="/start",method=RequestMethod.POST)

public String start2(){

System.out.println("start2method invoked...");

return"start";

}

}

step2:访问时,将参数值加入请求路径

http://localhost:8080/springMVC_003/test/start/zhangsan/45.do

总结:本讲主要讲述请求参数传递,主要掌握HttpServletRequest方式与restfull 风格参数传递,下讲主要讲述form表单提交

第四讲form表单提交

使用struts2后,我们习惯将form表单的数据封装成一个对象,这也是面向对象编程的一个思维,本节讲述form表单提交。

具体代码见UserController.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.servlet.http.HttpSession;

import

org.springframework.beans.propertyeditors.CustomDateEditor;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.InitBinder;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import https://www.doczj.com/doc/7c16522097.html,er;

@Controller

@RequestMapping(value="/form")

public class UserController{

@RequestMapping(value="/add",method=RequestMethod.GET)

public String toUserAddPage(){

System.out.println("toUserAddPage method invoked...");

return"useradd";

}

@RequestMapping(value="/add",method=RequestMethod.POST)

public ModelAndView addUser(HttpSession session,User user){ System.out.println("addUser method invoked...");

System.out.println(user);

ModelAndView mav=new ModelAndView();

session.setAttribute("abc",user);

mav.setViewName("redirect:/form/add.do");

mav.addObject("abc",user);

//return"useradd";

return mav;

}

@InitBinder

public void initBinder(WebDataBinder binder){

binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),false));

}

}

注:addUser方法中参数User则是接收请求发过来的参数;initBinder方法则是用来绑定用户提交的数据,前台提交过来的日期,在这里后面并不知情,则由这个方法来处理。

总结:本讲主要讲述如何来提交表单数据,并将其封装成一个对象。

第五节一个Controller处理多个请求

很多情况下,我们都想把有关联的请求放在一个controller中,比如,对于一个用户的增删改查,都可以放在一个controller类中。对于springMVC注解的方式有两种方式可以实现。

1.一个controller类中每个处理请求的方法的@requestMapping的param中可以带参数,比如:@RequestMapping(param="method=method1"),在类级别的

@RequestMapping上面指定请求路径。

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

@RequestMapping(value="/manyRequest")

public class ReceiveManyRequestController{

@RequestMapping(params="method=method1")

public ModelAndView methodOne(){

System.out.println("method methodOne invoked...");

ModelAndView mav=new

ModelAndView("ReceiveManyRequest");

mav.addObject("msg","请求第一个方法");

return mav;

}

@RequestMapping(params="method=method2")

public ModelAndView methodTwo(){

System.out.println("method methodTwo invoked...");

ModelAndView mav=new

ModelAndView("ReceiveManyRequest");

mav.addObject("msg","请求第二个方法");

return mav;

}

}

2.每个接收请求的方法的@RequestMapping的value中指定请求路径,看ReceveManyRequestController2.java

package https://www.doczj.com/doc/7c16522097.html,.controllers;

import org.springframework.stereotype.Controller;

import

org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

@RequestMapping(value="/manyRequest")

public class ReceiveManyRequestController2{

@RequestMapping(value="/request1")

public ModelAndView methodOne(){

System.out.println("method methodOne invoked...");

ModelAndView mav=new

ModelAndView("ReceiveManyRequest");

mav.addObject("msg","请求第一个方法");

return mav;

}

@RequestMapping(value="/request2")

public ModelAndView methodTwo(){

System.out.println("method methodTwo invoked...");

ModelAndView mav=new

ModelAndView("ReceiveManyRequest");

mav.addObject("msg","请求第二个方法");

return mav;

}

}

总结:本讲讲述如何让一个Controller接收多个请求的两种处理方式

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.doczj.com/doc/7c16522097.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.doczj.com/doc/7c16522097.html,/download(本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章https://www.doczj.com/doc/7c16522097.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>