클라이언트가 서버로 보내는 '요청' 또는 '데이터'를 말한다.
GET방식과 POST방식이 있으며, GET과 POST에 관한 사항은 GET방식과 POST방식 을 참고하면 좋겠다.
HttpServletRequest request
객체가 처리한다. (Tomcat이 있어야 사용가능)
대한민국에서 태어나서 대한민국 회사에서 일하게 된다면 UTF-8
처리를 꼭 해주어야 할것이다. 항상 쓰이는 것이라고 하니 더욱 더 기억해두자.
request.setCharacterEncoding("UTF-8");
URL?파라미터=값&파라미터=값
모든 파라미터는 String타입이다!
String name = request.getParameter("name");
String strAge = request.getParameter("age");
// null 처리
int age = 0; // 초기화를 잘 해야한다.
if(strAge != null) {
age = Integer.parseInt(strAge);
}
System.out.println(name + ", " + age);
만약 if처리 없이 age=Integer.parseInt(strAge);를 해준다면 500번대 오류가 뜬다.
이클립스를 실행시키고 실행창이 떴을때, 주소창의 파라미터를 수정해주면
아래와 같이 데이터가 삽입되어 출력이된다.
서버가 요청(Request)에 대해 클라이언트로 보내는 '응답'을 말한다.
HttpServletResponse response
객체가 처리한다. (Tomcat이 있어야 가능)
※ MIME-TYPE : 클라이언트에게 전송된 문서의 형식을 의미한다.
MIME-TYPE에 대해 자세히 알고싶다면?
// 1) 사용자에게전달할 데이터의 형식을 HTML문서로 결정한다. (MIME-TYPE : 문서의 형식)
response.setContentType("text/html"); // MIME-TYPE
// 2) 응답에 포함되는 한글 처리(문자셋)
response.setCharacterEncoding("UTF-8");
// 1) + 2) MIME-TYPE + 문자셋 동시에
response.setContentType("text/html; charset=UTF-8");
// 3) 응답 스트림 생성
// (1) 문자 출력 스트림(*Writer)을 생성
// (2) response 객체로부터 PrintWriter 객체를 얻을 수 있음
// - io패키지의 writer객체를 사용하면 IOExceotion처리를 해야하는데 이미 throws 처리가 되어있다.
// -- write() 메소드보다는 print()/println() 메소드를 이용하는 것을 권장
PrintWriter out = response.getWriter();
// 4) 응답 만들기(HTML 문서 만들기)
out.println("<html lang=\"ko\">");
out.println("<head>");
out.println("<meta charset=\"UTF-8\">");
out.println("<title>");
out.println("나의 첫 번째 응답");
out.println("</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>안녕하세요. " +name +"님 반갑습니다 ♥ <h1>");
if(age>=20) {
out.println("<h1>귀하는 " + age + "살 이므로 입장이 가능합니다.</h1>");
} else {
out.println("<h1>귀하는 " + age + "살?애들은 다음에</h1>");
}
out.println("</body>");
out.println("</html>");
out.flush(); // 출력 스트림에 남아 있는 모든 데이터 내보내기(만약을 위해서, 생략가능)
out.close();
GET방식 요청 :
<a>
태그
<div>
<a href="http://localhost:9090/01_Servlet/AnchorServlet">링크1</a> <!-- Full 주소 (200) -->
</div>
<div>
<a href="/01_Servlet/AnchorServlet">링크2</a> <!-- context path + mapping값 (200) -->
</div>
슬래시(/)가 있으면
context path
로 인식, 슬래시가
<div>
<a href="/AnchorServlet">링크3</a> <!-- mapping값만 (404오류) -->
</div><!-- 슬래시로 시작하면 컨텍스트 패스로 인식 -->
<div>
<a href="01_Servlet/AnchorServlet">링크4</a> <!-- mapping값만 (404오류) -->
</div> <!-- 슬래시가 있으면 context path로 슬래시가 없으면 URLmapping으로 인식 -->
<div>
<a href="AnchorServlet">링크5</a> <!-- (404) URL매핑으로 인식되지만, HTML문서의 경로에 따라 실행 여부가 다름 -->
</div>
출력 : 1+2=3
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- 연습. -->
<!-- 응답 : 1+2=3 -->
<div>
<a href="/01_Servlet/AnchorServlet?a=1&b=2">더하기</a>
</div>
</body>
</html>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 - client에 있는 문제
String strA = request.getParameter("a");
String strB = request.getParameter("b");
int a = 0;
int b = 0;
if(strA != null && strB != null) {
a = Integer.parseInt(strA);
b = Integer.parseInt(strB);
}
// 응답 - client에 있는 문제
PrintWriter outPlus = response.getWriter();
outPlus.println("<h1>" + a + "+" + b + "=" + (a+b) + "</h1>");
}
결과