JavaEE企业级项目开发(第3版)课件 微课7-5:基于Spring MVC注解分析_第1页
JavaEE企业级项目开发(第3版)课件 微课7-5:基于Spring MVC注解分析_第2页
JavaEE企业级项目开发(第3版)课件 微课7-5:基于Spring MVC注解分析_第3页
JavaEE企业级项目开发(第3版)课件 微课7-5:基于Spring MVC注解分析_第4页
JavaEE企业级项目开发(第3版)课件 微课7-5:基于Spring MVC注解分析_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主讲人:吴佳云延迟符基于SpringMVC注解分析SpringMVC入门与核心类1一个简单的基于注解的Controller@Controller//<——①

@RequestMapping("/forum")

publicclassBasicController{

@RequestMapping//<——②

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

}在①处使用了两个注解,分别是@Controller和@RequestMapping注解。@Controller注解让BasicController成为一个Bean。@RequestMapping注解让BasicController具备SpringMVCController功能。BasicController.java1一个简单的基于注解的Controller<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!--配置初始化参数,读取spring-mvc.xml配置文件-->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-mvc.xml</param-value>

</init-param>

<!--配置项目启动时立即加载该servlet-->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/</url-pattern><!--配置“/”:拦截所有请求-->

</servlet-mapping>web.xml1一个简单的基于注解的Controller

<!--配置SpringMVC要扫描的包-->

<context:component-scanbase-package="com.my.ccit.controller"/>

<!--配置视图解析器-->

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="prefix"value="/WEB-INF/pages/"/>

<propertyname="suffix"value=".jsp"/>

</bean>spring-mvc.xml1一个简单的基于注解的Controller测试2一个Controller处理多个URL请求@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@RequestMapping("/listAllBoard")//<——①

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

@RequestMapping("/listBoardTopic")//<——②

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}

}上面代码分别在①和②处为listAllBoard()和listBoardTopic()方法标注了@RequestMapping注解,这样/fornum/listAllBoard的URL请求将由listAllBoard()负责处理,而/fornum/listBoardTopic?topicId=1的URL请求则由listBoardTopic()方法处理。3一个Controller对应一个URL,由请求参数决定请求处理方法@Controller

@RequestMapping("/fornum")//<——①指定控制器对应URL请求

publicclassBasicForumController{

//<—②如果URL请求中包括"method=listAllBoard"的参数,由本方法进行处理

@RequestMapping(params="method=listAllBoard")

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

//<——③如果URL请求中包括"method=listBoardTopic"的参数,由本方法进行处理

@RequestMapping(params="method=listBoardTopic")

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}

}在①定义处标注的@RequestMapping让Controller处理所有包含/fornum的URL请求,在②和③处标注的@RequestMapping可以很容易通过URL参数指定Controller的处理方法了。4让请求处理方法处理特定的HTTP请求方法这样只有当/fornum?method=createTopic请求以HTTPPOST方式提交时,createTopic()方法才会进行处理。除了使用@RequestMapping注解的method属性,来限定当前方法匹配哪种类型的请求方式以外,还可以使用组合注解完成客户端请求方式的限定。常用的组合注解有:@GetMapping:匹配GET方式的请求。@PostMapping:匹配POST方式的请求。@PutMapping:匹配PUT方式的请求。@DeleteMapping:匹配DELETE方式的请求。@PatchMapping:匹配PATCH方式的请求。@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@RequestMapping(params="method=createTopic",method=

RequestMethod.POST)

publicStringcreateTopic(){

System.out.println("callcreateTopicmethod.");

return"createTopic";

}

}4让请求处理方法处理特定的HTTP请求方法@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@PostMapping(params="method=createTopic")

publicStringcreateTopic(){

System.out.println("callcreateTopicmethod.");

return"createTopic";

}

}@PostMapping是@RequestMapping(method=RequestMethod.POST)的缩写,使用组合注解替代@RequestMapping注解,可以省略method属性,从而简化代码。5按参数名绑定URL参数@RequestMapping(params="method=listBoardTopic")

//<——①topicId入参是如何绑定URL请求参数的?

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}当发送http://localhost/fornum?method=listBoardTopic&topicId=10的URL请求时,Spring不但让listBoardTopic()方法处理这个请求,而且还将topicId请求参数在类型转换后绑定到listBoardTopic()方法的topicId形参上。请求处理方法入参的类型可以是Java基本数据类型或String类型,这时方法入参按参数名匹配的原则绑定到URL请求参数,同时还自动完成String类型的URL请求参数到请求处理方法参数类型的转换。6请求处理方法的入参是一个JavaBean这时,如果使用以下URL请求:http://localhost:8888/fornum/list?method=listBoardTopic&topicId=1&userId=10&userName=tom,topicIdURL参数将绑定到topicId入参上,而userId和userNameURL参数将绑定到user对象的userId和userName属性中。和URL请求中不允许没有topicId参数不同,虽然User的userId属性的类型是基本数据类型,但如果URL中不存在userId参数,Spring也不会报错,此时user.userId值为0。如果User对象拥有一个dept.deptId的级联属性,那么它将和dept.deptIdURL参数绑定。@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}@Data

publicclassUser{

privateintuserId;

privateStringuserName;

}7通过注解指定绑定的URL参数由于对listBoardTopic()请求处理方法的topicId入参标注了@RequestParam("id")注解,所以它将和id的URL参数绑定。@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(@RequestParam("id")inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}8通过注解映射URL绑定的占位符浏览器中访问:http://localhost:8888/fornum/list/1?method=listBoardTopic&userId=10&userName=tom,此时路径上的1将绑定到topicId入参上。@RequestMapping(value="/list/{id}",params="method=listBoardTopic")

publicvoidlistBoardTopic(@PathVariable("id")inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中,即URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参中。9ModelAttribute注解@ModelAttribute是SpringMVC中的一个非常有用的注解,它主要被用来绑定请求参数到对象上,然后将这个对象添加到模型(Model)中。@ModelAttribute注解的主要作用:绑定请求参数到对象添加到model中用于数据预处理9ModelAttribute注解1绑定请求参数到对象@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(@ModelAttribute("user")Useruser){

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}当请求到达控制器方法时,SpringMVC会尝试将请求参数绑定到带有@ModelAttribute注解的方法参数或对象的属性上,代码如下所示。浏览器中访问http://localhost:8888/fornum/list?method=listBoardTopic&userId=10&userName=tom,此时路径上请求参数userId=10和userName=tom将被绑定到user入参相应的属性上。9ModelAttribute注解2添加到model中带有@ModelAttribute注解的对象会被添加到model中,这样它就可以在视图中被访问。这意味着你可以在视图中直接使用该对象,而无需在控制器方法中显式地将它添加到model中,代码如下所示。@RequestMapping(value="/list/showuser",params="method=listBoardTopic")

publicStringlistBoardTopic(@ModelAttribute("user")Useruser){

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

return"userInfo";

}9ModelAttribute注解2添加到model中<form>

<div>

<labelfor="uid">用户ID:</label>

<inputtype="text"id="uid"name="userId"value="${user.userId}"/>

</div>

<div>

<labelfor="uname">用户名:</label>

<inputtype="text"id="uname"name="userName"value="${user.userName}"/>

</div>

</form>userInfo.jsp浏览器中访问http://localhost:8888/fornum/list/showuser?method=listBoardTopic&userId=10&userName=tom,页面如图所示,说明带有@ModelAttribute注解的user对象成功被添加到model中。9ModelAttribute注解3用于数据预处理可以使用@ModelAttribute注解在控制器方法之前执行一些预处理操作,比如从数据库加载数据或执行其他逻辑。这通常用于填充表单的默认值或进行其他初始化操作。@ModelAttribute("user")

publicUserpopulateUser(){

Useruser=newUser(222,"wangwu");

returnuser;

}

@RequestMapping("/test")

publicvoidtest(Useruser){

System.out.println(user);

}浏览器中访问http://localhost:8888/fornum/test,控制台输出,如图所示,说明@ModelAttribute("user")数据预处理成功。10@SessionAttribute注解@SessionAttributes(“user”)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论