@markdown
# RequestMapping, Form 데이터 처리, ResponseBody 사용법
<br/>
## Request Mapping
____
- MethodController 작성
<pre><code class="java" style="font-size:14px">@Controller
@RequestMapping(value="/method/method.do")
public class MethodController {
@RequestMapping(value="/method/method.do", method=RequestMethod.GET)
public String callGet(){
return "method/methodForm";
}
@RequestMapping(value="/method/method.do", method=RequestMethod.POST)
public String callPost(){
return "method/methodProcess";
}
}
</code></pre>
- jsp 페이지 작성
<pre><code class="html" style="font-size:14px"><methodForm.jsp>
<body>
<form action="<%= request.getContextPath() %>/method/method.do" method="POST">
<input type="submit" value="전송"/>
</form>
</body>
</code></pre>
- methodProcess.jsp
<pre><code class="html" style="font-size:14px"><body>
<h1>MethodSpring클래스에서 호출됨</h1>
</body>
</code></pre>
<br/>
## Form 데이터 처리
- joinForm.jsp 페이지 작성
<pre><code class="html" style="font-size:14px"><body>
<form action="<%= request.getContextPath()%>/form/join.do">
아이디 : <input type="text" name="id" size="20"/><br/>
패스워드 : <input type="password" name="password" size="20"/><br/>
이름 : <input type="text" name="name" size="20"/> <br/>
<input type="submit" value="전송"/>
</form>
</body>
</code></pre>
- memberInfo.jsp 결과 확인 페이지 작성
<pre><code class="html" style="font-size:14px"><body>
<h1>회원 정보</h1>
id : ${member.id}<br/>
password : ${member.password}<br/>
name : ${member.name}<br/>
</body>
</code></pre>
<br/>
### MemberController 코드
<pre><code class="java" style="font-size:14px">@RequestMapping("/join.do")
public String join(HttpServletRequest request) {
String id = request.getParameter("id");
String password = request.getParameter("password");
String name = request.getParameter("name");
MemberVO member = new MemberVO();
member.setId(id);
member.setPassword(password);
member.setName(name);
request.setAttribute("member", member);
return "form/memberInfo";
}
</code></pre>
<br/>
### MemberController - @RequestParam 활용
<pre><code class="java" style="font-size:14px">@RequestMapping("/join.do")
public String join(HttpServletRequest request,
@RequestParam("id") String id,
@RequestParam("password") String pass,
@RequestParam("name") String name) {
MemberVO member = new MemberVO();
member.setId(id);
member.setPassword(pass);
member.setName(name);
request.setAttribute("member", member);
return "form/memberInfo";
}
</code></pre>
<br/>
### MemberController - @ModelAttribute 활용
- JSP에서 사용할 공유 객체명 변경
<pre><code class="java" style="font-size:14px">@RequestMapping("/join.do")
public String join(@ModelAttribute("member") MemberVO member) {
System.out.println(member.getId());
System.out.println(member.getPassword());
System.out.println(member.getName());
return "form/memberInfo";
}
</code></pre>
<br/>
### MemberController - VO 객체 활용
- return 받는 `memberInfo.jsp`에서 memberVO를 자동으로 인식하고 사용할 수 있다.
- MemberVO 클래스 이름의 소문자인 memberVO로 인식함
<pre><code class="java" style="font-size:14px">@RequestMapping("/join.do")
public String join(MemberVO member) {
System.out.println(member.getId());
System.out.println(member.getPassword());
System.out.println(member.getName());
return "form/memberInfo";
}
</code></pre>
- memberInfo.jsp 수정
<pre><code class="html" style="font-size:14px">id : ${memberVO.id}
<br /> password : ${memberVO.password}
<br /> name : ${memberVO.name}
<br />
</code></pre>
<br/>
### MemberController - ModelAndView 객체 활용
- view 페이지 및 view에서 사용할 객체 공유하는 방법
<pre><code class="java" style="font-size:14px">@RequestMapping("/join.do")
public ModelAndView join(MemberVO member) {
ModelAndView mav = new ModelAndView();
//리턴할 jsp view 이름 입력
mav.setViewName("form/memberInfo");
//공유영역에서 사용할 member 객체 등록
mav.addObject("member", member);
return mav;
}
</code></pre>
<br/>
## @ResponseBody
____
- `@ResponseBody`는 `xml` 또는 `json`과 같은 메시지 기반의 서비스를 만들 경우 사용
- 예) AJAX 서비스를 제공하는 컨트롤러
### 1. ResBodyController 만들기
<pre><code class="java" style="font-size:14px">@Controller
@RequestMapping("/ajax")
public class ResBodyController {
@RequestMapping("/resBody.do")
@ResponseBody
public String resStringBody() {
return "OK, 성공";
}
}
</code></pre>
<br/>
### 2. 한글 인코딩 처리 및 Converter 등록
- `spring-mvc.xml` 파일 수정
<pre><code class="java" style="font-size:14px"><mvc:annotation-driven>
<mvc:message-converters>
<!-- Json 한글 인코딩 처리 등록 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=utf-8</value>
</list>
</property>
</bean>
<!-- Json 처리 컨버터 등록 -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=utf-8</value>
<value>application/json; charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
</code></pre>
<br/>
### 3. JSON 응답 처리
- ResBodyController 코드 추가
- Map, List, VO 등 다양한 자료형으로 JSON 응답 처리할 수 있다.
<pre><code class="java" style="font-size:14px">@ResponseBody
public Map<String, String> resJsonBody() {
Map<String, String> result = new HashMap<String, String>();
result.put("id", "user");
result.put("name", "lee");
result.put("addr", "서울");
return result;
}
@RequestMapping("/resVOBody.json")
@ResponseBody
public MemberVO resJsonVOBody() {
MemberVO vo = new MemberVO();
vo.setId("user");
vo.setName("lee");
vo.setPassword("1234");
return vo;
}
@RequestMapping("/resVOListBody.json")
@ResponseBody
public List<MemberVO> resJsonVOListBody() {
List<MemberVO> list = new ArrayList<>();
for (int i = 1; i < 4; i++) {
MemberVO vo = new MemberVO();
vo.setId("sbc");
vo.setName("sbc");
vo.setPassword("1234");
list.add(vo);
}
return list;
}
</code></pre>
<br/>
### 4. 관련 라이브러리 denpendency 라이브러리 설정
- `pom.xml` 파일 dependency 추가
- `MappingJackson2HttpMessageConverter`에서 사용하는 라이브러리 다운로드
<pre><code class="java" style="font-size:14px"><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
</code></pre>
<br/>
### 5. JSON URL 매핑 등록
- `web.xml 파일 수정`
<pre><code class="java" style="font-size:14px"><servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
</code></pre>
<br/>
### 6. 호출
<pre><code class="html" style="font-size:14px"><a href="<%=request.getContextPath() %>/ajax/resBody.json">
JSON 응답
</a><br />
</code></pre>
<br/>
## Controller 없이 페이지 매핑하기
____
- fileUploadForm.jsp
<pre><code class="html" style="font-size:14px"><body>
<h2>파일 업로드 테스트</h2>
<form action="<%= request.getContextPath() %>/file/upload.do"
method="post"
enctype="multipart/form-data">
<input type="text" name="id" value="test" /><br/>
<input type="file" name="attachfile1" /><br/>
<input type="file" name="attachfile2" /><br/>
<input type="submit" value="업로드" />
</form>
</body>
</code></pre>
- spring-mvc.xml 파일에 내용 추가
<pre><code class="java" style="font-size:14px"><mvc:view-controller path="/file/uploadForm.do" view-name="file/fileUploadForm"/>
</code></pre>
- 호출할 index.jsp 페이지에서 `.do` 호출
<pre><code class="html" style="font-size:14px"><a href="<%= request.getContextPath() %>/upload/uploadForm.do">
파일업로드
</a><br/>
</code></pre>
- 호출 순서 : `/uploadForm.do` -> `mvc:view-controller path` -> `fileUploadForm.jsp` 요청
'웹 프로그래밍' 카테고리의 다른 글
MyBatis - 설치, Mapping 태그 (0) | 2017.07.11 |
---|---|
Spring - AOP annotaion 용어, 패턴매칭, 자동주입 (0) | 2017.07.07 |
Spring - DI 자동 주입, AOP (0) | 2017.07.06 |
Spring - 핵심 개념(IoC, DI) (0) | 2017.07.05 |
Spring - Maven 설치 및 Eclipse 환경설정 하기 (0) | 2017.07.04 |