02.request

이현주·2023년 9월 17일
0

Servlet

목록 보기
3/10

1. 요청 파라미터를 UTF-8로 인코딩

request.setCharacterEncoding("UTF-8");
		

2. 요청 파라미터를 받는다.

1)요청 파라미터는 모두 String 타입이다.
2)요청 파라미터가 없으면 null 값으로 처리된다.

String name =request.getParameter("name");
String strAge=request.getParameter("age");

3. 요청 파라미터 타입을 조정한다.

타입을 조정할 때 Exception이 발생하지 않도록 요청 파라미터의 null 처리+ 빈 문자열 처리 가 필요하다.

1) 고전 null 처리

int age =0;
if(strAge !=null){
age = Integer.parseInt(strAge);
} 

2) null 처리를 위한 java.util.Optional 클래스 처리

		 Optional<String> opt = Optional.ofNullable(strAge);
     int age = Integer.parseInt(opt.orElse("0"));  // opt로 감싼 strAge가 null이면 "0"을 꺼낸다.

동일한 요청 파라미터가 2개이상 전달되는경우

getParameterValues메소드를 이용해서 요청 파라미터들을 배열로 받는다.

String[]tel = request.getParameterValues("tel");
String[] hobbies=request.getParameterValues("hobbies");

[RequestServlet.java]

package ex02_request;

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestServlet
 */
@WebServlet("/request")
public class RequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RequestServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());

	//1. 요청을 UTF-8로 인코딩한다.
		request.setCharacterEncoding("UTF-8");
		
	//2. 요청 파라미터를 받는다.
	//	1)요청 파라미터는 모두 String 타입이다.
	//  2)요청 파라미터가 없으면 null 값으로 처리된다.
		String name =request.getParameter("name");
		String strAge=request.getParameter("age");
		
	//3. 요청 파라미터 타입을 조정한다.
	// 타입을 조정할 때 Exception이 발생하지 않도록 요청 파라미터의 [null 처리+ 빈 문자열 처리]가 필요하다.
	
	// 1) 고전 null 처리
		/*
		  int age =0;
		  if(strAge !=null){
		  age = Integer.parseInt(strAge);
		  } 
		 */
		
		
	// 2) null 처리를 위한 java.util.Optional 클래스 처리
		/*
		 Optional<String> opt = Optional.ofNullable(strAge);
     int age = Integer.parseInt(opt.orElse("0"));  // opt로 감싼 strAge가 null이면 "0"을 꺼낸다.
		 */
		
		
		//null처리 + 빈 문자열 처리
		int age=0;
		if(strAge != null && !strAge.isEmpty())
		{
			age=Integer.parseInt(strAge);
		}
	System.out.println(name+","+age);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			
		//1. 요청을 UTF-8로 인코딩한다.
		request.setCharacterEncoding("UTF-8");
		
		//동일한 요청 파라미터가 2개 이상 전달되는 경우 getParameterValues메소드를 이용해서 요청 파라미터들을 배열로 받는다.
		String[]tel = request.getParameterValues("tel");
		String[] hobbies=request.getParameterValues("hobbies");
		
		System.out.println(Arrays.toString(tel));
		System.out.println(Arrays.toString(hobbies));
		
	}

}

[NewFile.html]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>

<!-- 1.<a>태그 요청하기-->
<div>
  <a href="/servlet/request?name=alice&age=30">요청하기</a>
</div>

<hr>


<!-- 2. location.href 속성 요청하기-->
<div data-name="james" data-age="40">
  <button id="btn">요청하기</button>
</div>

<script>
$('#btn').click(function () {
	var name=$(this).parent().data('name');
	var age=$(this).parent().data('age');
	location.href='/servlet/request?name='+name+'&age='+age;
})
</script>

<!--3. <form> 태그로 요청하기(서브밋) -->
 <div>
    <form id="frm" method="get" action="/servlet/request">
      <div>
        <label for="name">이름</label>
        <input type="text" id="name" name="name">  <!-- name 속성이 요청 파라미터로 인식된다. -->
      </div>                                       <!-- 1. name 속성이 없으면 요청 파라미터는 null 값으로 인식된다. -->
      <div>                                        <!-- 2. 입력이 없으면(value 속성 값이 없으면) 요청 파라미터는 빈 문자열("")로 인식된다. -->
        <label for="age">나이</label>
        <input type="text" id="age" name="age">    <!-- name 속성이 요청 파라미터로 인식된다. -->  
      </div>
      <div>
        <button type="submit">전송하기</button>
        <button type="reset">입력초기화</button>
      </div>
    </form>
  </div>
  <script>
  $('#frm').submit(function (event) {
	  //숫자가 아니면 true를 반호나하는 정규식
	var regNaN=/\D/; //var regNaN = /[^0-9]/
	var age =$('#age').val();
	if(age.length===0||regNaN.test(age)){
		alert('나이는 정수만 입력할 수 있습니다.');
		event.preventDefault();
		return;
	}
})
  
  </script>
  
    <!-- 4. 동일한 파라미터를 2개 이상 요청하기 -->
  <div>
    <form method="post" action="/servlet/request">
      <div>
        <select name="tel">
          <option>010</option>  <!-- <option value="010">010</option> -->
          <option>02</option>   <!-- <option value="02">02</option> -->
          <option>031</option>  <!-- <option value="031"/>도 가능함 -->
        </select>
        <input type="text" name="tel">
        <input type="text" name="tel">
      </div>
      <div>
        <input type="checkbox" name="hobbies" value="travel" id="travel">
        <label for="travel">여행</label>
        <input type="checkbox" name="hobbies" value="game" id="game">
        <label for="game">게임</label>
        <input type="checkbox" name="hobbies" value="golf" id="golf">
        <label for="golf">골프</label>
      </div>
      <div>
        <button type="submit">전송</button>
      </div>
    </form>
  </div>


</body>
</html>


티스토리

profile
졸려요

0개의 댓글