springmvc常见注解模式

  

  1 常用注解元素
  2 @Controller
  3          标注在Bean的类定义处
  4 @RequestMapping
  5 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解
  6 @RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;
  7 还可以标注在方法签名处,以便进一步对请求进行分流
  8
  9    配套的属性有:
 10    value 需要跳转的地址
 11    method 基于RestFul的跳转参数,有RequestMethod.get  post  put  delete等
 12    params 符合某个参数的时候才调用该方法
 13    Headers 符合头信息的时候才调用
 14
 15 @SessionAttributes
 16          将结果放入session内
 17 @ModelAttribute
 18 存储在响应内容ModelMap或者ModelAndView进行保存值传到前台,当如果你需要保存值比较少
 19 的时候可以采用这种方式进行保存值并且保存到前台显示
 20
 21 在默认情况下,ModelMap 中的属性作用域是 request 级别,相当于HttpServletRequest中的request.setAttribute() 一样, 在 JSP 视图页面中通过 request.getAttribute(“attribute name”) 或者通过
 22 ${ attribute name } EL 表达式访问模型对象中的 属性对象
 23
 24 如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现 如:
 25
 26 @Controller
 27 @RequestMapping("/login.do")
 28 @SessionAttributes("currUser")
 29 public class BbtForumController {。。。。。}
 30
 31
 32 @ResponseBody
 33          标注后  返回String对象的结果为response内容体,不标注的话  作为dispatcher url使用
 34
 35 @PathVariable
 36    允许将请求路径的制定内容当做求情的参数使用
 37 返回类型
 38 请求处理方法入参的可选类型                                                   说明
 39 void                                       此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:
 40 @RequestMapping("/welcome.do")
 41 public void welcomeHandler() {
 42 }
 43 对应的逻辑视图名为“welcome”
 44
 45 String                                    此时逻辑视图名为返回的字符,如以下的方法:
 46 @RequestMapping(method = RequestMethod.GET)
 47 public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {
 48      Owner owner = this.clinic.loadOwner(ownerId);
 49      model.addAttribute(owner);
 50      return "ownerForm";
 51 }
 52                                               对应的逻辑视图名为“ownerForm”
 53
 54 ModelMap                            和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,
 55 如下面的例子:
 56 @RequestMapping("/vets.do")
 57 public ModelMap vetsHandler() {
 58      return new ModelMap(this.clinic.getVets());
 59 }
 60
 61 对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,
 62 可以在 JSP 视图页面中访问到。
 63 ModelAndView
 64 返回方式
 65 1 使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以
 66 prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称.
 67
 68 2 使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可
 69 以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀)
 70
 71 3 返回一个ModelAndView类型,使用setViewName方法则可以跳转到指定的页面.
 72
 73 路径匹配形式
 74          1、单一Controller   对应 单一的请求路径
 75
 76 2、单一Controller   对应多个请求路径
 77
 78 3、单一Controller  对应多个请求路径,且路径内可以含有参数的形式
 79 Demo code and UseCase
 80 @Controller
 81 @RequestMapping("/login.do")
 82 public class SinglePathWithController {}
 83
 84 @Controller
 85 @SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
 86 public class AdapterMultiPathController {}
 87
 88 @Controller
 89 @RequestMapping(value = "/rest")
 90 public class RestWithController {}
 91 无返回
 92 //无返回值  无参数返回的是根据 prefix前缀[email protected] value +suffix
 93 后缀组成
 94       @RequestMapping("/springmvc/common")
 95       public voidnovoid(HttpServletRequest request) {
 96          request.setAttribute("message", "novoid方法被调用");
 97       }
 98
 99
100 返回字符串
101 1、  作为视图路径方式
102
103 //根据路径直接匹配
104 @RequestMapping("/springmvc/multiReqPath1.do")
105     public String multiReqPath1(HttpServletRequest request){
106        request.setAttribute("message", "multiReqPath1方法被调用");
107        return "springmvc/common";
108     }
109
110     @RequestMapping("/springmvc/multiReqPath2.do")
111     public String multiReqPath2(HttpServletRequest request){
112        request.setAttribute("message", "multiReqPath2方法被调用");
113        return "/springmvc/common";
114     }
115
116 //根据参数匹配
117     @RequestMapping(params = "m=method1",method = RequestMethod.GET)
118     public String method1(){
119        return "login/success";
120 }
121
122 //有参数  参数名和请求url内的变量名一致
123     @RequestMapping(params = "m=method2")
124     public String method2(String name,String pwd){
125        return name;
126 }
127 //有参数 参数名和请求url内的变量名不一致
128     @RequestMapping(params = "m=method3",method = RequestMethod.GET)
129     public String method3(@RequestParam("loginName")String name,@RequestParam("loginPwd")String pwd,HttpServletRequest request){
130        request.setAttribute("message",(name + " " + pwd));
131        return "login/"+name;
132     }
133
134
135 2、  作为Response内容方式
136 //无参数
137     @ResponseBody
138     @RequestMapping(params = "m=method4")
139     public String method4(){
140        return "hello,guys";
141 }
142
143 //处理方法入参如何绑定 URL 参数
144     @ResponseBody
145     @RequestMapping(params = "m=method5",method = RequestMethod.GET)
146     public String method5(String name,String pwd,int delay){
147        return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay;
148 }
149
150 @ResponseBody
151     @RequestMapping(params = "m=method6",method = RequestMethod.GET)
152     public String method6(@RequestParam("userName")String name,DnTest test){
153        return "DnTest:"+test.toString();
154     }
155
156 URL 参数: userName参数将绑定到name上  其他与DnTest类内属性名称一致的参数将绑定到test的对应的属性上,如果参数不全  也不会报错
157 返回ModelAndView
158 @RequestMapping("/springmvc/modelAndView")
159     public ModelAndView modelAndView(){
160        ModelAndView mav = new ModelAndView();
161        mav.setViewName("/springmvc/common");
162        mav.addObject("message", "modelAndView 方法被调用");
163        return mav;
164     }
165 返回ModelMap
166     @RequestMapping("/springmvc/modelMap")
167     public ModelMap modelMap(ModelMap modMap){
168        List<String> names = new ArrayList<String>();
169        names.add("Rick");
170        names.add("Austin");
171         modMap.put("names", names);
172
173         modMap.put("message", "hello guys");
174         modMap.put("comment", "hello guys");
175
176         return modMap;
177     }
178 返回ModelMap
179 @RequestMapping("/springmvc/modelMap")
180     public ModelMap modelAndView(ModelMap modMap){
181        List<String> names = new ArrayList<String>();
182        names.add("Rick");
183        names.add("Austin");
184
185         modMap.put("hello", "hello guys");
186         modMap.put("names", names);
187         return modMap;
188     }
189 @SessionAttribute & ModMap
190 //注解方式
191 @Controller
192 @SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
193 public class AdapterMultiPathController {}
194
195 //方法体
196 @RequestMapping("/springmvc/modelMap2")
197     public ModelMap modelMapWithSession(ModelMap modMap,HttpServletRequest request){
198        List<String> names = new ArrayList<String>();
199        names.add("Rick");
200        names.add("Austin");
201        modMap.put("names",names);
202
203         modMap.put("message", "hello guys");
204         modMap.put("comment", "hello guys");
205
206         UserBean user = new UserBean();
207         user.setName("Rick");
208         user.setMobile("18938900256");
209         user.setTelephone(request.getParameter("userPhone"));
210         user.setNumber(request.getParameter("userNumber"));
211         modMap.put("currentUser", user);
212
213         return modMap;
214     }
215 //初次请求
216 spring mvc & reverse ajax
217 @ResponseBody
218     @RequestMapping(params = "m=method7",method = RequestMethod.GET)
219     public String method7(String name,String pwd,int delay,HttpServletRequest req){
220        req.startAsync();
221
222        Date startTime = new Date();
223        try {
224            Thread.currentThread().sleep(delay);
225        } catch (InterruptedException e) {
226            e.printStackTrace();
227        }
228        Date entTime = new Date();
229
230        return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+
231               DateUtils.formatDate(startTime, "yyyy-MM-dd HH:mm:ss:SSS")+",endTime:"+
232               DateUtils.formatDate(entTime, "yyyy-MM-dd HH:mm:ss:SSS");
233     }
234
235 RestFull
236 @Controller
237 @RequestMapping(value = "/rest")
238 public class RestWithController {}
239
240 @ResponseBody
241     @RequestMapping(value = "/{msg}", method = RequestMethod.GET)
242     public String restString(@PathVariable String msg) {
243        return msg;
244     }
245
246     @ResponseBody
247     @RequestMapping(value = "/{path}/{value}", method = RequestMethod.GET)
248     public String restXml(@PathVariable String path,@PathVariable String value) {
249        return "path:"+path+",value:"+value;
250     }
251     @ResponseBody
252     @RequestMapping(value = "/xml/{filename}", method = RequestMethod.GET)
253     public String restFile(@PathVariable String filename) {
254        if (filename!=null) {
255            ProjectInits init = ProjectInits.getInstance();
256            String dir = init.get("resource.dir", "C:/Projects/VoyagerWeb/resources");
257            FileUtility fUtil = new FileUtility();
258            String content = fUtil.readFile(dir+"/"+filename+".xml");
259            return content;
260        }
261        else
262            return "Invalid xml file name ["+filename+"]";
263     }
264
265
266 验证 是否支持Overload
267 方式一
268 //验证 是否支持Overload
269     @ResponseBody
270     @RequestMapping(value = "/validate/overload1", method = RequestMethod.GET)
271     public String overloadMethod(String name){
272        return name;
273     }
274     @ResponseBody
275     @RequestMapping(value = "/validate/overload2", method = RequestMethod.GET)
276     public String overloadMethod(String name,DnTest test){
277        return "DnTest:"+test.toString();
278     }
279
280 方式二
281 /验证 是否支持Overload
282         @ResponseBody
283          @RequestMapping(params = "m=method11")
284        public String method11(String name){
285            return name;
286        }
287
288         @ResponseBody
289          @RequestMapping(params = "m=method11")
290        public String method11(int age,DnTest test){
291            return "DnTest:"+test.toString();
292        }
时间: 2024-10-20 13:30:30

springmvc常见注解模式的相关文章

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

springMVC的注解详解

springmvc常用注解标签详解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@Request

JAVA-SpringMVC基于注解模式第一个应用

项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun

Spring和SpringMVC常用注解(转)

作者:IT_faquir 原文:https://blog.csdn.net/IT_faquir/article/details/78025203 个人学习所用,如有侵权,请联系删除! --------------------- 本文主要罗列Spring|SpringMVC相关注解的简介.Spring部分1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controll

[springMvc]常见配置

[springMvc]常见配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springf

SpringMVC的注解方式

mvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springf

springMvc的注解注入方式

springMvc的注解注入方式 最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着学习的态度来阅读源码,若文章在表述和代码方面如有不妥之处,欢迎批评指正.留下你的脚印,欢迎评论!希望能互相学习. 1,首先定义三个常用的注解Service,Autowired,Contrller:(主要的解释都在代码中有,在这里就不多陈述) Service: package com.lishun.A

spring的配置模式与注解模式基础

“依赖注入”是spring的核心特征,在Web服务器(如Tomcat)加载时,它会根据Spring的配置文件中配置的bean或者是通过注解模式而扫描并装载的bean实例自动注入到ApplicationContext容器中(ApplicationContext容器管理了被注入的bean对象). 下面做两个简单测试以说明spring“依赖注入“的两种模式:配置模式与注解模式. 测试工具: 一.新建spring配置文件,放在类目录下 在“src”上右键点"new",选择"Other

springMVC基于注解的控制器

springMVC基于注解的控制器的优点有两个: 1.控制器可以处理多个动作,这就允许将相关操作写在一个类中. 2.控制器的请求映射不需要存储在配置文件中.使用requestMapping注释类型,可以对一个方法进行请求处理. 接下来介绍两个最重要的注释类型: 一.controller注释类型 这种注释类型用于指示Spring类的实例是一个实例: import org.springframework.stereotype; public class CustemerController{ //m