Programming Language/Javascript, ...

[Servlet] post 방식으로 요청 후 응답페이지 받기

Ma_Sand 2022. 4. 28. 17:12
반응형

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);
	}
}

 

반응형