SpringMVC注解及实现页面跳转详解
Spring MVC
第一讲:SpringMVC 页面跳转实例,通过请求访问start.jsp页面
1.1 加包
1.2 web.xml
abc
1.3 建springMVC-servlet.xml(注:spring默认要求建立在WEB-INF目录下,并且名称为servlet-name_servlet.xml
xmlns:xsi="https://www.360docs.net/doc/f413131056.html,/2001/XMLSchema-instance" xmlns:p="https://www.360docs.net/doc/f413131056.html,/schema/p" xmlns:context="https://www.360docs.net/doc/f413131056.html,/schema/context" xsi:schemaLocation=" https://www.360docs.net/doc/f413131056.html,/schema/beans https://www.360docs.net/doc/f413131056.html,/schema/beans/spring-beans-3.0.xsd https://www.360docs.net/doc/f413131056.html,/schema/context https://www.360docs.net/doc/f413131056.html,/schema/context/spring-context-3.0.xsd"> class="org.springframework.web.servlet.view.InternalResourceViewResolver">
1.4 StartController.java
package https://www.360docs.net/doc/f413131056.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
2.2 将WEB-INF下面的springMVC-servlet.xml 移动到https://www.360docs.net/doc/f413131056.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.360docs.net/doc/f413131056.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("start2 method 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.360docs.net/doc/f413131056.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("start2 method invoked...");
return "start";
}
}
step2:访问:
http://localhost:8080/springMVC_003/test/start.do?name=zhangsan&age=45
b.restfull风格参数传递
step1:修改StartController.java
package https://www.360docs.net/doc/f413131056.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=RequestMethod.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("start2 method 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.360docs.net/doc/f413131056.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.360docs.net/doc/f413131056.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.360docs.net/doc/f413131056.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.360docs.net/doc/f413131056.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。 我们可以使用
SpringMVC配置的基本步骤
Springmvc框架配置步骤 小弟是个新手,有不对的地方请tell me,一起研究探讨。谢谢。 1062140832@https://www.360docs.net/doc/f413131056.html, 配置springmvc框架其实不是很难,要现有一个总体的认识,确定要分几步,每一步主要是干什么,不要太盲目。 以为web.xml是项目的入口,所以所有的配置文件,都必须引入到wem.xml中,不然,配置了等于没用。所以,要先从入口入手。 配置web.xml 1、首先引入springmvc-servlet.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.360docs.net/doc/f413131056.html,/download(本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章https://www.360docs.net/doc/f413131056.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.使用简化配置
2.Spring-mvc框架结构及执行流程
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、
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文件中声明的。