반응형
post 방식의 특징
1. url의 body 영역에 데이터를 포함시켜서 요청한다.
→ 사용자가 입력한 데이터(값)들이 url에 노출되지 않아 보안유지가 가능하다.
→ 로그인이나 회원가입의 경우가 post 방식에 적합하다.
2. body 영역은 전송하는 길이 제한이 없어 게시판 작성 등에 용이하다.
3. 즐겨찾기가 가능하지만 전달되는 데이터가 url에 노출돼있지 않아서 get 방식과 달리 기존의 검색결과를 볼 수 없다.
request_post.html
<!-- 상대경로 방식- java파일이 컴파일되면 class파일로 바뀌므로 test2.do는 class파일에 해당-->
<form action="../test2.do" method="post">
<ul>
<li>
이름: <input type="text" name="name" id="">
<!--input태그 사용 시 key값은 name으로 선택되므로 반드시 만들어 넘겨야 한다.-->
</li>
<li>
성별:
<label for="gender">남자</label>
<input type="radio" name="gender" id="gender" value="M">
<label for="gender">여자</label>
<input type="radio" name="gender" id="gender" value="F">
<!--radio버튼은 같은 묶음으로 묶을 시 name도 동일하게 작성. 넘어갈 value값도 설정-->
</li>
<li>
나이: <input type="number" name="age" id="">
</li>
<li>
거주 지역:
<select name="city" id="">
<!-- option value="" 에 value값 입력안하고 삭제해도 된다. -->
<option>서울</option>
<option>경기</option>
<option>강원</option>
<option>부산</option>
<option>대구</option>
<option>광주</option>
<option>울산</option>
<option>인천</option>
</select>
</li>
<li>
키: <input type="range" name="height" min="100" max="300" id="">
</li>
<li>
좋아하는 음식(모두 선택하기) <br>
<input type="checkbox" name="food" value="중식">중식 <br>
<input type="checkbox" name="food" value="일식">일식 <br>
<input type="checkbox" name="food" value="양식">양식 <br>
<input type="checkbox" name="food" value="한식">한식 <br>
<input type="checkbox" name="food" value="분식">분식 <br>
<!--checkbox 사용 시 같은 묶음으로 묶어줄 경우
radio버튼과 마찬가지로 key값을 동일하게 지정한다.
단, 한 개의 key값이 여러 개의 value가 묶여 넘겨진다.-->
</li>
<li>
<input type="submit" value="전송">
<input type="reset" value="취소">
</li>
</ul>
</form>
RequestPostServlet
@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 {
// 요청 시 전달된 값은 request parameter 영역에 담겨있다.
// POST 방식 요청은 기본 인코딩이 iso로 되어있어서 UTF-8로 맞춰야 한다.
// 값을 꺼내오기 전에 인코딩 설정을 해야 한다.
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");
System.out.println("name: "+name);
System.out.println("gender: "+gender);
System.out.println("age: "+age);
System.out.println("city: "+city);
System.out.println("height: "+height);
System.out.println("foods: "+foods);
// service - dao - db 처리 완료 후 반환
// 위에 처리를 끝마치고 사용자에게 응답화면을 보여주면 된다.
// 순수 Servlet: Java 코드 내에 html을 작성하는 형태
// JSP(Java Server Page): html 내에 java 코드를 작성하는 형태
// 응답페이지 구성을 jsp에게 넘긴다.
// 응답페이지에서 필요로 하는 데이터들을 request 객체에 담아서 보내야 한다.
// request의 attribute 영역에 (key-value)형태로 담아서 보낸다.
// request.setAttribute("key", "value");
request.setAttribute("name", name);
request.setAttribute("gender", gender);
request.setAttribute("age", age);
request.setAttribute("city", city);
request.setAttribute("height", height);
request.setAttribute("foods", foods);
// jsp에게 응답페이지 위임을 위해 필요한 객체: RequestDispatcher
// 1) 응답하고자 하는 뷰(jsp)를 선택하면서 생성한다.
RequestDispatcher view = request.getRequestDispatcher("views/responsePage.jsp");
// 2) 포워딩
view.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
반응형