본문 바로가기

컴퓨터 프로그래밍/servlet

post방식-doPost, get방식-doGet

HTTPServlet(service(hreg, hres); 오버로딩)은 GenericServlet(service(req, res);)에게 상속을 받습니다.

- service(hreg, hres);=doGet(hreq, hres), doPost(hreg, hres)-> html에서의 get방식인지 post 방식인지에 따라서 구분해서 사용합니다.

- HttpServletReqest는 ServletReqest상속

- HttpServletResponse는 ServletResponse상속

- 상속을 받음으로써 general한 기능에 http에 특화된 기능들을 확장합니다. 

- 마찬가지로 service()보다 더 디테일한 기능을 가지는 것이 doGet()과 doPost()입니다.

- get방식으로 단순 페이지 전달이면 doGet(), post방식으로 정보 전달이면, doPost()

service()는 구분 하지 않습니다.

앞으로는 doGet(), doPost()를 구분해서 씁니다.

doGet()을 쓰건 doPost()로 쓰던 service()가 먼저 돌고, doGet()과 doPost()가 재호출이 일어납니다.

우리가 doGet()이나 doPost()를 오버라이딩을 안하면 service가 돌게 됩니다. 

사실 재호출은 doPut(), doDelete()도 할 수 있습니다. 이것은 restful에서 다시 볼 수 있습니다. 

server side의 핵심은 Restful입니다. 

 

코드를 작성해 봅니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="FS2" method="post">
ID<input type="text" name="userID"><br><br>
PASS<input type="password" name="userPass"><br><br>
<strong>좋아하는 메뉴</strong><p>
<input type="checkbox" name ="menu" value="짜장면">짜장면
<input type="checkbox" name ="menu" value="김치볶음밥">김치볶음밥
<input type="checkbox" name ="menu" value="닭도리탕">닭도리탕
<input type="checkbox" name ="menu" value="파스타">파스타
<br><br>
<hr>
<strong>당신의 성별....</strong><p>
<input type="radio" name="gender" value ="F">F
<input type="radio" name="gender" value ="M">M
<br><br>
<input type="submit" value="dataSend">

</form>
</body>
</html>
package sevlet.form;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HttpFormServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//폼에 값을 한꺼번에 다 가져옵니다. 
		Enumeration<String> en=request.getParameterNames();
		
	
		
		while(en.hasMoreElements()) {
		String name=en.nextElement();
		out.println("<li>"+name+": "+request.getParameter(name)+"</li><br>");
		
		}
		
		String str[]=request.getParameterValues("menu");
		out.println("<b>당신이 좋아하는 음식들 입니다.</b><br/>");
		String menu = "";
		for(int i=0;i<str.length;i++) {
			menu+=str[i]+" ";
		}
		out.println(menu);
		out.close();
				
	}

}

가장 많이 사용하는 form 값 받아 오는 함수 

getParameter(), getParameterValues()

form에 있는 name을 잘 모를 때 

getParameterNames()씁니다. 

 

 

클라이언트 요청은 get으로 들어올수도 있고, post로 들어올수도 있습니다. 

form method 는 post고, a는 get입니다. 그래서 이걸 다르게 코딩해줘야합니다. 

 

 

header 관련 내용

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2 align="center">Http Header information...</h2>
<form action="PHS" method="post">
ID:<input type+"text" name="id">
<input type="submit" value="send">
</form>
<hr>
<a href="PHS?i=encore&p=1234"><b>PrintHeaderServlet으로 연결합니다.</b></a>
<!--get방식인데 data를 가지고 가게 할때 위와 같이 합니다. 상당히 중요합니다. -->
</body>
</html>
package servlet.header;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PrintHeaderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//로직은 여기에다가 작성합니다. 
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		out.println("<html><body bgcolor=cyan>");
		out.println("<h2>=====Header Information Printed.....======</h2>");
		
		//header의 정보를 뽑아본다.
		//Enumeration<String> en = request.getParameterNames();
		Enumeration<String> en = request.getHeaderNames();
		while(en.hasMoreElements()) {//키 값이 있니 없니?
			String key =en.nextElement();
			String value=request.getHeader(key);
			out.println(key+ " : "+value+"</br>");		
		}
		out.println("<hr>");
		
		String id =request.getParameter("id");
		String id2 = request.getParameter("i");
		String pass2=request.getParameter("p");
		out.println(id+"id출력");
		out.println(id2+", "+pass2+"입니다.");
		out.println("</body></html>");
		
	}

}