고급JAVA 27강 - Servlet

Whatever·2021년 12월 3일
0

고급 JAVA

목록 보기
27/32

servlet에 대한 정보
web.xml에 sevlet정보(servlet-name)를 적는다.

post 방식으로 정할 때 : ajax
link거는 건 무조건 get방식

basicService

<%@ 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>
</head>
<body>
<h1>Servlet 요청 연습</h1><hr>

<h2>GET 방식 요청1 - 링크 방식</h2>
<a href="http://localhost/servletTest/servletTest03.do">GET 방식 요청1</a>
<hr>

<h2>
GET 방식 요청2 - form태그의 submit방식<br>
- form태그의 method속성을 생략하거나 'get'으로 설정한 경우
</h2>
<form action="http://localhost/servletTest/servletTest03.do" method="get">
	<input type="submit" value="GET방식 요청2">
</form>
<br><hr><br>

<h2>POST방식 요청 - form의 submit방식<br>
- form태그의 method속성값을 'post'로 설정한 경우
</h2>

<form action="http://localhost/servletTest/servletTest03.do" method="post">
	<input type="submit" value="POST방식 요청">
</form>
<br><hr><br>
	

</body>
</html>

ServletTest02

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;
/*
 	이 예제는 애노테이션을 이용하여 서블릿을 등록하는 예제입니다.
 	애노테이션(@WebService)은 Servlet버전 3.0이상에서 사용할 수 있다.
*/
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
	@WebServlet 애노테이션의 속성들.
1) name : 서블릿 이름을 설정한다.(기본값 : 빈문자열(""))
2) urlPattern : 서블릿의 요청 URL패턴의 목록을 설정한다. (기본값 : 빈배열({}))
	예) urlPatterns="/url1" 또는 urlPattern={"/url1"} ==> 패턴이 1개일 경우
	예) urlPatterns={"/url1", "/url2", ...} ==> 패턴이 2개 이상일 경우
3) value : urlPattern속성과 동일한 기능을 한다.
4) description : 주석(설명글)을 설정한다.	
*/
@WebServlet(urlPatterns="/servletTest02.do", description="애노테이션을 이용한 서블릿 설정 예제")
public class ServletTest02 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			response.setCharacterEncoding("utf-8");
			response.setContentType("text/html; charset=utf-8");
			
			PrintWriter out = response.getWriter();
			
			// 처리한 내용을 PrintWriter객체를 이용하여 출력한다.
			// (이 작업이 곧 응답데이터를 클라이언트로 보내는 작업이 된다.)
			
			// 방법2: print()메서드 또는 println()메서드 이용하기
			out.println("<html>");
			out.println("<head><meta charset='uft-8'><title>두번째 서블릿 예제</title></head>");
			out.println("<body>");
			out.println("<h1 style='text-align:center; '>");
			out.println("안녕하세요. 두번째 서블릿 예제입니다.<br>");
			out.println("애너테이션을 이용하여 설정했습니다.<br><br>");
			out.println("실행 ContextPath : " + request.getContextPath() + "</h1>");
			out.println("</body></html>");
			
			
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}

}

Servlet03

package kr.or.ddit.basic;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
	- 서블릿의 동작 과정 (Life Cycle)
1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 전송
2. 컨테이너는 web.xml에 정의된 url패턴을 확인하여 어느 서블릿을 통해서 처리해야할지를 검색한다.
	(이 때 해당 서블릿이 로딩이 안 된 상태이면 로딩 작업을 수행한다.
	그리고 해당 서블릿이 처음 로딩시 init()메서드를 자동으로 호출해준다.)
	(Servlet 3.0이상에서는 애노테이션(@WebServlet)으로 설정할 수 있다.)
3. Servlet Container는 요청을 처리할 개별 쓰레드 객체를 생성하고,
     해당 쓰레드에서 실행할 Servlet의 service()메서드를 호출해준다.
  (이 때 HttpServletRequest 및 HttpServletResponse객체를 생성하여 파라미터의 인수값으로 넘겨준다.)
4. service()메서드는 메서드(method) 타입을 체크하여 적절한 메서드를 호출한다.
   (doGet(), doPost(), doPut(), doDelete() 등...)
5. 요청 및 응답 처리가 완료되면 HttpServletRequest 및 HttpServletResponse객체는 소멸된다.   
6. 컨테이너로부터 서블릿이 제거되는 경우에는 destroy()메서드가 호출된다.

*/


// 서블릿의 LifeCycle 예제
@WebServlet("/servletTest03.do")
public class ServletTest03 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init() throws ServletException {
		// 서블릿이 처음 로딩될 때 실행됨
		System.out.println("Servlet : " + this.getServletName() //servlet이름 
			+ "에서 init()메서드 호출...");
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		System.out.println("Servlet : " + this.getServletName()
		+ "에서 destroy()메서드 호출...");
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service() 메서드 시작...");
		
		// GET방식과 POST방식에 맞는 메서드 호출하기
		
		// 방법1 ==> HttpServlet의 service()메서드로 위임해서 처리한다.
		//super.service(request, response);// 부모에 있는 service가 알아서 처리해줌
		
		// 방법2 ==> 클라이언트의 전송방식 (GET, POST 등)을 구분해서 직접 메서드 호출하기
		String method = request.getMethod(); // 전송방식을 반환하는 메서드
		System.out.println("method = " + method);
		if("GET".equals(method)) {
			doGet(request, response);
		}else if ("POST".equals(method)) {
			doPost(request, response);
		}else {
			System.out.println("알 수 없는 전송방식입니다.");
			return;
		}
	}
	
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet()메서드 시작...");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; cjarset=uft-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset='utf-8'></head>");
		out.println("<body><h1>doGet메서드를 처리한 결과입니다.</h1></body></html>");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost()메서드 시작...");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; cjarset=uft-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset='utf-8'></head>");
		out.println("<body><h1>doPost메서드를 처리한 결과~~~</h1></body></html>");
		
	}

}

Servlet04

package kr.or.ddit.basic;

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

import javax.servlet.ServletContext;
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 ServletTest04
 */
@WebServlet("/ServletTest04.do")
public class ServletTest04 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Servlet 환경 정보 알아보기
		// ==> Servlet클래스나 JSP 페이지의 환경에 관련된 정보는 
		// javax.ServletContext 인터페이스 타입의 객체를 이용해서 얻을 수 있다.
		
		// ServletContext객체 구하기 
		ServletContext context = this.getServletContext();
		
		String serverInfo = context.getServerInfo();
		int majorVersion = context.getMajorVersion();
		int minorVersion = context.getMinorVersion();
		
		String servletName = this.getServletName();
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset='utf-8'>");
		out.println("<title>웹 서버 정보 보기</title></head>");
		out.println("<body>");
		out.println("웹 서버 종류(ServerInfo) : " + serverInfo + "<br>");
		out.println("servletName : " + servletName + "<br>");
		out.println("지원하는 Servlet버전 : " + majorVersion + "." + minorVersion + "<br>");
		
		out.println("</body></html>");
		
		
		
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

requestTest

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request 연습</title>
</head>
<body>
<h2>Request 연습 Form</h2><hr>
<form name="testForm" method="post" action="http://localhost/servletTest/requestTest01.do">
<table border="1">
<tr>
	<td>이름</td>
	<td><input type="text" size="10" name="username"></td> 
</tr>

<tr>
	<td>직업</td>
	<td>
		<select name="job">
			<option value="무직">무직</option>
			<option value="회사원">회사원</option>
			<option value="전문직">전문직</option>
			<option value="공무원">공무원</option>
			<option value="학생">학생</option>
		</select> 
	</td>
</tr>

<tr>
	<td>취미</td>
	<td>
		<input type="checkbox" name="hobby" value="여행" id="hobby1">
		<label for="hobby1">여행</label>
		
		<input type="checkbox" name="hobby" value="게임" id="hobby2">
		<label for="hobby2">게임</label>
		
		<input type="checkbox" name="hobby" value="배드민턴" id="hobby3">
		<label for="hobby3">배드민턴</label>
		
	</td>
</tr>
<tr>
	<td colspan="2">
		<input type="submit" value="확인">
		<input type="reset" value="취소">
	</td>

</tr>
</table>

</form>
</body>
</html>

requestTest04

package kr.or.ddit.reqest;

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 requestTest01
 */
@WebServlet("/requestTest01.do")
public class requestTest01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 클라이언트가 보내온 데이터 가져오기
		
		// POST방식으로 전송되어 온 데이터의 인코딩 방식 설정
		request.setCharacterEncoding("utf-8");
		
		// request.getParameter("파라미터명")
		//	==> 해당 '파라미터명'에 설정된 '값'을 문자열로 가져온다.
		
		// http://localhost/servletTest/서블릿URL패턴?파라미터명=값&파라미터명=값
		
		String userName = request.getParameter("username");
		String job = request.getParameter("job");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset='utf-8'>");
		out.println("<title>Request 객체로 전송값 구하기</title></head>");
		out.println("<body>");
		out.println("<h2>클라이언트가 보내온 값</h2>");
		out.println("<table border='1'>");
		
		out.println("<tr><td>이름</td>");
		out.println("<td>"+ userName +"</td></tr>");
		out.println("<tr><td>직업</td>");
		out.println("<td>"+ job +"</td></tr>");
		
		out.println("</table>");
		
		out.println("</body></html>");
		
		
	}

}

0개의 댓글