springmvc 路径映射规则、数据绑定

一、路径映射

1. 一个action配置多个URL映射

@RequestMapping(value={“/index”, “/hello”}, method = {RequestMethod.GET})

2. URL请求参数映射

@RequestMapping(value="/detail/{id}", method = {RequestMethod.GET})

public ModelAndView getDetail(@PathVariable(value="id") Integer id){  
    ModelAndView modelAndView = new ModelAndView();    
    modelAndView.addObject("id", id);    
    modelAndView.setViewName("detail");    
    return modelAndView;  
}  
3. URL通配符映射“?”表示1个字符,“*”表示匹配多个字符,“**”表示匹配0个或多个路径
SpringMVC会按照最长匹配优先原则(即映射配置中哪个匹配的最多)来匹配。
4. URL正则表达式映射
Spring MVC还支持正则表达式方式的映射配置
@RequestMapping(value="/reg/{name:\\w+}-{age:\\d+}", method = {RequestMethod.GET})  
public ModelAndView regUrlTest(@PathVariable(value="name") String name, @PathVariable(value="age") Integer age){  
    ModelAndView modelAndView = new ModelAndView();     
    modelAndView.addObject("name", name);   
    modelAndView.addObject("age", age);   
    modelAndView.setViewName("regurltest");    
    return modelAndView;  
}  

二、数据绑定

1.@RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;

2.@PathVariable,绑定URL模板变量值;

3.@CookieValue,绑定Cookie数据;

4.@RequestHeader,绑定请求头数据;

5.@ModelAttribute,绑定数据到Model;

6.@SessionAttributes,绑定数据到Session;

7.@RequestBody,用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

8.@RequestPart,绑定“multipart/data”数据,并可以根据数据类型进项对象转换;

@RequestParam 示例步骤 验证文件绑定
     1.添加commons-fileupload-1.3.1.jar和commons-io-2.2.jar
     2.配置spring-servlet.xml文件支持文件上传
<!-- 支持上传文件 -->    
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
    <!-- 设置上传文件的最大尺寸为1MB -->    
    <property name="maxUploadSize">    
        <value>1048576</value>    
    </property>  
    <property name="defaultEncoding">   
        <value>UTF-8</value>   
    </property>  
</bean> 
3.controller file

@Controller  
@RequestMapping(value = "/databind")  
public class DataBindController {  

    @RequestMapping(value="/parambind", method = {RequestMethod.GET})  
    public ModelAndView paramBind(){  

        ModelAndView modelAndView = new ModelAndView();    
        modelAndView.setViewName("parambind");    
        return modelAndView;  
    }  

    @RequestMapping(value="/parambind", method = {RequestMethod.POST})  
    public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam") String formParam, @RequestParam("formFile") MultipartFile formFile){  

        //如果不用注解自动绑定,我们还可以像下面一样手动获取数据  
        String urlParam1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);  
        String formParam1 = ServletRequestUtils.getStringParameter(request, "formParam", null);  
        MultipartFile formFile1 = ((MultipartHttpServletRequest) request).getFile("formFile");   

        ModelAndView modelAndView = new ModelAndView();    
        modelAndView.addObject("urlParam", urlParam);    
        modelAndView.addObject("formParam", formParam);    
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());    

        modelAndView.addObject("urlParam1", urlParam1);    
        modelAndView.addObject("formParam1", formParam1);    
        modelAndView.addObject("formFileName1", formFile1.getOriginalFilename());    
        modelAndView.setViewName("parambindresult");    
        return modelAndView;  
    }  
}  


<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <form action="parambind?urlParam=AAA" method="post" enctype="multipart/form-data">   
        <input type="text" name="formParam" /><br/>   
        <input type="file" name="formFile" /><br/>  
        <input type="submit" value="Submit" />  
    </form>    
</body>  
</html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    自动绑定数据:<br/><br/>  
    ${urlParam}<br/>  
    ${formParam}<br/>  
    ${formFileName}<br/><br/><br/><br/>  
    手动获取数据:<br/><br/>  
    ${urlParam1}<br/>  
    ${formParam1}<br/>  
    ${formFileName1}<br/>  
</body>  
</html>

上面如何把数据绑定到单个变量,但在实际应用中我们通常需要获取的是model对象,
不需要把数据绑定到一个个变量然后在对model赋值,只需要把model加入相应的action参数(这里不需要指定绑定数据的注解)
SpringMVC会自动进行数据转换并绑定到model对象上。

1. Account类
 
 

public class AccountModel {  

    private String username;  
    private String password;  
 

... setter getter

}

2. controller

@RequestMapping(value="/modelautobind", method = {RequestMethod.GET})

public String modelAutoBind(HttpServletRequest request, Model model){  

    model.addAttribute("accountmodel", new AccountModel());  
    return "modelautobind";  
}  

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})  
public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){  

    model.addAttribute("accountmodel", accountModel);  
    return "modelautobindresult";  
}  

3.modelautobind.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>  

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <form:form modelAttribute="accountmodel" method="post">       
        用户名:<form:input path="username"/><br/>  
        密 码:<form:password path="password"/><br/>  
        <input type="submit" value="Submit" />  
    </form:form>    
</body>  
</html>  
 

4. modelautobindresult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    用户名:${accountmodel.username}<br/>  
    密 码:${accountmodel.password}  
</body>  
</html> 


5.summary

@RequestParam的完整写法

@RequestParam(value=”username”, required=true, defaultValue=”AAA”)

value表示要绑定请求中参数的名字;

required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回404;

defaultValue表示如果请求中指定的参数值为空时的默认值;

要绑定的参数如果是值类型必须要有值否则抛异常,如果是引用类型则默认为null(Boolean除外,默认为false);

在刚才添加的2个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,

这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。

同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。


 
 

猜你喜欢

转载自blog.csdn.net/quanaianzj/article/details/78191006