龙空技术网

传统SpringMVC使用介绍

Java热点 139

前言:

如今各位老铁们对“mvc传参方式”都比较讲究,兄弟们都需要剖析一些“mvc传参方式”的相关资讯。那么小编同时在网摘上网罗了一些关于“mvc传参方式””的相关文章,希望各位老铁们能喜欢,咱们快快来了解一下吧!

@RequestMapping注解DispatcherServlet截获请求后就通过控制器上的@RequestMapping注解提供的映射信息确定请求所对应的处理方法可以使用params参数和headers参数 更加精准的映射请求

java复制代码@RequestMapping(value="testParamsAndHeaders")    ,params={"address", "age!=25"}    ,headers={"Accept-Language=en-US,zh;q=0.8"}
支持Ant风格通配符 ?:匹配文件名中的一个字符。例如: /student/get?? 匹配 /student/getaa或/student/getbb *:匹配文件名中的任意字符。例如:/student/*/createStudent 匹配 student/aa/createStudent 或者 student/bb/createStudent **:匹配多层路径。例如:/student/**/createStudent 匹配 /student/createStudent 或者student/aa/bb/createStudent@PathVariable可以用来将url中的占位符映射到目标方法参数中
java复制代码@RequestMapping("/testPathVariable/{name}")public String testPathVariable(@PathVariable("name" String name)){    return name;}
可以将POST请求转化成标准的PUT或者DELETE请求 需要配置HiddenHttpMethodFilter 需要发送POST请求 需要在发送POST请求的时候携带一个name="_method" 的隐藏域,值是DELETE 或者 PUT
xml复制代码<!--配置org.Springframework.web.filter.HiddenHttpMethodFilter,可以把POST请求转为DELETE或者是PUT请求--><filter>    <filter-name>HiddentHttpMethodFilter</filter-name>    <filter-class>org.Springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping>    <filter-name>HiddentHttpMethodFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>
html复制代码<form action="testRest" method="post">    <input type="hidden" name="_method" value="PUT" />    <input type="submit" value="test" /></form>
@RequestParam 可以用来映射请求参数
java复制代码//value:请求参数的参数名,defaultValue :如果没有这个参数的默认值,required:是否是必须的默认是true@RequestMapping("/testRequestParam)public String testRequestParam(@RequestParam(value="name" defaultValue="小红") String name){    return name}
@RequestHeader 映射请求头 用法同@RequestParam
java复制代码@RequestMapping("/testRequestHeader)public String testRequestHeader(@RequestHeader(value="Auth" String auth)){    return auth;}
@cookieValue 映射cookie值 用法同@RequestParam
java复制代码@RequestMapping("testCookieValue")public String testCookieValue(@CookieValue("JSESSIONID") String id){    return id;}
参数处理MVC的Handler方法可以接收一下参数,进行自动填充 HttpServletRequest HttpServletResponse HttpSession java.util.Map org.springframework.ui.Model org.springframework.ui.ModelMapcontroller处理方法的返回值 ModelAndView:处理方法的返回值是这个的时候,可以向该对象中添加数据 Map及Model:入参为Map或者Model的时候,可以直接向map中添加键值对,会自动保存到request域对象中,页面返回时自动添加其中 @SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性,除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。例:@SessionAttributes(value="{name}",types={String.class})会把放入到map中的参数放到session中 ModelAttribute:方法入参标注该注解后,入参的对象就会放在数据模型中
java复制代码//控制器处理方法的返回结果是ModelAndView的时候,它既包含视图信息,也包含模型数据信息。//添加模型数据://ModelAndView.addObject(String attributeName,Object attributeValue)//ModelAndView.addAllObject(Map modelMap)//其中模型数据会依次遍历request,setAttribute(modelName,modelValue),即添加到request域对象中//设置视图://void setView(View view)//void setViewName(String viewName)@RequestMapping("/testModelAndView")public ModelAndView testModelAndView(){    ModelAndView modelAndView = new ModelAndView("/testModelAndView");    modelAndView.addObject("name", "小红");    return modelAndView;}
java复制代码//1) Map:入参为Map的时候,可以直接向map中添加键值对,会自动保存到request域对象中,页面返回时自动添加其中//2)Model:入参为Model的时候,可以直接向Model中添加键值对,会自动保存到request域对象中,页面返回时自动添加其中@RequestMapping("/testMap")public void testMap(Map<Stirng, Object> map, Model model){    map.put("name", "小红");    model.addAttribute("address", "xx");}
java复制代码//除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。//例:@SessionAttributes(value="{name}",types={String.class})//会把放入到map中的参数放到session中@SessionAttributes(value="{name}", types={String.class})@RequestMapping("/testSessionAttributes")public void testSessionAttributes(Map<Stirng, Object> map){    map.put("name", "小红");}
java复制代码//有ModelAttribute注解标注的方法,会在每个目标方法执行之前被SpringMvc调用!//其中HttpServletRequst对象是同一个,所以可以在有ModelAttribute注解标注的方法的入参传入request, 同时//request.setAttribute(arg0, arg1);之后在目标url中可以request.getAttribute() 出来//执行过程:先执行有ModelAttribute注解标注的方法,将pojo放入map或model中,此时pojo还没有放入request域//中,所以不能用request.getAttribute方法获取pojo。然后执行目标方法,将map或model中的pojo传入目标方//法,在将前台传过来的数据一一set,这样就能达到 前台没有传过来的数据没有改变,而不是null.//也可以不往model中加,直接将需要添加的值设置成方法的返回值,也一样会放在model中。key就是返回值的名字,//如果需要指定key 那就在@modelattribute注解的value属性中指定:@ModelAtribute(value="preStudent")public Object modelAttribute(){    Student student = new Student();    student.setName("小红");    student.setAge(25);    student.setAddress("xx");    return student;}//其中@ModelAttribute注解也可以放在目标方法的参数上,可以指定一个参数名进行绑定:@ModelAtributepublic void modelAttribute(Model model){    Student student = new Student();    student.setName("小红");    student.setAge(25);    student.setAddress("xx");    model.addAttribute("preStudent", student);}@RequestMapping("/testModelAttribute")public void testModelAttribute(@ModelAttribute("preStudent") student){    System.out.println(student);}//其中如果model中没有对应的key,并且当前handler也没有用@sessionAttributes注解标记,则会通过反射的方式//新建一个对象,此时该对象必须有一个无参构造器。如果用@sessionAttributes注解标记并且其vaule属性与key一//致,则会强制在session中取,如果没有取到则会抛出一个异常。

标签: #mvc传参方式