Spring MVC学习指南
SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
spring MVC原理及配置

spring MVC原理及配置springmvc原理及配置springmvc原理及配置1.springmvc详述:springmvc就是spring提供更多的一个强悍而有效率的web框架。
借助注释,springmvc提供更多了几乎就是pojo的研发模式,使控制器的研发和测试更加直观。
这些控制器通常不轻易处置命令,而是将其委托给spring上下文中的其他bean,通过spring的倚赖转化成功能,这些bean被转化成至控制器中。
springmvc主要由dispatcherservlet、处理器映射、处理器(控制器)、视图解析器、视图组成。
他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析器:选择结果应该如何渲染通过以上两点,springmvc确保了如何挑选掌控处置命令和如何挑选视图展现出输入之间的松耦合。
2.springmvc运行原理这里写图片描述(2)找寻处理器:由dispatcherservlet控制器查阅一个或多个handlermapping,找出处置命令的controller。
(3)调用处理器:dispatcherservlet将请求提交到controller。
(4)(5)调用业务处置和回到结果:controller调用业务逻辑处置后,回到modelandview。
3.springmvc接口解释(1)dispatcherservlet接口:spring提供的前端控制器,所有的请求都有经过它来统一分发。
在dispatcherservlet将请求分发给springcontroller 之前,需要借助于spring提供的handlermapping定位到具体的controller。
(2)handlermappingUSB:能够完成客户请求到controller映射。
(3)controller接口:须要为mammalian用户处置上述命令,因此同时实现controllerUSB时,必须确保线程安全并且可以器重。
笔记-传智播客springMVC公开课

SpringMVC公开课笔记高浩阳2014-11-29目录1SpringMVC框架 (2)1.1SpringMVC框架 (2)1.2SpringMVC组件总结 (2)2开发SpringMVC的第一个程序 (3)2.1准备环境 (3)2.2开发SpringMVC的第一个程序 (3)2.2.1创建Java Web工程 (3)2.2.2向工程中填充SpringMVC的jar包 (3)2.2.3配置前端控制器 (4)2.2.4创建一个配置文件springmvc.xml(名称不固定) (7)2.2.5配置处理器映射器HandlerMapping (8)2.2.6配置处理器适配器HandlerAdapter (9)2.2.7配置视图解析器ViewResolver (12)2.2.8编写Handler (13)2.2.9在springmvc.xml中配置helloAction.java (16)2.2.10将工程部署到tomcat,启动tomcat (17)2.3小结: (18)3注解开发第一个例子 (19)3.1新建工程SpringMVCTest02 (19)3.2在springmvc.xml中配置 (20)3.3开发action (21)3.4配置action (22)3.5部署工程,运行Tomcat (24)4注解开发学生信息管理功能 (24)5SpringMVC特点 (33)6和Jquery easyui 整合完成数据列表 (33)1SpringMVC框架1.1SpringMVC框架1. 用户发起请求request(比如请求链接叫http://www.xxx/user.action)注册用户信息。
2. SpringMVC通过DispatcherServlet接受请求。
DispatcherServlet是一个前端控制器(想到struts2在web.xml配置一个filter前端控制器)相当于控制器Controller3. DispatcherServlet调用HandlerMapping(处理器映射器)根据user.action找到处理器(Handler)HandlerMapping负责分局user.action这个链接找到Handler,根据xml配置或注解配置找到Handler4. HandlerMapping将找到的Handler给DispatcherServlet前端控制器5. DispatcherServlet前端控制器调用HandlerAdapter(处理器适配器)去执行Handler处理器适配器负责执行Handler6. Handler将处理结果返回给HandlerAdapter(处理器适配器)处理结果就是ModelAndView(封装了模型数据和视图)7. DispatcherServlet调用视图解析器ViewResolver去解析视图8. 将View给用户相应1.2SpringMVC组件总结1. DispatcherServlet前端控制器(不需要程序员写)负责框架调度,相当于中央处理器基本controller控制器功能:接收用户request请求和给用户response响应2. HandlerMapping(处理器映射器)(不需要程序员写)负责根据action的连接找到Handler处理器(理解成写的action)3. HandlerAdapter(处理器适配器)(不需要程序员写)负责去执行Handler4. **Handler处理器需要程序员写理解成struts里边的action,需要程序员写action类,这个action类符合适配器的执行规则。
SpringMVC中的Model对象用法说明

SpringMVC中的Model对象⽤法说明模型对象的作⽤主要是保存数据,可以借助它们将数据带到前端。
常⽤的模型对象有以下⼏个:ModelAndView(顾名思义,模型和视图,既可以携带数据信息,也可以携带视图信息,常规⽤法如下)/*** ModelAndView 绑定数据到视图(ModelMap⽤于传递数据 View对象⽤于跳转)* @return* @throws Exception*/@RequestMapping(value="/case2")public ModelAndView case2() throws Exception {ModelAndView mav = new ModelAndView();mav.setViewName("/demo03/model.jsp");mav.addObject("sex", "boy");return mav;}Map,和modelAndView原理⼀样,同样是将数据⼀个⼀个放在requestScope中,前端取数据同样也是${模型数据} /*** ⽬标⽅法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数.* @param map* @return*/@RequestMapping("/case")public String case1(Map map) throws Exception{map.put("sex", "获取成功!!");return "/demo03/model.jsp";}@SessionAttributes(相当于创建session对象,往session对象⾥放数据,这⾥⽤⼀个注解完美解决)基本格式如下:/*** @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(实际上使⽤的是 value 属性值),* 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使⽤的是 types 属性值)* 注意: 该注解只能放在类的上⾯. ⽽不能修饰⽅法当于在map中和session中各存放了⼀个实体类,⼀个String类的字符串*/@SessionAttributes("user")@Controllerpublic class SessionController {@ModelAttribute("user")public User getUser(){User user = new User();return user;}/*** http://localhost:8080/s/s1?id=1* 请求转发 forward: 不需要任何处理* 请求重定向 redirect: 使⽤SessionAttribute⽅式⽤于在重定向中传⾄将值存储在session中【⽤完记住清除】* @return* @throws Exception*/@RequestMapping(value="/s1",method=RequestMethod.GET)public String case1(@ModelAttribute("user") User user) throws Exception{return "redirect:/s2";}@RequestMapping(value="/s2",method=RequestMethod.GET)public String case2(Map map,HttpServletResponse res,SessionStatus sessionStatus) throws Exception{User user=(User)map.get("user");res.getWriter().println(user.getId());sessionStatus.setComplete();return null;}}SpringMVC中的Model和ModelAndView的区别1.主要区别Model是每次请求中都存在的默认参数,利⽤其addAttribute()⽅法即可将服务器的值传递到jsp页⾯中;ModelAndView包含model和view两部分,使⽤时需要⾃⼰实例化,利⽤ModelMap⽤来传值,也可以设置view的名称2.例⼦1)使⽤Model传值@RequestMapping(value="/list-books")private String getAllBooks(Model model){logger.error("/list-books");List<Book> books= bookService.getAllBooks();model.addAttribute("books", books);return "BookList";}在jsp页⾯利${books}即可取出其中的值2)使⽤ModelAndView传递值有两种⽅法,不同⽅法在jsp页⾯的取值⽅式不同,同时设置了view的名称public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex) {LibraryException le=null;if(ex instanceof LibraryException){le=(LibraryException)ex;}else{le=new LibraryException("系统未知异常!");}ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("exception",le.getMessage());modelAndView.getModel().put("exception",le.getMessage());modelAndView.setViewName("error");return modelAndView;}jsp中${requestScope.exception1}可以取出exception1的值;jsp中${exception2}可以取出exception2的值以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
什么是SpringMVC?

什么是SpringMVC?⼀、什么是SpringMVC?1.SpringMVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。
2.SpringMVC = Spring +MVCspring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。
Spring框架图:从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。
附:基于请求驱动指的就是使⽤请求-响应模型。
从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。
SpringMVC是spring扩展出的⼀个应⽤于web端的框架。
在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。
那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。
这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。
同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。
springMVC例子

同Struts 2框架一样,Spring也可以给Web开发者提供一个MVC框架。
虽然Web框架只是Spring的一个模块,但是它却应用的非常广泛。
本章结合实例分析Spring Web框架的使用方法、各个组件的作用通过本章的学习,相信读者会对如何使用Spring进行MVC开发有很深入的了解。
第一个Spring MVC例子【示例】该示例先讲解如何在Eclipse环境下实现Spring MVC框架,然后讲解如何在Ant环境下实现。
在Eclipse中创建一个工程SpringMVC,然后按照下面的步骤添加文件。
1配置web.xml文件在Spring MVC的WEB-INF目录下创建web.xml。
在使用Struts 2时,需要在web.xml文件配置FilterDispatcher,在使用Spring的MVC框架时,也需要配置web.xml文件,代码如下。
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><!--配置Sring MVC的核心控制器DispatcherServlet --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><!--为DispatcherServlet建立映射--><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>上面的代码对DispatcherServlet类进行配置,所有后缀名为.do的请求都会被DispatcherServlet处理。
springMVC中jackson的使用(包含JsonFormat时间格式)
springMVC中jackson的使⽤(包含JsonFormat时间格式)前台使⽤ajax,后台 springMVCJava下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说⽐较⾼效,在项⽬中主要使⽤Jackson进⾏JSON和Java对象转换,下⾯给出⼀些Jackson的JSON操作⽅法。
jackson库作⽤:(1)在前台传的json格式的字符串格式数据,后台可以⽤相关的类,Map,List来接收(如果不⽤jackson库,但后台却使⽤了除string类型之外的类型来接收json格式数据,则后台报错 Content type 'application/json' not supported);(2)如果使⽤了jackson库,后台返回给前台的数据类型可以是Map,相关类,List等,JACKSON库会⾃动将类型转换为json字符串给前台,如果不使⽤,则会报 convert 错⼀、准备⼯作⾸先去官⽹下载Jackson⼯具包,下载地址/JacksonDownload。
Jackson有1.x系列和2.x系列,截⽌⽬前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载:jackson-core-2.2.3.jar(核⼼jar包,)jackson-annotations-2.2.3.jar(该包提供Json注解⽀持,)jackson-databind-2.2.3.jar()[java]1. //JSON序列化和反序列化使⽤的User类2. import java.util.Date;3.4. public class User {5. private String name;6. private Integer age;7. private Date birthday;8. private String email;9.10. public String getName() {11. return name;12. }13. public void setName(String name) {14. = name;15. }16.17. public Integer getAge() {18. return age;19. }20. public void setAge(Integer age) {21. this.age = age;22. }23.24. public Date getBirthday() {25. return birthday;26. }27. public void setBirthday(Date birthday) {28. this.birthday = birthday;29. }30.31. public String getEmail() {32. return email;33. }34. public void setEmail(String email) {35. this.email = email;36. }37. }⼆、JAVA对象转JSON[JSON序列化][java]1. import java.io.IOException;2. import java.text.ParseException;3. import java.text.SimpleDateFormat;4.5. import com.fasterxml.jackson.databind.ObjectMapper;6.7. public class JacksonDemo {8. public static void main(String[] args) throws ParseException, IOException {9. User user = new User();10. user.setName("⼩民");11. user.setEmail("xiaomin@");12. user.setAge(20);13.14. SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");15. user.setBirthday(dateformat.parse("1996-10-01"));16.17. /**18. * ObjectMapper是JSON操作的核⼼,Jackson的所有JSON操作都是在ObjectMapper中实现。
SpringMVC--@RequestMapping注解以及SpringMVC获取请求参数
SpringMVC--@RequestMapping注解以及SpringMVC获取请求参数三、@RequestMapping注解1、@RequestMapping注解的功能@RequestMapping注解的作⽤就是将请求和处理请求的控制器⽅法关联起来,建⽴映射关系。
SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器⽅法来处理这个请求。
注意:在使⽤@RequestMapping注解的时候,要保证在所有的控制器中所能匹配到的请求地址是唯⼀的;2、@RequestMapping注解的位置@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息注意:如果类和⽅法上都有路径信息,那么要先访问初始信息在访问具体信息,HTML路径要两个都写(⼀般⽤于不同模块同名请求路径的处理)3、@RequestMapping注解的value属性@RequestMapping注解的value属性通过请求的请求地址匹配请求映射@RequestMapping注解的value属性是⼀个字符串类型的数组,表⽰该请求映射能够匹配多个请求地址所对应的请求@RequestMapping注解的value属性必须设置,⾄少通过请求地址匹配请求映射4、@RequestMapping注解的method属性@RequestMapping注解的method属性通过请求的请求⽅式(get或post)匹配请求映射@RequestMapping注解的method属性是⼀个RequestMethod类型的数组,表⽰该请求映射能够匹配多种请求⽅式的请求若当前请求的请求地址满⾜请求映射的value属性,但是请求⽅式不满⾜method属性,则浏览器报错 405:Request method 'POST' not supported,设置多个参数不必同时满⾜!注意:1、对于处理指定请求⽅式的控制器⽅法,SpringMVC中提供了@RequestMapping的派⽣注解处理get请求的映射-->@GetMapping处理post请求的映射-->@PostMapping处理put请求的映射-->@PutMapping处理delete请求的映射-->@DeleteMapping可以直接使⽤以上注解代替method参数!2、常⽤的请求⽅式有get,post,put,delete但是⽬前浏览器只⽀持get和post,若在form表单提交时,为method设置了其他请求⽅式的字符串(put或delete),则按照默认的请求⽅式get处理若要发送put和delete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter,在 RESTful部分会讲到,设置多个参数不必同时满⾜!5、@RequestMapping注解的params属性(了解)@RequestMapping注解的params属性通过请求的请求参数匹配请求映射@RequestMapping注解的params属性是⼀个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系"param":要求请求映射所匹配的请求必须携带param请求参数"!param":要求请求映射所匹配的请求必须不能携带param请求参数"param=value":要求请求映射所匹配的请求必须携带param请求参数且param=value"param!=value":要求请求映射所匹配的请求必须携带param请求参数但是param!=value注:若当前请求满⾜@RequestMapping注解的value和method属性,但是不满⾜params属性,此时页⾯回报错400:Parameter conditions "username, password!=123456" not met for actual request parameters: username={admin}, password={123456},设置多个参数必须同时满⾜!6、@RequestMapping注解的headers属性(了解)@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射@RequestMapping注解的headers属性是⼀个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系"header":要求请求映射所匹配的请求必须携带header请求头信息"!header":要求请求映射所匹配的请求必须不能携带header请求头信息"header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value"header!=value":要求请求映射所匹配的请求必须携带header请求头信息且header!=value若当前请求满⾜@RequestMapping注解的value和method属性,但是不满⾜headers属性,此时页⾯显⽰404错误,即资源未找到,设置多个参数必须同时满⾜!7、SpringMVC⽀持ant风格的路径(模糊匹配):表⽰任意的单个字符(/ ? 不写都不可以)*:表⽰任意的0个或多个字符**:表⽰任意的⼀层或多层⽬录注意:在使⽤**时,只能使⽤/**/xxx的⽅式8、SpringMVC⽀持路径中的占位符(重点)原始⽅式:/deleteUser?id=1rest⽅式:/deleteUser/1SpringMVC路径中的占位符常⽤于RESTful风格中,当请求路径中将某些数据通过路径的⽅式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表⽰传输的数据,在通过@PathVariable注解,将占位符所表⽰的数据赋值给控制器⽅法的形参四、SpringMVC获取请求参数1、通过ServletAPI获取将HttpServletRequest作为控制器⽅法的形参,此时HttpServletRequest类型的参数表⽰封装了当前请求的请求报⽂的对象2、通过控制器⽅法的形参获取请求参数在控制器⽅法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在 DispatcherServlet中就会将请求参数赋值给相应的形参注:若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器⽅法的形参中设置字符串、数组或者字符串类型的形参接收此请求参数若使⽤字符串数组类型的形参,此参数的数组中包含了每⼀个数据若使⽤字符串类型的形参,此参数的值为每个数据中间使⽤逗号拼接的结果3、@RequestParam@RequestParam是将请求参数和控制器⽅法的形参创建映射关系@RequestParam注解⼀共有三个属性:value:指定为形参赋值的请求参数的参数名required:设置是否必须传输此请求参数,默认值为true若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置 defaultValue属性,则页⾯报错400:Required String parameter 'xxx' is not present;若设置为 false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为 nulldefaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使⽤默认值为形参赋值4、@RequestHeader@RequestHeader是将请求头信息和控制器⽅法的形参创建映射关系@RequestHeader注解⼀共有三个属性:value、required、defaultValue,⽤法同@RequestParam5、@CookieValue@CookieValue是将cookie数据和控制器⽅法的形参创建映射关系@CookieValue注解⼀共有三个属性:value、required、defaultValue,⽤法同@RequestParam6、通过POJO获取请求参数可以在控制器⽅法的形参位置设置⼀个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名⼀致,那么请求参数就会为此属性赋值 7、解决获取请求参数的乱码问题解决获取请求参数的乱码问题,可以使⽤SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进⾏注册注: SpringMVC中处理编码的过滤器⼀定要配置到其他过滤器之前,否则⽆效。
springMVC配置(XML配置详解)
springMVC配置(XML配置详解)原⽂出⾃:web.xml配置:servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><description>加载/WEB-INF/spring-mvc/⽬录下的所有XML作为Spring MVC的配置⽂件</description><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc/*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>*.htm</url-pattern></servlet-mapping>这样,所有的.htm的请求,都会被DispatcherServlet处理;初始化 DispatcherServlet 时,该框架在 web 应⽤程序WEB-INF ⽬录中寻找⼀个名为[servlet-名称]-servlet.xml的⽂件,并在那⾥定义相关的Beans,重写在全局中定义的任何Beans,像上⾯的web.xml中的代码,对应的是dispatcher-servlet.xml;当然也可以使⽤<init-param>元素,⼿动指定配置⽂件的路径;dispatcher-servlet.xml 配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:mvc="/schema/mvc"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd/schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd/schema/mvc/schema/mvc/spring-mvc-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><!--使Spring⽀持⾃动检测组件,如注解的Controller--><context:component-scan base-package="com.minx.crm.web.controller"/><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"p:prefix="/WEB-INF/jsp/"p:suffix=".jsp" /></beans>第⼀个Controller:package com.minx.crm.web.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class IndexController {@RequestMapping("/index")public String index() {return "index";}}@Controller注解标识⼀个控制器,@RequestMapping注解标记⼀个访问的路径(/index.htm),return "index"标记返回视图(index.jsp);注:如果@RequestMapping注解在类级别上,则表⽰⼀相对路径,在⽅法级别上,则标记访问的路径;从@RequestMapping注解标记的访问路径中获取参数:Spring MVC ⽀持RESTful风格的URL参数,如:@Controllerpublic class IndexController {@RequestMapping("/index/{username}")public String index(@PathVariable("username") String username) {System.out.print(username);return "index";}}在@RequestMapping中定义访问页⾯的URL模版,使⽤{}传⼊页⾯参数,使⽤@PathVariable 获取传⼊参数,即可通过地址:http://localhost:8080/crm/index/tanqimin.htm 访问;根据不同的Web请求⽅法,映射到不同的处理⽅法:使⽤登陆页⾯作⽰例,定义两个⽅法分辨对使⽤GET请求和使⽤POST请求访问login.htm时的响应。
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring MVC 3.1环境的搭建 1. 所需jar包 · commons-logging-1.1.1.jar · jstl.jar · org.springframework.asm-3.1.0.M2.jar · org.springframework.beans-3.1.0.M2.jar · org.springframework.context-3.1.0.M2.jar · org.springframework.core-3.1.0.M2.jar · org.springframework.expression-3.1.0.M2.jar · org.springframework.web.servlet-3.1.0.M2.jar · org.springframework.web-3.1.0.M2.jar
第一个Spring 3 MVC的HelloWorld程序 创建HelloWorldController控制器 package com.jhlishero.spring3.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;
@Controller public class HelloWorldController {
@RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.1!"; return new ModelAndView("hello", "message1", message); } }
创建/WEB-INF/pages/hello.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> "http://www.w3.org/TR/html4/loose.dtd"> Spinrg MVC 3.1 -- Hello, World ${message1 }
创建/index.jsp文件 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> Spring MVC 3.1 --- Index page Say Hello
在web.xml配置上Spring MVC
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"> Spring3MVC
index.jsp
spring3 org.springframework.web.servlet.DispatcherServlet 1 spring3 *.html 一旦DispatcherServlet初始化, 将在WEB-INF目录下搜索【servlet-name】-servlet.xml, 以上配置将要搜索spring3-servlet.xml
配置spring3-servlet.xml文件 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
class="org.springframework.web.servlet.view.UrlBasedViewResolver"> />
请求http://localhost:8080/FirstSpringMVC/地址进行测试
Spring 3 MVC处理提交表单 首先在第一个HelloWorld程序的基础上, 进行进一步的开发。 在index .jsp页面中增加如下代码 contacts 新建/WEB-INF/pages/contact.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> "http://www.w3.org/TR/html4/loose.dtd"> Spring 3 MVC Contract Manager First Name Last Name Email Telephone
增加Form和Controller
增加Form package com.jhlishero.spring3.form; public class Contact { private String firstname; private String lastname; private String email; private String telephone;