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

[Servlet] Web 기초

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

웹의 전반적인 구조

 

* DD - Deploymet Descriptor : 배포 기술서

   - url-pattern / init-param 등이 이에 속함

 

http://ip:port/serverProgramUrl?name=value

 

처리할 서버 프로그램

: RequestResponseServlet → url-pattern : rr (web.xml)

: doGet(request, reponse)

 


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>

	<servlet>
		<servlet-name>RequestResponseServlet</servlet-name>
		<servlet-class>step2.RequestResponseServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>RequestResponseServlet</servlet-name>
		<url-pattern>/rr</url-pattern>
	</servlet-mapping>
	
	<servlet>
		<servlet-name>PostServlet</servlet-name>
		<servlet-class>step3.PostServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>PostServlet</servlet-name>
		<url-pattern>/PostServlet</url-pattern>
	</servlet-mapping>
</web-app>	

 

GET 방식

 

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- action : 처리할 서버 프로그램 url(서버상에는 web.xml에 설정) 
	 method는 따로 기술하지 않으면, get 방식이 기본
	 http://ip:port/serverProgramUrl?name=valu	e

	처리할 서버 프로그램
	: RequestResponseServlet → url-pattern : rr (web.xml)
	: doGet(request, reponse)
	-->
	<form action="rr">
		이름 <input type="text" name="userName"> 
		<input type="submit" value="서버로 전송">
	</form>
	<hr>
	<!-- 링크 방식으로 요청 : get 방식으로 요청된다 -->
	<a href="rr?userName=javaking">Servlet 실행</a>
</body>
</html>

 

java (sevlet)

package step2;

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;

// HttpServlet을 상속받아 사용한다
// Servlet 사용 환경 적용
public class RequestResponseServlet extends HttpServlet{
	
	//객체 직렬화 과정에서 항상성 유지를 위한 것
	private static final long serialVersionUID = 1L;

	//Get 방식
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		// response Header 부분
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter(	);
		
		//client가 보낸 정보를 반환받는다
		//client는 정보를 http://ip:port/serverProgramUrl?name=value 형태로 전송
		String name = request.getParameter("userName");
		out.println("클라이언트가 보낸 메세지: "+name);
		
		//flush 됨
		out.close();
	}

}

브라우저 결과


POST 방식

 

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>post 방식 요청</title>
</head>
<body bgcolor="yellow">
<!-- 
	서버 프로그램은 step3.PostServlet이고
	web.xml(DD)에 url-pattern을 PostServlet으로 설정
 -->
<form method="post" action="PostServlet">
	<input type="text" name="message">
	<input type="submit" value="메세지 전송">
</form>
</body>
</html>

 

java(servlet)

package step3;

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 PostServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doPost(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		
		// 응답시 content type 및 한글 처리를 설정
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		
		//POST 방식은 url로 데이터가 전달되는 것이 아니라,
		//http request body 영역에 저장되어 전달되므로 한글처리를 한다.
		request.setCharacterEncoding("utf-8");
		
		//클라이언트 메세지 : [message]
		String message = request.getParameter("message");
		out.println("클라이언트 메세지: "+message);
		
		out.close();
	}

	
}

 

브라우저 결과

728x90
반응형