성장 일기/쌍용교육센터 / / 2023. 5. 8. 12:44

0508/Spring MVC

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/sangyongSpring에 올려두었습니다.

 

Spring MVC  Project 파일 배치

 

Spring MVC 흐름

  1. 실행되면 DispatcherServlet이 ServletConfig.xml을 로딩

      Component를 찾아야 할 패키지 정보

  2. DispatcherServlet에 hello.do 요청(servlet-mapping에 설정한 경로)

  3. DispatcherServlet은 HandlerMapper에 요청을 처리할 Controller  찾기 의뢰

  4. HandlerMapper은 component-scan에 설정된 패키지의 클래스 찾기

  5. HandlerMapper은 DispatcherServlet에 요청을 처리할 클래스명 반환

      ( @Controller가 붙어있는 클래스 )

  6. DispatcherServlet는 반환된 클래스를 객체화 후 method 호출

  7. 호출한 method안에 있는 View 페이지명 반환

  8. DispatcherServlet는 ViewResolver에 View 페이지명 전달

  9. ViewResolver는 검색 결과를 DispatcherServlet에 반환

  10. DispatcherServlet는 반환된 결과에 따라 true면 forward로 이동

        false면 redirect로 이동

 

하위 디렉토리 요청

  - package내 Controller클래스가 요청을 받는다.
    ( package명이나 클래스명은 요청 URL에 포함되지 않는다. ) => 실제 디렉토리가 아님

// 가상의이름
@RequestMapping( value="/하위경로/요청URI", method=RequestMethod.GET)
public String method(){
return "jsp명";
}

  - Model1방식의 개발에서는 폴더명이 웹의 경로에 반영된다. => 폴더로 관련파일을 묶으면된다.


요청 URL과 View 페이지명이 같다면 method의 반환형을 void로 설정할 수 있다.

  - a.do로 요청이 들어왔을 때 a.jsp가 응답된다면 반환형을 void로 설정할 수 있다.

@RequestMapping(value="/a.do", method=RequestMethod.GET)
public void test(){

}
// WEB-INF/views/a.jsp가 존재한다면 a.jsp가 접속자에게 응답된다.


web parameter 처리

  - HttpServletRequest 사용(권장하지 않는다 - 특정 기술( FileUpload )에 종속) 
    접속자의 정보를 받을 때 사용
    요청 파라메터를 받을 때 사용

@RequstMapping
public String method( HttpServletRequeset request ){
// 매개변수로 선언된 HttServletRequest의 getParameter(), getParameterValues()
// method를 사용한다.
// 이름유일
String name=request.getParameter("이름");
// 이름중복
String[] names=request.getParameterValues("이름");

 

단일형을 사용

  - 주의 : HTML Form Control명( web parameter명 )과 method의 parameter명이
              반드시 같아야 한다. 
  - @RequestParam을 사용할 수 있다.
  - web parameter가 하나인 경우에 사용

<a href="요청URL?이름=값&이름=값...">링크</a>
@RequestMapping(value="/요청URI", method=GET)
public String method(String 이름, int 이름... ){

}
//매개 변수를 통해 값을 가져옴

  - 예시

<a href="a.do?name=test&age=20,...">링크</a>
@RequestMapping(value="/a.do", method=RequestMethod.GET)
public String method(String name, int age,... ){ //POJO

}
//name에 test, age에 20이 들어감


* @RequestParam

  - VO를 사용할 때에는 setter method 매개 변수로 처리
  - 매개 변수의 필수 입력 체크, 웹 파라메터가 null인 경우에 처리

  - method의 매개 변수 앞에 정의
  - 필수 입력 속성  required="true"
  - 파라메터 기본값  defaultValue="기본값"

// 예시
public String method(@RequestParam(속성=값,...) 데이터형 변수명,... ){

}
// 필수 입력
public String method(@RequestParam(required=true) 데이터형 변수명,... ){

}
// 기본값
public String method(@RequestParam(required=false,defaultValue="기본값") 데이터형 변수명,... ){

}

 

  - VO 사용

    HTML Form Control명(web parameter명)과 VO의 instance 변수명이 같아야 한다. 

public class TestVO{
  private String name;
  private int age;

  //getter method()
  //setter method()
}

    링크나 form으로 VO 값에 대입 예시

 

    링크 : query string의 parameter 명과 instance 변수명 일치

<a href="test.do?name=test&age=20">클릭</a>

 

    form : HTML Form Control 명과 instance 변수명 일치

<form action="test.do">
  <input type="text" name="name"/>
  <input type="text" name="age"/>
  <input type="submit" value="전송"/>
</form>

    method에서 값을 VO안에 GET방식으로 처리

@RequestMapping(value="/test.do", method=RequestMethod.GET )
  public String method( TestVO tVO ){
  return "jsp 파일명";
  }

 

 

Spring MVC 한글 처리

  - filter 사용
  - 웹 서비스가 요청되기 전에 업무를 처리할 때 사용

    (주 기능 이외의 부가적인 기능을 추가할 때 사용)
  - DD에 설정하여 사용
  - org.springframework.web.filter.CharateterEncodingFilter를 사용


* Filter

  - 업무와 구분되는 부가적인 업무를 구현해놓고 해당 기능이 필요한 곳에서

    기능을 추가하여 사용하기 편리하다.
  - Filter 설정

<filter>
 <filter-name>cef</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
 </init-param>
</filter>

 

  - Filter가 동작할 URL설정

<filter-mapping>
   <filter-name>cef</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>

 

 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

0510/include, session, cookie, fileUpLoad  (0) 2023.05.10
0509/Controller에서 View로 데이터 전송  (0) 2023.05.09
0504/Spring 흐름  (0) 2023.05.04
0502/MVC 패턴  (0) 2023.05.02
0501/MVC 패턴  (0) 2023.05.02
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유