精通SpringJava Web开发技术详解.ppt
《精通SpringJava Web开发技术详解.ppt》由会员分享,可在线阅读,更多相关《精通SpringJava Web开发技术详解.ppt(266页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精通Spring:JavaWeb开发技术详解作者:孙卫琴作者:孙卫琴参考书籍:参考书籍:精通Spring:Java Web开发技术详解出版出版社:清华大学出版社社:清华大学出版社技术支持网址:技术支持网址: springmvc-servlet.xml:这是SpringMVC框架的专有配置文件。web.xmlspringmvcorg.springframework.web.servlet.DispatcherServlet1springmvc/springmvc-servlet.xmlspringmvc-servlet.xml(续)messagesspringmvc-servlet.xml(续)
2、2.7发布和运行helloapp应用初次访问hello.jsp的流程n(1)DispatcherServlet调用PersonController控制器类的init()方法。n(2)PersonController控制器类的init()方法把一个新建的Person对象保存到Model类型的model参数中n(3)PersonController控制器类的init()方法把请求转发给hello.jsp。n(4)hello.jsp中的标签从消息资源文件中读取文本,把它输出到网页上。n(5)hello.jsp中的标签在Model中查找属性名为“personbean”的Person对象。把Person
3、对象中的userName属性赋值给HTML表单的userName文本框。由于此时Person对象的userName属性的取值为null,所以在hello.jsp网页上,userName文本框没有内容。n(6)把hello.jsp生成的网页视图呈现给浏览器客户。2.8依赖注入和控制反转依赖注入和控制反转n站在JavaWeb应用程序的角度,Controller控制器类等组件注入到JavaWeb应用程序中,JavaWeb应用程序依赖它们来处理客户请求,却无需管理它们的生命周期,这一过程称作依赖注入。n站在SpringMVC框架的角度来看待这一过程,也称作控制反转,也就是说,本来应该由JavaWeb应
4、用程序控制对象生命周期的权力转到了SpringMVC框架手中。2.8依赖注入和控制反转依赖注入和控制反转nSpring框架规定,Bean组件包括五种存在范围:nsingleton:单例范围。在整个应用程序中,Spring框架只创建一个Bean实例。这是默认的范围。nprototype:原型范围。每次程序访问Bean组件时,Spring框架都会创建一个Bean实例。nrequest:请求范围。对于每一个HTTP请求,Spring框架会创建一个Bean实例。nsession:会话范围。对于每一个HTTP会话,Spring框架会创建一个Bean实例。napplication:Web应用范围。对于整个
5、Web应用,Spring框架会创建一个Bean实例。2.9向Spring框架注册Bean组件的三种方式n(1)用Controller、Service和Respository等注解标识一个Java类。n(2)在Spring框架或分支框架的配置文件中用元素来注册Bean组件,例如:2.9向Spring框架注册Bean组件的三种方式n注解来注册Bean组件,例如:ConfigurationpublicclassMyConfigureBean(customerService)Scope(application)publicCustomerServicecreate()returnnewCustomer
6、ServiceImpl();第3章控制器层的常用类和注解n3.1用Controller注解标识控制器类n3.2控制器对象的存在范围n3.3设置控制器类的请求处理方法的URL入口n3.4绑定HTTP请求数据和控制器类的方法参数n3.5请求参数的类型转换n3.6请求参数的格式转换n3.7控制器类的方法的参数类型n3.8控制器类的方法的返回类型n3.9控制器与视图的数据共享n3.10ControllerAdvice注解的用法3.1用Controller注解标识控制器类n把一个类用Controller注解标识,这个类就变成了SpringMVC框架中的控制器类。n在SpringMVC的配置文件中,以下代
7、码用于告诉SpringMVC框架,在哪些Java包中扫描Java类的Spring注解:3.2控制器对象的存在范围控制器对象的存在范围n默认情况下,Controller对象的存在范围为singleton(单例),即在整个应用程序的生命周期内,一个Controller类只有一个实例。nSpringMVC框架还允许把一个Controller对象的存在范围设置为request或session:nrequest范围:对于每一个HTTP请求,SpringMVC框架创建一个Controller对象。当完成了对这个HTTP请求的响应,Controller对象就结束生命周期。nsession范围:对于每一个HT
8、TP会话,SpringMVC框架创建一个Controller对象。当这个HTTP会话结束,Controller对象就结束生命周期。3.2控制器对象的存在范围控制器对象的存在范围ControllerRequestScope/ControllerA的存在范围为requestpublicclassControllerAControllerSessionScope/ControllerB的存在范围为sessionpublicclassControllerB3.3设置控制器类的请求处理方法的URL入口ControllerpublicclassControllerA/设定请求方式以及多个URL入口Requ
9、estMapping(value=/input,/,method=RequestMethod.GET)publicStringmethod1()RequestMapping(value=/hello)/设定一个URL入口publicStringmethod2()RequestMapping(go)/直接设定URL入口publicStringmethod3()3.3设置控制器类的请求处理方法的URL入口params属性RequestMapping(value=test,params=username=weiqin,address,!phone)publicStringtestParam()3.3
10、设置控制器类的请求处理方法的URL入口method属性RequestMapping(value=test,method=RequestMethod.GET,RequestMethod.DELETE)publicStringtestMethod()3.3设置控制器类的请求处理方法的URL入口headers属性RequestMapping(value=test,headers=Host=localhost,Accept,!Referer)publicStringtestHeaders()3.3设置控制器类的请求处理方法的URL入口n,SpringMVC框架还提供了几种简化形式的映射注解:nGetM
11、apping:指定请求方式为GET。nPostMapping:指定请求方式为POST。nPutMapping:指定请求方式为PUT。nDeleteMapping:指定请求方式为DELETE。GetMapping注解/方式一RequestMapping(value=test,method=RequestMethod.GET)publicStringtest()/方式二GetMapping(value=test)publicStringtest()/方式三GetMapping(test)publicStringtest()3.4绑定绑定HTTP请求数据和控请求数据和控制器类的方法参数制器类的方法参
12、数n直接定义和请求参数同名的方法参数。n用RequestParam注解绑定请求参数。n用RequestHeader注解绑定请求头。n用CookieValue注解绑定Cookie。n用PathVariable注解绑定RESTFul风格的URL变量。3.4.1直接定义和请求参数同名的方法参数RequestMapping(test)publicStringtestParam(Stringname,intage,Stringaddress)System.out.println(name=+name);System.out.println(age=+age);System.out.println(adr
13、ess=+address);returnresult;3.4.2用用RequestParam注注解绑定请求参数解绑定请求参数RequestMapping(test)publicStringtestParam(RequestParam(required=false,defaultValue=Guest)Stringname,RequestParam(name=age)intage,RequestParam(address)StringhomeAddress)System.out.println(name=+name);System.out.println(age=+age);System.out
14、.println(homeAdress=+homeAddress);returnresult;3.4.3用RequestHeader注解绑定HTTP请求头RequestMapping(test)publicStringtestRequestHeader(RequestHeader(Host)StringhostAddr,RequestHeaderStringHost,RequestHeaderStringhost)System.out.println(hostAddr+-+Host+-+host);returnresult;3.4.4用CookieValue注解绑定CookieRequestM
15、apping(test)publicStringtestCookie(CookieValueStringusername,CookieValue(address)StringhomeAddress)System.out.println(username=+username);System.out.println(homeAddress=+homeAddress);returnresult;3.4.5用PathVariable注解绑定RESTFul风格的URL变量ControllerRequestMapping(/main/variable1)publicclassTestPathControl
16、lerRequestMapping(/test/variable2)publicStringtestPath(PathVariableStringvariable1,PathVariable(variable2)intvariable2)System.out.println(variable1=+variable1);System.out.println(variable2=+variable2);returnresult;3.4.6把一组请求参数和一个JavaBean类型的方法参数绑定ControllerpublicclassProductControllerRequestMapping(/
17、product)publicStringgetDetail(Productproduct)System.out.println(name:+product.getName();System.out.println(price:+product.getPrice();returnresult;3.5请求参数的类型转换n创建和使用自定义类型转换器的步骤:n(1)创建hello.jsp,它接收用户输入的Person信息,最后会把Person信息显示到网页上。n(2)创建包含Person信息的Person类。n(3)创建类型转换器PersonConverter类,它把String类型的Person信息
18、转换成Person对象。n(4)在SpringMVC配置文件中注册PersonConverter类型转换器。n(5)创建控制器类PersonController,它读取经过数据类型转换的person参数,把它保存在Model中,再由hello.jsp显示Person信息。PersonConverter类publicclassPersonConverterimplementsConverterpublicPersonconvert(Stringsource)/创建一个Person对象Personperson=newPerson();/以“,”分隔StringstringValues=source
19、.split(,);if(stringValues!=null&stringValues.length=4)/为Person实例赋值person.setUserName(stringValues0);person.setAge(Integer.parseInt(stringValues1);person.setIsMarried(Boolean.parseBoolean(stringValues2);person.setWeight(Double.parseDouble(stringValues3);returnperson;else.3.6请求参数的格式转换请求参数的格式转换RequestM
20、apping(value=/useFormat)publicStringuseFormat(DateTimeFormat(pattern=yyyy-MM-dd)Datedate,NumberFormat(pattern=#,#)intsalary,Modelmodel)model.addAttribute(date,date);model.addAttribute(salary,salary);System.out.println(date=+date);System.out.println(salary=+salary);returnshowFormatData;3.7控制器类的方法的参数类
21、型njavax.servlet.ServletRequest或javax.servlet.http.HttpServletRequestnjavax.servlet.ServletResponse或javax.servlet.http.HttpServletResponsenjavax.servlet.http.HttpSessionnorg.springframework.web.context.request.WebRequestnorg.springframework.web.context.request.NativeWebRequestnjava.util.Localen用于读取请求
22、数据的java.io.InputStream或java.io.Readern用于生成响应结果的java.io.OutputStream或java.io.Writernjava.security.Principalnorg.springframework.http.HttpEntity3.7控制器类的方法的参数类型njava.util.Map或org.springframework.ui.Modelnorg.springframework.ui.ModelMapnorg.springframework.web.servlet.ModelAndViewnorg.springframework.we
23、b.servlet.mvc.support.RedirectAttributesnorg.springframework.validation.Errorsnorg.springframework.validation.BindingResultnorg.springframework.web.bind.support.SessionStatusnorg.springframework.web.util.UriComponentsBuildern用ModelAttribute、PathVariable、CookieValue、RequestParam、RequestHeader、Request
24、Body和RequestPart注解标识的参数n和请求参数对应的数据类型3.8控制器类的方法的返回类型控制器类的方法的返回类型n(1)ModelAndView类型:包含了Model数据以及视图组件。本章3.9.4节介绍了把ModelAndView作为返回类型的范例。n(2)String类型:Web组件的逻辑名字。n(3)void:没有返回值。在这种情况下,在请求处理方法中可以直接通过Writer等来输出响应结果。n(4)如果请求处理方法用ModelAttribute注解来标识,那么方法的返回值无论是什么类型,都会添加到Model中。3.9控制器与视图的数据共享nModelAttribute注解
25、:表示Model的特定数据。norg.springframework.ui.Model接口:表示Model数据。控制器和视图都能访问Model。norg.springframework.ui.ModelMap类:表示Model数据的映射。控制器和视图都能访问ModelMap。norg.springframework.web.servlet.ModelAndView类:表示Model数据以及视图。控制器和视图都能访问ModelAndVIew。3.9控制器与视图的数据共享n把方法参数保存到Model中RequestMapping(value=/sayHello,method=RequestMeth
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精通SpringJava Web开发技术详解 精通 SpringJava Web 开发 技术 详解
限制150内