Fork me on GitHub

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前缀+@RequestMapping 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        }

 

posted @ 2015-09-30 17:27  ZZZZW  阅读(409)  评论(0编辑  收藏  举报
AmazingCounters.com