22.06.07
RequestController.java에서는 맵핑url이 다 /ruquest로 시작한다.
/request 중복을 제거 하는 방법.
클래스위에 @RequestMapping("/폴더명")을 추가하면 파일명만 적으면 된다
@Controller
@RequestMapping("/request") //컨트롤러 자체에 공통된 URI를 맵핑.
public class RequestController {
}
//("/request/join) request생략가능
@GetMapping("/join")
public String register() {
System.out.println("/request/join: GET");
return "request/join";
}
리턴의 문자열값이 요청url과 같다면 메서드 void로 변경하고 리턴값을 지울수 있음.
컨트롤러 내의 메서드 타입을 void로 선언하면 요청이 들어온 URI값을 뷰 리졸버에게 전달한다.
@GetMapping("/join")
public String register() {
return "request/join";
}
//같은 내용
@GetMapping("/join")
public void register() { }
RequestController.java에서 jsp 화면 요청
@GetMapping("/join")
public void register() { }
join.jsp에서는 사용자에게 받을 입력창 제공.
입력한 값 post방식으로 RequestController로 /basic/request/join 요청이 들어감.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>요청 파라미터값 테스트</h2>
<form action="/basic/request/join" method="post">
<fieldset>
<legend>회원 가입 양식</legend>
<p>
# ID: <input type="text" name="userId" size="10"><br>
# PW: <input type="password" name="userPw" size="10"><br>
# NAME: <input type="text" name="userName" size="10"><br>
# HOBBY:
<input type="checkbox" name="hobby" value="soccer"> 축구
<input type="checkbox" name="hobby" value="read"> 독서
<input type="checkbox" name="hobby" value="music"> 음악감상
<br>
<input type="submit" value="확인">
</p>
</fieldset>
</form>
</body>
</html>
전통적인 jsp/servlet 방식의 파라미터 읽기 처리 방법.
RequestController.java
@PostMapping("/join")
public void register(HttpServletRequest request) {
System.out.println("/request/join: POST");
System.out.println("ID:" + request.getParameter("userId"));
System.out.println("PW:" + request.getParameter("userPw"));
System.out.println("HOBBY:" + Arrays.toString(request.getParameterValues("hobby")));
//배열은 Arrays.toString()이용
}
@RequestParam 아노테이션을 이용한 요청 파라미터 처리.
<script>
@PostMapping("/join")
public void register(@RequestParam("userId") String id,
@RequestParam("userPw") String pw,
@RequestParam("hobby") List<String> hobbies) {
System.out.println("ID:" + id);
System.out.println("PW:" + pw);
System.out.println("hobby:" + hobbies);
//List는 toString오버라이딩 되어있음,바로 호출 가능
}
</script>
@RequestParam(value="hobby", required=false, defaultValue="no hobby person") List<String> hobbies
<script>
public class UserVO {
//파라미터 변수명과 VO변수명 일치해야함.
private String userId;
private String userPw;
private String userName;
private List<String> hobby;
//getter,setter 생성
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
...
</script>
<script>
@PostMapping("/join")
public void register(UserVO user) {
System.out.println("ID:" + user.getUserId());
System.out.println("PW:" + user.getUserPw());
System.out.println("NAME:" + user.getUserName());
System.out.println("HOBBY:" + user.getHobby());
}
</script>
ID:aaa
PW:1111
NAME:ì¥ì ì
HOBBY:[read, music]
한글 전달 시 깨짐 발생하기 때문에 스프링에서 제공하는 필터 이용해서 encoding 설정.
web.xml에 필터 등록. 외울 필요 없이 필요하면 복사해서 사용.
<!-- 한글 인코딩 필터 설정(톰캣 내부의 한글처리) -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 위에 지정한 encodingFilter이름을 모든 패턴에 적용 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ID:aaa
PW:111
NAME:장정원
HOBBY:[soccer, read]
# 문제
1. RequestController에 현재 파일을 화면에 열어주는 메서드를 선언.
- url: /request/quiz: GET
- view: /request/req-quiz.jsp
- method name: quiz()
2. RequestController에 전송된 아이디, 비밀번호 파라미터를 받아
로그인을 처리하는 메서드를 선언. (폼태그는 직접 작성)
- url: /request/quiz: POST
- views:
성공시: /request/login-success.jsp
실패시: /request/login-fail.jsp
- method name: quiz()
3. 로그인 성공 조건
- id: abc1234, pw: aaa1111
RequestController.java
<script>
//화면열기
@GetMapping("/quiz")
public String quiz() {
return "request/req-quiz";
}
//값얻어오기1. @RequestParam 이용
@PostMapping("/quiz")
public String quiz(@RequestParam("userId") String id,
@RequestParam("userPw") String pw) {
if(id.equals("abc1234") && pw.equals("aaa1111")) {
return "request/login-success"; //id,pw 일치시
} else {
return "request/login-fail"; //id,pw 불일치시
}
}
//값얻어오기2. 커맨드객체 이용
@PostMapping("/quiz")
public String quiz(UserVO vo) {
if(vo.getUserId().equals("abc1234") && vo.getUserPw().equals("aaa1111")) {
return "request/login-success";
} else {
return "request/login-fail";
}
}
</script>
req-quiz.jsp
<body>
<h3>파라미터값 처리하기 문제!</h3>
<form action="/basic/request/quiz" method="post">
<input type="text" name="userId" size="10" placeholder="ID"> <br>
<input type="password" name="userPw" size="10" placeholder="PW"> <br>
<input type="submit" value="확인">
</form>
</body>