LOGO SPRING MVC 3.0实战指南.ppt
《LOGO SPRING MVC 3.0实战指南.ppt》由会员分享,可在线阅读,更多相关《LOGO SPRING MVC 3.0实战指南.ppt(74页珍藏版)》请在三一办公上搜索。
1、Spring MVC 3.0实战指南,参考Spring 3.x企业应用开发实战,目录,Spring MVC框架简介,1,Spring MVC 3.0新特性,支持REST风格的URL添加更多注解,可完全注解驱动引入HTTP输入输出转换器(HttpMessageConverter)和数据转换、格式化、验证框架无缝集成对静态资源处理提供特殊支持更加灵活的控制器方法签名,可完全独立于Servlet API,参考Spring 3.x企业应用开发实战,Spring MVC框架结构,DispatcherServlet,HandlerMapping,HandlerAdapter,Handler,View(JS
2、P/XML/PDF,.),2,3,4,ViewResolver,6,8,1,参考Spring 3.x企业应用开发实战,Spring MVC框架结构,package com.baobaotao.web;.Controller 将UserController变成一个HandlerRequestMapping(“/user”)指定控制器映射的URLpublic class UserController RequestMapping(value=“/register”)处理方法对应的URL,相对于 处的URLpublic String register()return“user/register”;返
3、回逻辑视图名,参考Spring 3.x企业应用开发实战,框架的实现者,DispatcherServlet,DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter,UserController,register.jsp,2,3,4,InternalResourceViewResolver,6,8,1,参考Spring 3.x企业应用开发实战,目录,Spring MVC框架简介,1,HTTP请求映射原理,HTTP请求报文,Handler处理方法,SpringMVC框架,WEB容器,参考Spring 3.x企业应用开发实战,Spr
4、ing MVC进行映射的依据,参考Spring 3.x企业应用开发实战,通过URL限定:URL表达式,RequestMapping不但支持标准的URL,还支持Ant风格(即?、*和*的字符,参见3.3.2节的内容)的和带xxx占位符的URL。以下URL都是合法的:/user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL。/user/*/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL。/user/createUser?匹配/user/createUse
5、raa、/user/createUserbb等URL。/user/userId 匹配user/123、user/abc等URL。/user/*/userId 匹配user/aaa/bbb/123、user/aaa/456等URL。company/companyId/user/userId/detail 匹配company/123/user/456/detail等的URL。,参考Spring 3.x企业应用开发实战,通过URL限定:绑定xxx中的值,RequestMapping(/userId)public ModelAndView showDetail(PathVariable(userId)
6、String userId)ModelAndView mav=new ModelAndView();mav.setViewName(user/showDetail);mav.addObject(user,userService.getUserById(userId);return mav;,ControllerRequestMapping(/owners/ownerId)public class RelativePathUriTemplateController RequestMapping(/pets/petId)public void findPet(PathVariable String
7、 ownerId,PathVariable String petId,Model model),URL中的xxx占位符可以通过PathVariable(xxx)绑定到操作方法的入参中。,如果PathVariable不指定参数名,只有在编译时打开debug开关(javac-debug=no)时才可行!(不建议),参考Spring 3.x企业应用开发实战,通过请求方法限定:请求方法,请求方法,在HTTP中这被叫做动词(verb),除了两个大家熟知的(GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD和OPTIONS。这些方法的含义连同行为许诺都一起定义在HTTP规范之中。一
8、般浏览器只支持GET和POST方法。,参考Spring 3.x企业应用开发实战,通过请求方法限定:代码示例,示例1:RequestMapping(value=“/delete”)public String test1(RequestParam(userId)String userId)return user/test1;所有URL为/delete的请求由test1处理(任何请求方法)示例2:RequestMapping(value=/delete,method=RequestMethod.POST)public String test1(RequestParam(userId)String u
9、serId)return user/test1;所有URL为/delete 且请求方法为POST 的请求由test1处理,参考Spring 3.x企业应用开发实战,通过请求方法限定:模拟请求方法,通过在web.xml中配置一个org.springframework.web.filter.HiddenHttpMethodFilter通过POST请求的_method参数指定请求方法,HiddenHttpMethodFilter动态更改HTTP头信息。,HiddenHttpMethodFilter,POST HTTP请求,method=PUT&.,Spring MVC,PUT HTTP请求,参考Sp
10、ring 3.x企业应用开发实战,通过请求/请求头参数限定:示例,RequestMapping(value=/delete,params=userId)public String test1(RequestParam(userId)String userId).,RequestMapping(value=/show,headers=content-type=text/*)public String test2(RequestParam(userId)String userId).,通过请求参数限定:,通过请求头参数限定:,参考Spring 3.x企业应用开发实战,通过请求/请求头参数限定:更多
11、,params和headers分别通过请求参数及报文头属性进行映射,它们支持简单的表达式,下面以params表达式为例说明,headers可以参照params进行理解之。param1:表示请求必须包含名为param1的请求参数。!param1:表示请求不能包含名为param1的请求参数。param1!=value1:表示请求包含名为param1的请求参数,但其值不能为value1。param1=value1,param2:请求必须包含名为param1和param2的两个请求参数,且param1参数的值必须为value1。,参考Spring 3.x企业应用开发实战,目录,Spring MVC框架
12、简介,1,通过注解绑定:示意图,public String handle1(.),RequestParam绑定请求参数,RequestHeader绑定请求头参数,CookieValue绑定Cookie的值,PathVariable绑定URL中的变量,参考Spring 3.x企业应用开发实战,通过注解绑定:示例,RequestMapping(value=/handle1)public String handle1(RequestParam(userName)String userName,RequestParam(password)String password,RequestParam(rea
13、lName)String realName).,RequestMapping(value=/handle2)public String handle2(CookieValue(JSESSIONID)String sessionId,RequestHeader(Accept-Language)String accpetLanguage).,参考Spring 3.x企业应用开发实战,通过注解绑定:小心抛出异常,RequestParam有以下三个参数。value:参数名。required:是否必需,默认为true,表示请求中必须包含对应的参数名,如果不存在将抛出异常。defaultValue:默认参
14、数名,设置该参数时,自动将required设为false。极少情况需要使用该参数,也不推荐使用该参数。,RequestMapping(value=/handle1)public String handle1(RequestParam(userName)String userName,).,上面的处理方法,如果HTTP请求不包含“userName”参数时,将产生异常!因此,如果不能保证存在”userName”的参数,必须使用:RequestParam(value=userName,required=false),参考Spring 3.x企业应用开发实战,使用命令/表单对象绑定,所谓命令/表单对象
15、并不需要实现任何接口,仅是一个拥有若干属性的POJO。Spring MVC按:“HTTP请求参数名=命令/表单对象的属性名”的规则,自动绑定请求数据,支持“级联属性名”,自动进行基本类型数据转换。,RequestMapping(value=/handle14)public String handle14(User user),userName=xxx&password=yyy,class User private String userName;private String password;,参考Spring 3.x企业应用开发实战,使用Servlet API对象作为入参,在Spring M
16、VC中,控制器类可以不依赖任何Servlet API对象,但是Spring MVC并不阻止我们使用Servlet API的类作为处理方法的入参。值得注意的是,如果处理方法自行使用HttpServletResponse返回响应,则处理方法的返回值设置成void即可。,RequestMapping(value=/handle21)public void handle21(HttpServletRequest request,HttpServletResponse response)String userName=WebUtils.findParameterValue(request,userNam
17、e);response.addCookie(new Cookie(userName,userName);,public String handle23(HttpSession session)session.setAttribute(sessionId,1234);return success;,public String handle24(HttpServletRequest request,RequestParam(userName)String userName)return success;,使用Spring的Servlet API代理类,Spring MVC在org.springfr
18、amework.web.context.request包中定义了若干个可代理Servlet原生API类的接口,如WebRequest和NativeWebRequest,它们也允许作为处理类的入参,通过这些代理类可访问请求对象的任何信息。,RequestMapping(value=/handle25)public String handle25(WebRequest request)String userName=request.getParameter(userName);return success;,参考Spring 3.x企业应用开发实战,使用IO对象作为入参,Spring MVC允许控
19、制器的处理方法使用java.io.InputStream/java.io.Reader及java.io.OutputStream/java.io.Writer作为方法的入参,RequestMapping(value=/handle31)public void handle31(OutputStream os)throws IOException Resource res=new ClassPathResource(/image.jpg);/读取类路径下的图片文件 FileCopyUtils.copy(res.getInputStream(),os);/将图片写到输出流中,Spring MVC将
20、获取ServletRequest的InputStream/Reader或ServletResponse的OutputStream/Writer,然后按类型匹配的方式,传递给控制器的处理方法入参。,参考Spring 3.x企业应用开发实战,其他类型的参数,控制器处理方法的入参除支持以上类型的参数以外,还支持java.util.Locale、java.security.Principal,可以通过Servlet的HttpServletRequest 的getLocale()及getUserPrincipal()得到相应的值。如果处理方法的入参类型为Locale或Principal,Spring M
21、VC自动从请求对象中获取相应的对象并传递给处理方法的入参。,RequestMapping(value=/handle32)public void handle31(Locale locale)throws IOException.,HttpMessageConverter,HttpServletRequest,HttpServletRequest,RequestBody/HttpEntity,ResponseBody/ResponseEntity,HttpMessageConverter,HTTP请求报文,HTTP请求报文,HttpMessageConverter实现类,AnnotationM
22、ethodHandlerAdapter,实现类:StringHttpMessageConverterFormHttpMessageConverterXmlAwareFormHttpMessageConverterResourceHttpMessageConverterBufferedImageHttpMessageConverterByteArrayHttpMessageConverterSourceHttpMessageConverterMarshallingHttpMessageConverterJaxb2RootElementHttpMessageConverterMappingJack
23、sonHttpMessageConverterRssChannelHttpMessageConverterAtomFeedHttpMessageConverter,注册到.,HttpMessageConverter接口方法T read(HttpInputMessage httpInputMessage)void write(T t,HttpOutputMessage httpOutputMessage),使用RequestBody/ResponseBody,将HttpServletRequest的getInputStream()内容绑定到入参,将处理方法返回值写入到HttpServletRes
24、ponse的getOutputStream()中。,RequestMapping(value=/handle41)public String handle41(RequestBody String requestBody)System.out.println(requestBody);return success;,ResponseBodyRequestMapping(value=/handle42/imageId)public byte handle42(PathVariable(imageId)String imageId)throws IOException System.out.pri
25、ntln(load image of+imageId);Resource res=new ClassPathResource(/image.jpg);byte fileData=FileCopyUtils.copyToByteArray(res.getInputStream();return fileData;,优点:处理方法签名灵活不受限缺点:只能访问报文体,不能访问报文头,参考Spring 3.x企业应用开发实战,使用HttpEntity/ResponseEntity,RequestMapping(value=/handle43)public String handle43(HttpEnt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LOGO SPRING MVC 3.0实战指南 3.0 实战 指南

链接地址:https://www.31ppt.com/p-2907997.html