JAVA/개념정리

Servlet 2

inderrom 2022. 12. 6. 02:41

1. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>webTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- servlet 등록하는 법 -->
  <servlet>
  	<servlet-name>servletTest01</servlet-name>
  	<servlet-class>kr.or.ddit.basic.ServletTest01</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>servletTest01</servlet-name>
  	<url-pattern>/servletTest01.do</url-pattern>
  </servlet-mapping>
  
</web-app>

2. ServletTest01

package kr.or.ddit.basic;

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;

/*
   - 만들어진 Servlet을 서버에 등록해서 사용자 요청이 왔을 때 서버가 찾아서 실행할 수 있게 해야 한다.
   - 등록은 web.xml(배포서술자)에 등록하는 방법과 애노테이션(@WebServlet)을 이용하여 등록하는 방법이 있다.

*/

// 이 예제는 web.xml(배포서술자)를 이용하여 실행되는 예제이다.
/*
	배포 서술자에 서블릿 등록하는 방법
	 <servlet>
	 	<servlet-name>서블릿이름</servlet-name>
	 	<servlet-class>실행할 서블릿객체의 전체이름</servlet-class>
	 </servlet>
	
	<servlet-mapping>
		<servlet-name>서블릿이름</servlet-name>
		<url-pattern>/요청URL패턴</url-pattern>
	</servlet-mapping>

//----------------------------------------------------------------------
  요청할 전체 URL : http://localhost:8080/webTest/servletTest01.do
  - http 	  ==> 프로토콜
  - localhost ==> 컴퓨터이름(도메인명) 또는 서버의 IP주소
  - 8080	  ==> 포트번호 (80번은 생략 가능하다.)
  - /webTest  ==> 컨텍스트 패스 (보통 웹프로젝트의 프로젝트명으로 지정된다.)
  - /servletTest01.do ==> 서블릿 요청 URL패턴
   

*/

// servlet 클래스는 httpservlet클래스를 상속해서 작성한다.
public class ServletTest01 extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	// 이 영역에서는 대부분 service()메서드 또는 doGet()메서드,  doPost()메서드를
	// 재정의해서 작성한다.
	
	// doGet()메서드 ==> GET방식의 요청을 처리하는 메서드
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");		// 응답 문서의 인코딩 방식 지정
		response.setContentType("text/html; charset=utf-8");  // 응답 문서의 ContentType 지정
		
		// 처리한 내용을 응답으로 보내기 위해 PrintWriter객체를 생성한다.
		PrintWriter out = response.getWriter();
		
		// 처리한 내용을 HTML형식의 문자열로 출력한다.
		// 방법1 : append()메서드 이용하기
		out.append("<!doctype html>")
			.append("<html>")
			.append("<head>")
			.append("<meta charset='utf-8'>")
			.append("<title>첫번째 Servlet연습</title>")
			.append("<p style='color : green; text-align : center;'>rom world!</p>")
			.append("</head>")
			.append("<body>")
			.append("<h1 style='text-align:center;'>안녕하세요, 첫번째 Servlet 프로그램입니다.</h1>")
			.append("</body")
			.append("</html>");
			
			
	}
	
	//doPost()메서드 ==> POST방식의 요청을 처리하는 메서드
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		super.doPost(request, response);
	}
}

3. 애노테이션을 이용한 Servlet 등록 - ServletTest02, ServletTest03

package kr.or.ddit.basic;

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을 등록하는 예제이다.
	애노테이션(@WebServlet)은 servlet버전 3.0이상에서 사용할 수 있다. 
*/

/*
	@WebServlet 애노테이션의 속성들
1. name : 서블릿의 이름을 설정한다. (기본값 : 빈문자열(""))
2. urlPatterns : 서블릿의 URL패턴의 목록을 설정한다.(기본값 : 빈배열( {} ))
		예) urlPatterns= "/url" 또는 urlPatterns={"/url1"} ==> 패턴이 1개일 경우
		예) urlPatterns={"/url1", "/url2",...} ==> 패턴이 2개 이상일 경우
3. value : urlPatterns와 같다.
4. description : 주석(설명글)을 설정한다.		
*/
//@WebServlet("/servletTest02.do")
@WebServlet(urlPatterns = "/servletTest02.do",
			description = "애노테이션을 이용한 서블릿 등록")
public class ServletTest02 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	// doGet()메서드 ==> GET방식의 요청을 처리하는 메서드
		@Override
		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			response.setCharacterEncoding("utf-8");		// 응답 문서의 인코딩 방식 지정
			response.setContentType("text/html; charset=utf-8");  // 응답 문서의 ContentType 지정
			
			// 처리한 내용을 응답으로 보내기 위해 PrintWriter객체를 생성한다.
			PrintWriter out = response.getWriter();
			
			// 처리한 내용을 HTML형식의 문자열로 출력한다.
			
			// 방법2 : print()메서드 또는 println(), printf()메서드 이용하기
			out.println("<!doctype html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset='utf-8'>");
			out.println("<title>두번째 Servlet연습</title>");
			out.println("<p style='color : green; text-align : center;'>rom world!</p>");
			out.println("</head>");
			out.println("<body>");
			out.println("<h1 style='text-align:center;'>안녕하세요, 두번째 Servlet 프로그램입니다.</h1>");
			out.println("<h2 style='text-align:center; color : green; font-style : italic;'>애노테이션을 이용한 출력입니다.</h2>");
			out.println("</body");
			out.println("</html>");
				
				
		}
		
		//doPost()메서드 ==> POST방식의 요청을 처리하는 메서드
		@Override
		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			super.doPost(request, response);
		}
}
package kr.or.ddit.basic;

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의 lifeCycle 예제
@WebServlet("/servletTest03.do")
public class ServletTest03 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	public void init() throws ServletException {
		// 이 메서드는 해당 Servlet객체가 처음 생성될 때 한 번 실행되는 메서드이다.
		System.out.println("Servlet : " + this.getServletName() + "에서 init()메서드를 호출합니다.");
	}
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service()메서드 시작...");
		
		// GET방식과 POST방식을 구분해서 해당 메서드를 호출하기
		
		// 방법 1 ==> HttpServlet(super클래스)의 service()메서드로 위임하기
		//super.service(request, response);
		
		// 방법2 ==> 클라이언트의 전송방식을 구분해서 직접 호출하기
		String method = request.getMethod();	// 클라이언트가 요청할 때 전송방식을 문자열로 반환한다.
												// 예)GET, POST 등
		if("GET".equals(method)) {
			doGet(request, response);
		}else if("POST".equals(method)) {
			
			doPost(request, response);
		}
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet()메서드 호출...");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		out.println("<html><head><meta charset='urf-8'></head>"
				+ "<body><h2 style='color : red'>doGet()메서드가 처리한 내용입니다.</h2></body></html>");
		
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet()메서드 호출...");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		out.println("<html><head><meta charset='urf-8'></head>"
				+ "<body><h2 style='color : blue; text-align:center'>doGet()메서드가 처리한 내용입니다.</h2></body></html>");
		
	}
	
	@Override
	public void destroy() {
		// 컨테이너에서 해당 서블릿 객체가 삭제될 때 한 번 실행되는 메서드
		System.out.println("Servlet : " + this.getServletName() + "에서 destroy()메서드를 호출합니다.");
	}
	
}

- doBasicServlet.jsp // get방식,post방식 연습

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function test(){
	location.href = "http://localhost:80/webTest/servletTest03.do";
}
</script>
</head>


<!-- 
	<form>태그의 속성들
	- action : form에서 구성한 데이터를 받아서 처리할 문서명 (jsp, servlet)
 	- method : 전송방식(GET,POST)
 	- enctype : 파일을 전송할 때 이 속성을 'multipart/form-data'라는 값을 설정해야 한다.
 				(보통은 생략한다.첨부파일 올릴시에만..)
 				
 	- target : 서버의 응답 결과가 나타날 프레임명을 지정한다.
 				(생략하면 현재 프레임에 나타난다.)			
 
 
 -->


<body>
	<h2>Sevlet 요청 연습</h2><hr>
	
	<h3>Get방식 요청하기 ==> 링크 방식</h3>
	<a href="http://localhost:80/webTest/servletTest03.do">GET방식 요청 1</a>
	
	<h3>GET방식 요청하기2 ==> form태그의 submit방식</h3>
	<form action="http://localhost:80/webTest/servletTest03.do"" method="get">
		<input type="submit" value="Get방식 요청2">
		<input type="button" value="Get방식 요청3" onclick="test()"	>
	</form>				
	<hr>
			
	<h3>POST방식 요청하기 ==> form태그의 submit방식</h3>
	<form action="http://localhost:80/webTest/servletTest03.do"" method="post">
		<input type="submit" value="Post방식 요청">
	</form>				
	<hr>
			
</body>
</html>