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 코드내에서 자바코드를 수정하기
수정된 내용을 다시 반영시키고자 한다면 서버를 재실행(리스타트) 해야됨


