Spring MVC 이해 및 주요 사용 설명

핵심 원리
1、       사용자 가 서버 에 요청 을 보 냅 니 다.url:user
2、       서버 에서 요청 을 받 았 습 니 다.디 스 패 치 servlet 를 발견 하면 처리 할 수 있 습 니 다.그래서 Dispatch Servlet 을 호출 합 니 다.
3、       Dispatch Servlet 내부 에서 Handle Mapping 을 통 해 이 url 에 대응 하 는 Controller 가 있 는 지 확인 합 니 다.있 으 면 Controller 를 호출 합 니 다.
4、    Control 실행 시작
5、       Controller 가 실 행 된 후 문자열 을 되 돌려 주면 ViewResolver 는 문자열 을 해당 하 는 보기 대상 으로 변환 합 니 다.Model AndView 대상 으로 돌아 가면 해당 대상 자체 에 보기 대상 정보 가 포 함 됩 니 다.
6、       Dispatch Servlet 은 보기 대상 의 데 이 터 를 서버 에 출력 합 니 다.
7、       서버 가 클 라 이언 트 에 데 이 터 를 출력 합 니 다.
 
관련 jar 가방 의 의미:
1、   org.springframework.aop-3.0.3.RELEASE.jar         ----->spring 의 op 절단면 프로 그래 밍
2、   org. springframework. asm - 3.0.3. RELEASE. jar --- > spring 독립 된 asm 바이트 생 성 프로그램
3、   org. springframework. beans - 3.0.3. RELEASE. jar --- > IOC 의 기초 실현
4、   org.springframework.context-3.0.3.RELEASE.jar      ----->IOC 기반 확장 서비스
5、   org. springframework. core - 3.0.3. RELEASE. jar --- > spring 의 핵심 패키지
6、   org.springframework.expression-3.0.3.RELEASE.jar   ----->spring 의 표현 식 언어
7、   org. springframework. web - 3.0.3. RELEASE. jar --- > 웹 공구 꾸러미
8、   org.springframework.web.servlet-3.0.3.RELEASE.jar  ----->화면 음악 공구 꾸러미
 
 
주해
1、@Controller
@Controller
public class UserController {
.......
.......

}

 
Struts 1 과 마찬가지 로 Spring 의 Controller 는 Singleton 의 것 이다.여러 요청 스 레 드 에 의 해 공유 된다 는 뜻 이다.그래서 우 리 는 컨트롤 러 를 무상 태 류 로 설계 했다.
 
웹 xml 에 설정 하기
 
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:spring-mvc.xmlparam-value>
  context-param>

 
spring - mvc. xml 설정 이 필요 합 니 다.
    
    <context:component-scan base-package="controller" />

 
 
 
2、@RequestMapping
① 클래스 앞에서 정의 하면 url 과 클래스 를 연결 합 니 다.(이 클래스 에 하나의 방법 만 있다 면 이렇게 쓸 수 있 습 니 다. 이 주 소 를 방문 하여 이 방법 을 직접 호출 할 수 있 습 니 다)
예제 코드 는 다음 과 같다.
@Controller
@RequestMapping("/queryuser")
public class UserController {
......
......
}

 
 
② 방법 앞에서 정의 하면 url 과 클래스 의 방법 을 연결 합 니 다.
예제 코드 는 다음 과 같다.
@Controller
public class UserController {

    @RequestMapping("/queryuser")
    public Object queryUserList(HttpServletRequest request, HttpServletResponse response) {
.....
.....
    }
}

 
 
 
3、@RequestParam
A) 간단 한 형식의 바 인 딩 을 처리 하 는 데 자주 사용 되 며 Request. getParameter () 를 통 해 얻 은 String 은 간단 한 형식 으로 직접 변환 할 수 있 습 니 다 (String -- > 간단 한 형식의 변환 작업 은 ConversionService 가 설정 한 변환기 로 이 루어 집 니 다).request. getParameter () 방식 으로 인 자 를 가 져 오기 때문에 get 방식 에서 query String 의 값 을 처리 할 수도 있 고 post 방식 에서 body data 의 값 을 처리 할 수도 있 습 니 다.
B) Content - Type 처리:  application/x-www-form-urlencoded 인 코딩 의 내용, 제출 방식 GET, POST;
  • GET 모드 에서 @ PathVariable 바 인 딩 입력 인 자 를 사용 하여 Restful 스타일 에 매우 적합 합 니 다.매개 변수 와 경로 의 관 계 를 숨 겼 기 때문에 사이트 의 안전성 을 향상 시 키 고 페이지 를 정태 화 시 켜 악의 적 인 공격 위험 을 낮 출 수 있다.
  • POST 모드 에서 @ RequestBody 바 인 딩 요청 대상 을 사용 하면 Spring 이 프로 토 콜 전환 을 도와 JSon, Xml 프로 토 콜 을 필요 한 대상 으로 변환 합 니 다.

  • C) 이 주 해 는 두 가지 속성 이 있 습 니 다: value, required;value 는 값 을 입력 할 id 이름 을 지정 합 니 다. required 는 매개 변수 가 연결 되 어야 하 는 지 여 부 를 표시 합 니 다.
     
    /**
         *        
         * **/
        @RequestMapping(value = "/del")
        @ResponseBody
        public MsgBean deleteAgents(@RequestParam("ids")String ids[]){
            MsgBean msg = null;
            try {
                msg = agentsService.delAgents(ids);
            } catch (Exception e) {
                logger.error("         ..." + e.getMessage());
                throw new BusinessException(e.getMessage());
            }
            return msg;
        }
    @Controller  
    public class PersonController {  
      
        /** 
         *        
         *  
         * @param id 
         * @return 
         */  
        @RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)  
        public @ResponseBody  
        Person porfile(@PathVariable int id, @PathVariable String name,  
                @PathVariable boolean status) {  
            return new Person(id, name, status);  
        }  
      
        /** 
         *    
         *  
         * @param person 
         * @return 
         */  
        @RequestMapping(value = "/person/login", method = RequestMethod.POST)  
        public @ResponseBody  
        Person login(@RequestBody Person person) {  
            return person;  
        }  
    }  

    비고: @ RequestMapping (value = "/ person / profile / {id} / {name} / {status}", method = RequestMethod. GET) 의 {id} / {name} / {status} 은 @ PathVariable int id, @ PathVariable String name, @ PathVariable boolean status 와 일일이 대응 하여 이름 에 따라 일치 합 니 다.restful 스타일 입 니 다. 
    맵 이름 이 다 르 면 다음 과 같은 방식 을 참고 할 수 있 습 니 다.
    @RequestMapping(value = "/person/profile/{id}", method = RequestMethod.GET)  
    public @ResponseBody  
    Person porfile(@PathVariable("id") int uid) {  
        return new Person(uid, name, status);  
    }  

     
     
     
    4、@ResponseBody
    역할: 
          이 주 해 는 Controller 의 방법 을 되 돌려 주 는 대상 으로, 적절 한 HttpMessageConverter 를 통 해 지 정 된 형식 으로 변환 한 후 Response 대상 의 body 데이터 영역 에 기록 합 니 다.
    사용 시기:
          돌아 오 는 데 이 터 는 html 태그 의 페이지 가 아니 라 다른 형식의 데이터 일 때 (예 를 들 어 json, xml 등) 사용 합 니 다.
     코드
     
     
    5、@RequestBody
    역할: 
          i) 이 주 해 는 Request 가 요청 한 body 부분 데 이 터 를 읽 는 데 사 용 됩 니 다. 시스템 기본 설정 의 HttpMessageConverter 를 사용 하여 분석 한 다음 해당 데 이 터 를 되 돌 릴 대상 에 연결 합 니 다.
          ii) HttpMessage Converter 가 되 돌아 오 는 대상 데 이 터 를 controller 의 방법 에 대한 매개 변수 에 연결 합 니 다.
    사용 시기:
    A) GET, POST 방식 을 제시 할 때 request header Content - Type 의 값 에 따라 판단 한다.
  •     application / x - www - form - urlencoded, 선택 할 수 있 습 니 다 (즉, 필요 하지 않 습 니 다. 이러한 상황 의 데이터 @ RequestParam, @ ModelAttribute 도 처리 할 수 있 습 니 다. 물론 @ RequestBody 도 처리 할 수 있 습 니 다).
  •     multipart / form - data, 처리 할 수 없습니다 (즉, @ RequestBody 를 사용 하면 이 형식의 데 이 터 를 처리 할 수 없습니다).
  •     다른 형식 은 반드시 (다른 형식 은 application / json, application / xml 등 을 포함 합 니 다. 이 형식의 데 이 터 는 @ RequestBody 로 처리 해 야 합 니 다).

  • B) PUT 방식 으로 제출 할 때 request header Content - Type 의 값 에 따라 판단 합 니 다.
  •     application / x - www - form - urlencoded, 필수;
  •     multipart / form - data, 처리 할 수 없습니다.
  •     기타 형식, 필수;

  • 설명: request 의 body 부분의 데이터 인 코딩 형식 은 header 부분의 Content - Type 에서 지정 합 니 다.
     
     
    6、@SessionAttributes
    @SessionAttributes:
    이 주 해 는 HttpSession 의 attribute 대상 의 값 을 연결 하 는 데 사용 되 며, 방법의 매개 변수 에서 사용 하기 편리 합 니 다.
    이 주 해 는 value, types 두 개의 속성 이 있 으 며, 이름과 형식 을 통 해 사용 할 attribute 대상 을 지정 할 수 있 습 니 다.
    @Controller
    @RequestMapping("/user")
    @SessionAttributes({"u","a"})   // ModelMap      u、a    session 。  ,request session    。
    publicclass UserController  {
        @RequestMapping(params="method=list")
        public String list(ModelMap map) {              
      System.out.println("HelloController.handleRequest()"); map.addAttribute("u","users"); // u request , 。 return"index"; } }

     
    index 코드
    <body>
       <h1>${requestScope.u.uname}h1>
       <h1>${sessionScope.u.uname}h1>
      body>

     
     
     
    7、@ModelAttribute
    이 주 해 는 두 가지 용법 이 있 는데 하 나 는 방법 에 사용 되 고 하 나 는 매개 변수 에 사용 된다.
    방법 상 사용 시:  일반적으로 @ RequestMapping 을 처리 하기 전에 바 인 딩 을 요청 하기 위해 배경 에서 조회 해 야 하 는 model;
    매개 변수 에 사용 할 때: 이름 을 통 해 대응 하고 해당 이름 의 값 을 주해 의 매개 변수 bean 에 연결 합 니 다.바 인 딩 할 값 은:
    A) @ SessionAttributes 에서 사용 하 는 attributes 대상 에;
    B) @ ModelAttribute 는 방법 상 지정 한 model 대상 에 사 용 됩 니 다.
    C) 상기 두 가지 상황 이 없 을 때 new 는 바 인 딩 이 필요 한 bean 대상 을 연결 한 다음 에 request 에서 이름 에 대응 하 는 방식 으로 값 을 bean 에 연결 합 니 다.
     
     사용 방법 상 @ ModelAttribute 의 예제 코드: 
    @ModelAttribute  
    public Account addAccount(@RequestParam String number) {  
        return accountManager.findAccount(number);  
    }  

    이러한 방식 의 실제 효 과 는 @ RequestMapping 방법 을 호출 하기 전에 request 대상 의 model 에 put ("account", account) 를 넣 는 것 입 니 다.
     
    매개 변수 에 사용 할 @ ModelAttribute 예제 코드:
    @RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)  
    public String processSubmit(@ModelAttribute Pet pet) {  
         
    } 

    먼저 @ SessionAttributes 에 연 결 된 Pet 대상 이 있 는 지, 없 는 경우 @ ModelAttribute 방법 차원 에서 Pet 대상 이 연결 되 어 있 는 지, 없 는 경우 URI template 의 값 을 해당 하 는 이름 으로 Pet 대상 의 각 속성 에 연결 합 니 다.
     
     
    @ ModelAttribute 는 @ Session Attributes 와 함께 사용 할 수 있 습 니 다.ModelMap 에서 속성의 값 을 통 해 이 주 해 를 통 해 지정 한 변 수 를 자동 으로 부여 할 수 있 습 니 다.
     예제 코드 는 다음 과 같다.
    @Controller
    @RequestMapping("/user")
    @SessionAttributes({"u","a"}) 
    publicclass UserController  {
       
        @RequestMapping(params="method=list1")
        public String list1(ModelMap map) {
           System.out.println("HelloController.handleRequest()");
           map.addAttribute("u","   ");
           return"index";
        }
       
        @RequestMapping(params="method=list2")
    public String list2(@ModelAttribute("u")String username ,ModelMap map) {
           System.out.println("HelloController.handleRequest()");
           System.out.println(username );
           return"index";
        }
       
    }

    위 에서 먼저 list 1 방법 을 호출 한 다음 에 list 2 방법 을 호출 합 니 다. 
     
    다음으로 전송:https://www.cnblogs.com/wzqkalil/p/5328100.html

    좋은 웹페이지 즐겨찾기