SpringMVC中常常需要有页面之间的跳转操作,
本文旨在,不懂的扫盲,懂得的巩固(其实是我自己怕忘了,doge脸…)
直接上个例子,在注释里解释吧
ps.例中的解释,多为网上释意加本人见解,本人文笔一般实在不好意思,若是不好理解,请自行详细搜索.
ps.例子中的一些跳转操作等,需要使用上下文配置文件才可以
(Maven管理,SpringMVC+Spring+Mybatis环境整合,http://blog.youkuaiyun.com/peng_666666/article/details/77416780)这是我的一篇搭建SSM环境的博文,其中包括Spring例子的上下文配置,供大家参考
//假设所有包都已经import
@Controller
//设置一个根路径,该类中的网页映射都是以此为根路径
@RequestMapping("/example")
public class Controller {
//本方法将处理 /example/view1?id=123 形式的URL
/*
@RequestMapping(),参数value不多说吧,就相当于映射的网址
参数method,其包括GET、POST、PUT、DELETE等
*/
@RequestMapping(value="/view1", method=RequestMethod.GET)
/*
这是经常使用的接收Parameter的方法之一,
如同通过Request.getParameter()获取的String一样,可直接转换为简单类型(String与其它简单类型的转换操作由ConversionService配置的转换器来完成);
也正是使用了request.getParameter()方式获取参数,
所以可以处理Get方式中queryString的值,也可以处理Post方式中body data的值
*/
public String viewId1(@RequestParam("id") Integer id, Model model) {
/*
一般这里会使用"id"来进行查询之类的操作,
然后再用addAttribute()方法操作,这里我就假装操作过啦
*/
model.addAttribute(id);
//字符串中就是"你的配置文件中的指定目录为根目录,再输入你需要访问网页的文件路径"
return "view1";
}
//本方法将处理 /example/view2?id=123 形式的URL
@RequestMapping("/view2")
/*
HttpServletRequest,学servlet时候的老朋友,我就不介绍了
*/
public String viewId2(HttpServletRequest request) {
//这里是先取得request中的id
Integer id = Integer.valueOf(request.getParameter("id"));
/*
一般这里会使用"id"来进行查询之类的操作,
然后再用setAttribute()方法操作,这里我就假装操作过啦
*/
request.setAttribute("id",id);
return "view2";
}
//本方法将处理 /example/view3/123 形式的URL
@RequestMapping("/view3/{id}")
/*
当使用/view3/{id}这种形式时, 这时的id可通过@PathVariable注解绑定它传过来的值到方法的参数上
注意!@PathVariable("")中的参数需要与@RequestMapping("/{}")中的{}中的参数保持对应
*/
public String viewId3(@PathVariable("id") Integer id, Map<String, Object> model) {
/*
一般这里会使用"id"来进行查询之类的操作,
然后再用addAttribute()方法操作,这里我就假装操作过啦
*/
model.put("id",id);
return "view3";
}
/*
参数params:指定request中必须包含某些参数值是,才让该方法处理.
例中仅处理请求中包含值为"add"的请求;
params也可以键值对形式表现,例如"params="key=value",仅处理请求中包含了名为"key",值为"value"的请求;
*/
@RequestMapping(value="/admin", method=RequestMethod.GET, params="add")
public String createId(){
return "createId";
}
/*
参数headers:指定request中必须包含某些指定的header值,才能让该方法处理请求
仅处理request的header中包含了指定"Refer"请求头和对应值为"http://csdn.blog.net/"的请求
*/
@RequestMapping(value="/admin", method=RequestMethod.GET, headers="Referer=http://csdn.blog.net/")
public String delId(){
return "delId";
}
@RequestMapping(value="/do1", method=RequestMethod.GET)
/*
与上面的@RequestParam()不同,该注解有两个属性:value、required.
'value'用来指定要传入值的id名称,'required'用来指示参数是否必须绑定
参数是否绑定的意思是,当它为false时使用这个注解可以不传这个参数,不报错;它为true时必须传,没传就会报错(默认是true)
*/
public String do1(@RequestParam(value="id", required=false) Integer id) {
return "do1";
}
@RequestMapping(value="/do2", method=RequestMethod.POST)
/*
@ModelAttribute,该注解有两个用法,一个是用于方法上,一个是用于参数上
用于方法上时:通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时:用来通过名称对应,把相应名称的值绑定到注解的参数bean上.要绑定的值来源于:
1)@SessionAttributes启用的attribute对象上;
2)@ModelAttribute用于方法上时指定的model对象;
3)上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中.
简单提一下@SessionAttributes:
该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。
该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute对象;
*/
public String do2(@ModelAttribute Integer id) {
/*
redirect是重定向,重转发是forward:
*/
return "redirect:view3/"+id;
}
@RequestMapping(value="/{id}",method=RequestMethod.GET)
/*
@ResponseBody,该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
什么时候该使用它呢?返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用.
@PathVariable,
若方法参数名称和需要绑定中变量名称一致,就不需要在@PathVariable加上参数了(可与上文的@PathVariable对比)
*/
public @ResponseBody Course getIdInJson(@PathVariable Integer id){
return id;
}
}
希望能为大家扫到一两个盲点,哈哈
加油,与大家共勉