본문 바로가기
Java Web Programming/3. Servlet

[Servlet] 서블릿 Servlet 이란? (get방식, post방식)

by 파프리카_ 2020. 8. 19.
728x90
반응형

미리 알아두자 !

 

HTTP : HyperText Transfer Protocol

인터넷으로 통신하기 위한 규약

 

WAS (Web Application Server) : Web Server + Web Container

Web Server : HTTP 프로토콜에 의거하여 HTML 서비스하는 서버

Web Container : Servlet/JSP(+Spring Framework)  실행 환경을 제공

 

* WAS 중 Apache Tomcat 사용 : 환경설정 https://creamilk88.tistory.com/75?category=872949

 

[WAS] WAS 환경 설정 및 Apache Tomcat 아파치 톰캣 설치

이클립스 설정 : WAS 환경설정 WAS (Web Application Server) 1. 새로운 workspace 만들기 -> switch workspace ( "새로운 워크스페이스 환경" )  File > Switch workspace > other > 'Add an existing or create..

creamilk88.tistory.com

  •  tomcat/conf/server.xml에서 port 수정 (8080 → 8888)
     : 이유는 오라클 port가 8080이므로, 충돌을 피하기 위해 수정
  • URIEncoding = "utf-8" 추가
     : http get 전송방식으로 전달되는 데이터의 한글처리를 위해
  •  tomcat/conf/context.xml에서 reloadable="true" 처리
     : 코드 수정 시, 서버 재시작없이 다시 리로드되도록 설정

Servlet 란?

: java web programming의 기반 기술

 

- java class로 표현됨

- Model2 Architecture (MVC Pattern)의 Controller 역할을 한다.

 ( Spring Framework의 웹기술인 SpringMVC의 FrontController인 DispatcherServlet도 서블릿이다! )

 

JSP 란?

: Java Server Page 웹 페이지의 생산성을 위한 기술

 

- HTML 구조 상에서 JSP Tag과 java code를 삽입한다.

- Web Container에 의해 서블릿으로 변경되어 실행된다.

- Model2 Architecture (MVC Pattern)의 View 역할을 한다. <% %>

 

* 참고 ) MVCModel + View + Controller

  - Model : java (DAO, Service, DTO or VO)

  - View : JSP

  - Controller : Servlet

 

간단 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서블릿 기본</title>
</head>
<body>
<%
	for(int i=0; i<10; i++){
%>
Hello Servlet / JSP ! <br>
<%
	}
%>
</body>
</html>

≫ HTML처럼 생겼지만 실제 동작은 Web container에 의해 서블릿으로 변경되어, 

java파일과 class파일로 실행이 된다

 

 


web.xml

: Deployment Discriptor 배포 기술서

 

- WEB-INF / 아래에 위치하는 파일로서 웹 어플리케이션의 설정 정보를 저장하는 곳이다.

 

web.xml 예시

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>webstudy4-servlet-basic</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>step1.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>/h</url-pattern>
  </servlet-mapping>
</web-app>	

 

servlet class

Java Programming에서 ServelHelloServlet.java 작성하여 실행해보기

package step1;

import java.io.IOException;
import java.io.PrintWriter;

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

public class HelloServlet extends HttpServlet{
	private static final long serialVersionUID = -4596175650449887119L;
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		//실행 잘 되는지 확인
		System.out.println("Hello, Servlet doGet() 실행");
		
		//charset=utf-8 : 한글 호환설정되도록 !
		response.setContentType("text/html; charset=utf-8");
		
		//response 실습
		PrintWriter out = response.getWriter();
		
		//html 입력문 쓰기
		out.println("Hello, Servlet!<br><br>");
		out.println("반가워요 서블릿!<br><br>");
		out.println("get방식으로 요청하셨군요!<br><br>");
		
		//사용자가 전송한 데이터를 반환받는다
		String info = request.getParameter("info");
		out.println("<hr>사용자가 전송한 정보: "+info);
		
		//close() 단계에서 flush됨
		out.close();
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		//실행 잘 되는지 확인
		System.out.println("Hello, Servlet doPost() 실행");
		
		response.setContentType("text/html; charset=utf-8");
		
		//response 실습
		PrintWriter out = response.getWriter();
		
		//html 입력문 쓰기
		out.println("Hello, Servlet!<br><br>");
		out.println("<font color=red>반가워요 서블릿!</font><br><br>");
		out.println("<font color=red>post방식으로 요청하셨군요!</font>");
		
		//post 방식일 때는 별도의 한글처리가 필요하다
		request.setCharacterEncoding("utf-8");
		
		//사용자가 전송한 데이터를 반환받는다
		String info = request.getParameter("info");
		out.println("<hr>사용자가 전송한 정보: "+info);
		
		//close() 단계에서 flush됨
		out.close();
	}
}

 

 

HTML 예시

 

<form

    method : 서버에 전송하는 방식을 명시

    action : 처리할 서버 프로그램 url (web.xml에 명시) >

</form>

 

get 방식 : 기사 검색 등에 이용

post 방식 : 로그인 등에 이용

*밑에 추가 설명 있음

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>http get, post 방식</title>
</head>
<body>
	<form method="get" action="h"><!-- method 명시하지 않으면 기본이 get -->
		<input type="text" name="info">
		<input type="submit" value="get방식 요청">
	</form>
	<hr>
	<form method="post" action="h">
		<input type="text" name="info">
		<input type="submit" value="post방식 요청">
	</form>
</body>
</html>

 

[ html 화면 ]

 

[ get 방식 결과 ]

 

[ post 방식 결과 ]


HTTP Request Method (요청방식)

 

1. get 방식 : 주로 정보 조회 용도

  - DB에서 SQL의 DML의 SELECT 부분 → 서버의 상태에 영향을 주지 않는다

 - html form tag에 별도의 method 설정이 없을 때는 'get'이 default 값이다.

 < a href = "" > </a> 웹페이지 링크는 get방식으로 요청된다.

 - 브라우저의 url 상에서 입력한 정보가 노출된다.

 - 중요한 사용자 정보나 데이터 양이 많은 정보는 부적합

 - get 방식 한글처리는 server.xml에서 URIEncoding="utf-8"로 설정했으므로, 별도의 한글처리는 필요하지 않다.

 

2. post 방식 : 정보 전송 용도

  - DB에서 SQL의 DML의 INSERT/DELETE/UPDATE 부분 → 서버의 상태에 영향을 준다

  - 브라우저 url 상에 정보가 노출되지 않는다.

  - 사용자 정보나 데이터 양이 많은 경우 적합하다.

  - http body 부분에 정보가 저장되므로, 별도의 한글처리가 필요하다.

 


Service 계열의 Method

1. doGet() ← html get방식 요청에 반응하여 실행

2. doPost() ← html post방식 요청에 반응하여 실행

 

Service 계열의 Method의 매개변수

doGet( HttpServletRequest request, HttpServletResponser reponse ) {}

doPost( HttpServletRequest request, HttpServletResponser reponse ) {}

 

HttpServletRequest : 클라이언트의 요청 정보를 저장하는 객체

HttpServletResponser : 클라이언트에게 응답할 정보를 저장하는 객체

 


http error code

404 처리할 프로그램이 없을 때 발생하는 에러

405 요청방식 (get or post)에 대응하는 서버 상의 구현 메서드가 없을 때 발생하는 에러

 


HTTP Request , Response 메세지 구조

1. HTTP Request

출처 : https://velog.io/@rosewwross/Http-and-Request-and-Response-hok6exbnfb

 1) Start Line : HTTP Method( Get / Post .. ), Request Target(처리할 서버프로그램 url), HTTP 버전

 2) Headers : request 요청 상세 정보( user-agent : 현 브라우저 종류 , content-type, content-length등 기술)

3) body : Get 방식일 경우에는 공란이며, Post 방식일 경우에는 전송한 정보 데이터가 기술되어 있음

 

2. HTTP Response

출처 : https://velog.io/@rosewwross/Http-and-Request-and-Response-hok6exbnfb

1) Status Line : status code 응답 상태를 나타내는 코드 (200 정상 수행, 404 Not Found error, 405, 500 error 등)

2) Headers :  response 상세 정보, content-type(html, xml, image, audio, video..),

  content-length, cookie configuration 등

3) body : 응답할 메세지 정보 (html, xml, json, file 등)

728x90
반응형