>  기사  >  Java  >  SpringMVC 학습시리즈(4) 데이터 바인딩-1

SpringMVC 학습시리즈(4) 데이터 바인딩-1

黄舟
黄舟원래의
2017-03-03 10:52:081477검색

시리즈 (SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1)에서는 요청이 작업에 매핑되는 방법을 소개했습니다. 물론 다음 단계는 요청에서 데이터를 얻는 방법이며, 이는 이 문서의 내용인 데이터 바인딩으로 이어집니다.

먼저 데이터 바인딩을 위한 주석을 살펴보겠습니다.

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.@RequestParam은 단일 요청 데이터를 바인딩합니다. 이는 URL의 데이터, 양식으로 제출된 데이터 또는 업로드된 파일
SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.@PathVariable, URL 템플릿 변수 값 바인딩
SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.@CookieValue, 쿠키 데이터 바인딩
SpringMVC 학습시리즈(4) 데이터 바인딩-1.@RequestHeader, 요청 헤더 데이터 바인딩,
6.@SessionAttributes에 데이터 바인딩,
7.@RequestBody에 Content-Type이 application/x-www-form-urlencoded가 아닌 콘텐츠를 처리하는 데 사용됨(예: application/) json, application/xml 등
8.@RequestPart, "multipart/data" 데이터를 바인딩하고 데이터 유형에 따라 객체 변환을 입력할 수 있습니다.

사용 방법을 살펴보겠습니다. 🎜 >

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.@RequestParam:

파일 바인딩을 확인하려면 먼저 다음을 수행해야 합니다.

a commons-fileupload-SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.jar 및 commons를 입력합니다. -io- SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.SpringMVC 학습시리즈(4) 데이터 바인딩-1.jar 두 개의 jar 패키지가 프로젝트에 추가되었습니다.

b. 파일 업로드를 지원하도록 프로젝트에서 springservlet-config.xml 파일을 구성합니다.

<!-- 支持上传文件 -->  <bean>  
    <!-- 设置上传文件的最大尺寸为SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1MB -->  
    <property>  
        <value>SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-10SpringMVC 학습시리즈(4) 데이터 바인딩-18576</value>  
    </property>
    <property> 
        <value>UTF-8</value> 
    </property></bean>


그 중

maxUploadSize

는 업로드되는 파일의 최대 크기를 제한하는 데 사용되며, 설정되지 않은 상태로 둘 수도 있습니다. 이는 업로드되는 파일의 크기에 제한이 없음을 의미합니다. defaultEncoding은 업로드된 파일의 인코딩 형식을 설정하는 데 사용되며 업로드된 파일의 중국어 이름이 왜곡되는 문제를 해결하는 데 사용됩니다. 사용 방법을 살펴보겠습니다.

가져오기 및 게시 요청에 각각 해당하는 SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1개의 paramBind 작업이 있는 DataBindController를 추가합니다.

package com.demo.web.controllers;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView;

@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 urlParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);
        String formParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 = ServletRequestUtils.getStringParameter(request, "formParam", null);
        MultipartFile formFileSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 = ((MultipartHttpServletRequest) request).getFile("formFile"); 
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("urlParam", urlParam);  
        modelAndView.addObject("formParam", formParam);  
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());  
        
        modelAndView.addObject("urlParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1", urlParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1);  
        modelAndView.addObject("formParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1", formParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1);  
        modelAndView.addObject("formFileNameSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1", formFileSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.getOriginalFilename());  
        modelAndView.setViewName("parambindresult");  
        return modelAndView;
    }
        
}


view 폴더에 paraambind.jsp 및 paraambindresult.jsp라는 두 개의 보기를 추가합니다. 내용은 다음과 같습니다.

nbsp;html PUBLIC "-//WSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1C//DTD HTML SpringMVC 학습시리즈(4) 데이터 바인딩-1.0SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 Transitional//EN" "http://www.wSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.org/TR/htmlSpringMVC 학습시리즈(4) 데이터 바인딩-1/loose.dtd"><meta><title>Insert title here</title>
    
          
          
             
  

nbsp;html PUBLIC "-//WSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1C//DTD HTML SpringMVC 학습시리즈(4) 데이터 바인딩-1.0SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 Transitional//EN" "http://www.wSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.org/TR/htmlSpringMVC 학습시리즈(4) 데이터 바인딩-1/loose.dtd"><meta><title>Insert title here</title>
    自动绑定数据:

    ${urlParam}
    ${formParam}
    ${formFileName}



    手动获取数据:

    ${urlParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1}
    ${formParamSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1}
    ${formFileNameSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1}


프로젝트 실행, 콘텐츠 입력, 업로드 파일 선택:

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1결과 보기 제출:

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1바운드 데이터를 획득한 것을 확인할 수 있습니다.

위에서 데이터를 단일 변수에 바인딩하는 방법을 설명했지만 실제 애플리케이션에서는 일반적으로 모델 개체를 가져와야 합니다. 데이터를 개별 변수에 바인딩한 다음 비교할 필요가 없습니다. 모델에 값을 할당할 때 해당 작업 매개변수에 모델을 추가하기만 하면 됩니다(여기에서는 데이터 바인딩에 대한 주석을 지정할 필요가 없습니다). Spring MVC는 자동으로 데이터를 변환하여 모델 객체에 바인딩합니다. 모든 것이 그렇게 간단합니다. 테스트 내용은 다음과 같습니다.

添加一个AccountModel类作为测试的model:


package com.demo.web.models;public class AccountModel {    
    private String username;    private String password;    
    public void setUsername(String username){        this.username=username;
    }    public void setPassword(String password){        this.password=password;
    }    
    public String getUsername(){        return this.username;
    }    public String getPassword(){        return this.password;
    }
}

在DataBindController里面添加SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1个modelAutoBind的action分别对应get和post请求:


@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";
}


在views文件夹中添加modelautobind.jsp和modelautobindresult.jsp SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1个视图用于提交数据和展示提交的数据:

modelautobind.jsp:

nbsp;html PUBLIC "-//WSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1C//DTD HTML SpringMVC 학습시리즈(4) 데이터 바인딩-1.0SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 Transitional//EN" "http://www.wSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.org/TR/htmlSpringMVC 학습시리즈(4) 데이터 바인딩-1/loose.dtd"><meta><title>Insert title here</title>
    
              用户名:
        密 码:
             
  

modelautobindresult.jsp :

nbsp;html PUBLIC "-//WSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1C//DTD HTML SpringMVC 학습시리즈(4) 데이터 바인딩-1.0SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 Transitional//EN" "http://www.wSpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.org/TR/htmlSpringMVC 학습시리즈(4) 데이터 바인딩-1/loose.dtd"><meta><title>Insert title here</title>
    用户名:${accountmodel.username}
    密 码:${accountmodel.password}


运行测试:

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1

用户名 输入AAA 密码 输入BBB,提交:

SpringMVC 학습시리즈(4) 데이터 바인딩-1

可以看到结果显示正确,说明自动绑定成功。

注:

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.关于@RequestParam的参数,这是一个@RequestParam的完整写法@RequestParam(value="username", required=true, defaultValue="AAA")。

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

required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回SpringMVC 학습시리즈(4) 데이터 바인딩-10SpringMVC 학습시리즈(4) 데이터 바인딩-1;

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

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

 

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1.在刚才添加的SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。

 

SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1. 방금 추가한 view modelautobind.jsp에서 form:form, form:input Wait 태그는 Spring MVC에서 제공하는 양식 태그로, 모델 데이터를 양식에 쉽게 바인딩할 수 있습니다(물론 기본 HTML 양식 태그를 계속 사용하도록 선택할 수도 있습니다). 스프링을 사용하려면 MVC는 @ taglib prefix="form에 대한 참조를 추가하기만 하면 됩니다. "우리="http://www.php.cn/" %>이면 충분해요, 봄에 대해서 MVC 양식 태그의 구체적인 내용은 향후 기사에서 소개될 예정입니다.

위 내용은 SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1)의 Data Binding-SpringMVC 학습시리즈(SpringMVC 학습시리즈(4) 데이터 바인딩-1) 데이터 바인딩-1 내용이다. 중국사이트(www.php.cn)!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.