홈
home
자바
home
🚨

Get방식으로 요청 후 응답페이지 받기

1.
GET방식으로 요청하는건 URL의 Header영역에 데이터들을 포함시켜 요청함
•
사용자가 입력한 값(데이터)들이 URL에 노출됨
•
보안유지가 불가능함
•
즉, 로그인이나 회원가입 같은 경우 GET방식이 부적합 함
2.
Header 영역은 전송하는 길이에 제한이 있음
•
방대한 데이터를 담았을 경우 초과된 데이터는 절단돼서 넘어감
•
즉, 게시판 작성 같은 경우 GET방식에 부적합함
3.
장점은 URL에 데이터가 노출되어있기 때문에 즐겨찾기(북마크) 가능 (즐겨찾기 해놨다가 해당 그 URL 재요청 가능)
•
즉, 검색 기능 같은 경우 GET방식에 적합

Get방식으로 요청 후 응답페이지 받기

1.
html문서에 form 태그 작성
•
form 내의 제출 버튼(submit버튼) 클릭시 form태그 속성중 action에 작성된 url로 요청됨 (제출) 즉, Controller(Servlet)를 호출한다고 생각하면됨
•
Servlet 요청의 경우 반드시 그 요청 값이 현재 웹애플리케이션의 contextPath(/1_Servlet)뒤에 작성되어야함!! http://localhost:8888/1_Servlet/test1.do
◦
절대경로방식(/로 시작되는 경우) : localhost:8888 뒤에 action에 작성한 값이 붙어지면서 요청
◦
상대경로방식(문구로 시작되는 경우) : 현재 이 페이지가 보여질 때의 url 경로 중 마지막 /로 부터 그 뒤에 action에 작성한 값이 붙어지면서 요청됨
<form action="/1_Servlet/test1.do" method="get"> <ul> <li> 이름 : <input type="text" name="name"> </li> <li> 성별 : 남자 <input type="radio" name="gender" value="M"> 여자 <input type="radio" name="gender" value="W"> </li> <li> 나이 : <input type="number" name="age" value="0"> </li> <li> 사는 도시 : <select name="city"> <option>서울</option> <option>경기도</option> <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>
HTML
복사
2. Servlet 파일 생성
package com.kh.controller; import java.io.IOException; import java.io.PrintWriter; 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 RequestGetServlet */ @WebServlet("/test1.do") public class RequestGetServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public RequestGetServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //System.out.println("잘 되는거니?..."); /* * Get방식으로 요청했으면 해당 이 doGet 메소드가 호출됨 * * 첫번째 매개변수인 HttpServletRequest request에는 요청시 전달된 내용들 담김 (사용자가 입력한값, 요청전송방식, 요청한 사용자의 ip등등) * 두번째 매개변수인 HttpServletResponse response는 요청 처리 후 응답을 할 때 사용하는 객체 * * 우선 요청 처리하기 위해 요청시 전달된 값(사용자가 입력한 값)들 뽑기 * request의 parameter영역안에 존재 => 키-밸류 세트로 담겨있음!! (name속성값-value값) * * 따라서 request의 parameter영역으로부터 전달된 데이터 뽑는 메소드 * > request.getParameter("키값") : String (그에 해당하는 value값) * > request.getParameterValues("키값") : String[] (그에 해당하는 value값들) */ String name = request.getParameter("name"); // "홍길동" / "" String gender = request.getParameter("gender"); // "M" "F" / null int age = Integer.parseInt(request.getParameter("age")); // "20" => 20 / "" => NumberFormatException 오류 (빈 문자열을 parseInt하려고 할 때) String city = request.getParameter("city"); // "서울" double height = Double.parseDouble(request.getParameter("height")); // "160" => 160.0 // String => double은 Double.parseDouble 이라는거 .. 전에 배웠다는거 ... ㅠ // 체크박스와 같이 복수개의 정보를 받을 때는 배열로 받아야됨 String[] foods = request.getParameterValues("food"); // ["한식", "일식"] / null 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); if(foods == null) { System.out.println("foods : 없음"); }else { System.out.println("foods : " + String.join(",", foods)); // 처음봥.. String.join("구분자", 배열) } // 이 뽑아낸 값들을 가지고 요청처리해야됨 (db와 상호작용) => jdbc 때 배웠던 흐름 // 보통의 흐름 : > Service의 메소드 호출시 뽑은값들 전달 > Dao호출 > DB sql문 실행 // < < /* int result = new MemberService().insertMember(name, gender, age, city, height, foods); if(result > 0) { // 성공 }else { // 실패 } */ // 위와 같은 요청 처리 다 했다는 가정하에 사용자가 보게될 응답 페이지 만들어서 전달할거임!! // 즉, 여기 Java코드 내에 사용자가 보게될 응답 html을 만드는 구문을 작성할거임! // 장점 : Java코드 내에 작성하기 때문에 반복문이나 조건문, 유용한 메소드 같은걸 활용할 수 있음 // 단점 : 복잡할 것, 혹시라도 후에 html을 수정하고자 할 때 Java 코드내에서 자바코드를 수정하기 // 수정된 내용을 다시 반영시키고자 한다면 서버 재실행(리스타트) 해야됨 // * response 객체를 통해 사용자에게 html(응답화면) 전달 // 1) 이제부터 내가 출력할 내용은 문서형태의 html이고 문자셋은 utf-8이다 라는 걸 지정 response.setContentType("text/html; charset=UTF-8"); // 2) 응답하고자 하는 사용자(요청했던 사용자)와의 스트림(클라이언트와의 통로) 생성 PrintWriter out = response.getWriter(); // 3) 저 스트림을 통해 응답 html구문을 한줄씩 출력 out.println("<html>"); out.println("<head>"); out.println("<style>"); out.println("h2{color:red}"); out.println("#name{color:orange}"); out.println("#age{color:yellow}"); out.println("#city{color:blue}"); out.println("#height{color:green}"); out.println("#gender{color:purple}"); out.println("</style>"); out.println("</head>"); out.println("<body>"); out.println("<h2>개인정보응답화면</h2>"); //out.println("<span id='name'>" + name + "</span>님은"); out.printf("<span id='name'>%s</span>님은 ", name); out.printf("<span id='age'>%d</span>살이며, ", age); out.printf("<span id='city'>%s</span>에 살고 ", city); out.printf("키는 <span id='height'>%.1f</span>cm이고 ", height); out.print("성별은 "); if(gender == null) { out.print("선택을 안했습니다. <br>"); }else { if(gender.equals("M")) { out.print("<span id='gender'>남자</span>입니다. <br>"); }else { out.print("<span id='gender'>여자</span>입니다. <br>"); } } out.print("좋아하는 음식은 "); if(foods == null) { out.print("없습니다. <br>"); }else { out.print("<ul>"); for(int i=0; i<foods.length; i++) { out.printf("<li>%s</li>", foods[i]); } out.print("</ul>"); } out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Java
복사

JAVA 파일 코드 내에서 사용자가 보게될 응답페이지 작성

•
장점 : Java코드 내에 작성하기 때문에 반복문이나 조건문, 유용한 메소드 같은걸 활용할 수 있음
•
단점 : 복잡함, 혹시라도 후에 html을 수정하고자 할 때 Java 코드내에서 자바코드를 수정하기 수정된 내용을 다시 반영시키고자 한다면 서버를 재실행(리스타트) 해야됨
Kakao Channel