고래씌
[Servlet] 1-2. Post 방식으로 전달 실습 본문
▶ Get방식 전달 실습과 이어서 진행한다.
1. POST방식으로 요청 후 응답페이지 받아보기
▶ 특징1. POST방식으로 요청한 데이터는 url의 Body 영역에 데이터를 포함시켜서 요청
=> 사용자가 입력한 값들이 url에 노출되지 않는다.
=> 보안유지가 가능함
=> 로그인이나, 회원가입같은 경우 post방식이 적합함
▶ 특징2. Body영역은 전송하는 길이에 제한이 없음
=> 즉, 게시판 작성같은 경우 Post방식으로 하는게 적합함
▶ 특징3. 즐겨찾기는 가능하나 전달되는 데이터가 URL에 노출되지 않음
▶ 특징4. 최대 요청 받는 시간이 존재해서 페이지 요청 및 대기시간이 있다.
■ index.html 파일
■ requestTest_POST.html 파일
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>POST방식으로 요청 후 응답페이지 받아보기</h1>
<p>
특징1. POST방식으로 요청한 데이터는 url의 Body 영역에 데이터를 포함시켜서 요청
=> 사용자가 입력한 값들이 url에 노출되지 않는다.
=> 보안유지가 가능함
=> 로그인이나, 회원가입같은 경우 post방식이 적합함
특징2. Body영역은 전송하는 길이에 제한이 없음
=> 즉, 게시판 작성같은 경우 Post방식으로 하는게 적합함
특징3. 즐겨찾기는 가능하나 전달되는 데이터가 URL에 노출되지 않음
특징4. 최대 요청 받는 시간이 존재해서 페이지 요청 및 대기시간이 있다.
</p>
<h2>개인정보 입력 - POST</h2>
<form action='test2.do' method="post">
<ul>
<li>
<!-- input 태그 사용시 key 값은 반드시 서버에 넘겨줘야하는데 key값 설정은 name 속성으로 한다. -->
이름 : <input type="text" name="name">
</li>
<li>
성별 :
남자 <input type="radio" name="gender" value="M">
여자 <input type="radio" name="gender" value="F">
</li>
<li>
나이 : <input type='number' name='age'>
</li>
<li>
사는 도시 :
<select name="city">
<option>서울시</option>
<option>경기도</option>
<option>강원도</option>
<option>인천</option>
</select>
</li>
<li>
키 : <input type="range" name="height" min="140" max="200">
</li>
<li>
좋아하는 음식(모두 고르시오) :
한식 <input type="checkbox" name="food" value="한식">
중식 <input type="checkbox" name="food" value="중식">
일식 <input type="checkbox" name="food" value="일식">
양식 <input type="checkbox" name="food" value="양식">
분식 <input type="checkbox" name="food" value="분식">
</li>
<li>
<input type="submit">
<input type="reset">
</li>
</ul>
</form>
</body>
</html>
2. Servlet 요청
■ RequestPostServlet.java
① Post방식 요청의 경우 값을 뽑기전에 UTF-8방식으로 인코딩을 변경해줘야함
- Post의 기본 인코딩 설정은 ISO-8859-1임.
② 요청 처리 : Service - DAO - SQL문 실행
- 위의 요청처리를 다 했다는 가정 하에 사용자가 보게될 응답 페이지 출력
- 순수 Servlet : Java코드 내에 html 코드를 작성
- JSP(Java Server Page) : html내에 Java코드를 쓸 수 있는 기술
- 응답페이지를 만드는 과정을 jsp에게 위임(forward)
단, 응답화면에서 필요로 하는 데이터들을 꾸미기위해 jsp에게 필요한 데이터를 넘겨줘야함
=> request에 attribute 영역에 담아서 보내준다.
=> Object 자료형으로 값이 들어감
package com.kh.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test2.do")
public class RequestPostServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RequestPostServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); // 인코딩 변경
String name = request.getParameter("name");
String gender = request.getParameter("gender");
int age = Integer.parseInt(request.getParameter("age"));
String city = request.getParameter("city");
double height = Double.parseDouble(request.getParameter("height"));
String[] foods = request.getParameterValues("food");
// request.setAttribute("키", "밸류");
request.setAttribute("name", name);
request.setAttribute("age", age);
request.setAttribute("gender", gender);
request.setAttribute("city", city);
request.setAttribute("height", height);
request.setAttribute("foods", foods);
// 모두 업캐스팅 되어 들어가서 하나의 함수로 다양한 자료형을 넣을 수 있는 이유이다!
// 위임시 필요한 객체
// 1) 응답하고자 하는 뷰를 선택하면서 RequestDispatcher 객체 생성
RequestDispatcher view = request.getRequestDispatcher("views/responsePage.jsp");
// 2) 포워딩
view.forward(request, response);
}
}
3. JSP 파일을 이용한 포워딩
▶ <% ~ %> 영역
- 이 구문은 스크립틀릿이라고해서 jsp문서 내에 자바코드를 쓸 수 있는 영역
- 현재 이 jsp에서 필요로 하는 데이터들 request의 atrribute에 담겨있음
- request.getAttribute("키값") : Object
- Object형식에서 내가 받고자 하는 자료형으로 강제형변환해서 담아주면된다.
■ responsePage.jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = (String) request.getAttribute("name");
int age = (int) request.getAttribute("age");
String gender = (String) request.getAttribute("gender");
String city = (String) request.getAttribute("city");
double height = (double) request.getAttribute("height");
String[] foods = (String[]) request.getAttribute("foods");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<style>
h2{color:red;}
span{font-weight:bold;}
#name{color:orange;}
#age{color:yellow;}
#city{color:green;}
#height{color:blue;}
#gender{color:naby;}
li{color:purple;}
</style>
<h2>개인정보 응답화면</h2>
<span id='name'><%= name %></span>님은
<span id='age'><%= age %></span>살이며,
<span id='city'><%= city %></span>에 사는,
<span id='height'><%= height %></span> cm이고
성별은
<% if(gender == null) { %>
선택을 안했습니다. <br>
<% } else { %>
<sapn id='gender'><%= gender.equals("M") ? "남자" : "여자" %></sapn>
<% } %>
좋아하는 음식은
<% if(foods == null) {
out.print("없습니다.");
} else {
for(String food : foods){
out.print("<li>" + food + "</li>");
}
}
%>
</body>
</html>
'Server > JSP과 Servlet' 카테고리의 다른 글
[JSP] 피자주문 실습문제 (1) | 2023.12.06 |
---|---|
[JSP] 3-2. include 지시어 (0) | 2023.12.06 |
[JSP] 3-1. JSP (스크립팅 원소, page 지시어) (0) | 2023.12.05 |
[Servlet] 1-1. GET 방식 전달 실습 (0) | 2023.12.05 |
[Servlet] 0. 서버 설정 (0) | 2023.12.05 |