request.setCharacterEncoding("UTF-8");
1)요청 파라미터는 모두 String 타입이다.
2)요청 파라미터가 없으면 null 값으로 처리된다.
String name =request.getParameter("name");
String strAge=request.getParameter("age");
타입을 조정할 때 Exception이 발생하지 않도록 요청 파라미터의 null 처리+ 빈 문자열 처리 가 필요하다.
int age =0;
if(strAge !=null){
age = Integer.parseInt(strAge);
}
Optional<String> opt = Optional.ofNullable(strAge);
int age = Integer.parseInt(opt.orElse("0")); // opt로 감싼 strAge가 null이면 "0"을 꺼낸다.
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>
티스토리
02_servlet_ex>ex01 회원가입폼
https://hyeonju50.tistory.com/35
02_servlet_ex>ex02 구구단
https://hyeonju50.tistory.com/36