Spring 요청 파라미터

정원·2022년 6월 7일
0

Spring

목록 보기
6/11

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

메서드 void변경

리턴의 문자열값이 요청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"> 축구 &nbsp; 
			<input type="checkbox" name="hobby" value="read"> 독서 &nbsp; 
			<input type="checkbox" name="hobby" value="music"> 음악감상 &nbsp;
			<br>
			<input type="submit" value="확인"> 
			</p>
		</fieldset>
	</form>
</body>
</html>

값얻어오는 방법1.HttpServletRequest 객체

전통적인 jsp/servlet 방식의 파라미터 읽기 처리 방법.

  • HttpServletRequest 객체를 활용.(우리가 jsp에서 활용하던 방식)
    스프링에서 사용 잘 안함.

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()이용
}

값얻어오는 방법2.@RequestParam

@RequestParam 아노테이션을 이용한 요청 파라미터 처리.

  • @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>
  • 해당 어노테이션의 추가 속성
  1. required – 해당 파라미터가 필수가 아닌 경우 지정
  2. defaultValue - required지정시 기본값 을 지정
    id,pw는 아무것도 입력하지 않으면 null로 되지만,
    List의 경우 아무것도 체크하지 않으면 에러가 발생한다.
    해결 방법 List쪽에 설정추가.
    @RequestParam(value="파라미터값", required = false, defaultValue = “기본값")
@RequestParam(value="hobby", required=false, defaultValue="no hobby person") List<String> hobbies

값얻어오는 방법3. 커맨드 객체를 활용한 파라미터 처리.

  • 파라미터 데이터와 연동되는 VO 클래스가 필요하다.
    모든 값 안넘어와도 사용 가능. 없으면 null.
    여러 값일때 사용.
  • UserVO.java 생성
    파라미터 변수명과 VO변수명 일치해야함!!
<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>

0개의 댓글