📚 Study/JSP & Servlet

Servlet :: Servlet 관찰하기 (자바의 기본 클래스를 Servlet 으로 구성)

bono-hye 2023. 12. 7. 08:57

# Test004.java

- 자바의 기본 클래스를 Servlet으로 구성하는 방법 ① → GenericServlet 상속받는 클래스로 설계

/*==================
   Test004.java
   - Servlet 실습
==================*/

// 현재... 자바의 기본 클래스 Test004
// 이를... Servlet 으로 구성하는 방법

// GenericServlet 을 상속받는 클래스로 설계 → Servlet

package com.test;

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

import javax.servlet.GenericServlet;
//import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

//public class Test004 implements Servlet
//public abstract class Test004 extends GenericServlet
public class Test004 extends GenericServlet
{
	// 경고 없애기 위해 넣은 직렬화 코드,,?
	private static final long serialVersionUID = 1L;

	// GenericServlet 의 추상메소드 재정의~!!!
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
	{
		// 요청에 대한 응답 방법
		response.setContentType("text/html; charset=UTF-8");
		
		try
		{
			// 출력 스트림 구성
			PrintWriter out = response.getWriter();
			
			out.print("<html>");
			out.print("<head>");
			out.print("<title>");
			out.print("Test004.java");
			out.print("</title>");
			out.print("</head>");
			
			out.print("<body>");
			
			out.print("<div>");
			out.print("<h1>");
			out.print("서블릿 관련 실습");
			out.print("</h1>");
			out.print("<hr>");
			out.print("</div>");
			
			out.print("<div>");
			out.print("<h2>");
			out.print("GenericServlet 클래스를 이용한 서블릿 테스트");
			out.print("</h2>");
			out.print("</div>");

			out.print("</body>");

			out.print("</html>");
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
	}
}


#Test005.java

- 자바의 기본 클래스를 Servlet으로 구성하는 방법 ② → HttpServlet 상속받는 클래스로 설계

/*====================
   Test005.java
   - Servlet 관련 실습 
======================*/

// 현재... 자바의 기본 클래스 Test005
// 이를... Servlet 으로 구성하는 방법

// HttpServlet 을 상속받는 클래스로 설계 → Servlet

package com.test;

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 Test005 extends HttpServlet	// 추상클래스이지만 내부적으로 추상메소드를 가지고 있지 않음 (Test004에서는 에러 떴는데 여기서는 경고인 이유)
{
	private static final long serialVersionUID = 1L;
	
	
	// 사용자의 http 프로토콜 요청이 GET 방식일 경우(method="get") 호출되는 메소드 
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
	}

	// 사용자의 http 프로토콜 요청이 POST 방식일 경우(method="post") 호출되는 메소드 
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
	}
	
	// 사용자 정의 메소드
	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// GET 방식이든 POST 방식이든
		// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
		// (개발자가 어떤 방식으로 요청했는지 매번 확인하면서 코드를 작성할 수 없으니)
		
		// request → 요청 객체
		String id = request.getParameter("userId");				// requset 객체로부터 userId 값을 꺼내서 쓸거야! (Parameter로 저장되어 있음)
		String pwd = request.getParameter("userPwd");
	
		response.setContentType("text/html; charset=UTF-8");
		
		String str = "아이디 : " + id + ", 패스워드 : " + pwd;
		
		// 응답을 출력 스트림으로 구성하기 위한 준비
		PrintWriter out = response.getWriter();
		
		// 출력 스트림을 활용해서 페이지 랜더링
		out.print("<!DOCTYPE html>");
		out.print("<html>");
		out.print("<head>");
		out.print("<meta charset='UTF-8'>");
		out.print("<title>Test005.java</title>");
		out.print("</head>");
		out.print("<body>");
		out.print("");
		out.print("<div>");
		out.print("	<h1>서블릿 관련 실습</h1>");
		out.print("	<hr>");
		out.print("</div>");
		out.print("");
		out.print("<div>");
		out.print("	<h2>HttpServlet 클래스를 활용한 서블릿 테스트</h2>");
		out.print("	");
		out.print("	<p>" + str + "</p>");
		out.print("</div>");
		out.print("");
		out.print("</body>");
		out.print("</html>");
	}
}

 

# jsptest005.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsptest005.jsp</title>

<link rel="stylesheet" type="text/css" href="css/main.css">

</head>
<body>

<div>
	<h1>JSP 관찰하기</h1>
	<hr>
</div>

<div>
	<h2>HttpServlet 관련 실습</h2>
	
	<!-- ※ 입력 컨트롤을 활용하여 서버로 데이터를 전송하기 위해서는 form 필요 -->
	<!-- ※ form 태그의 action 속성은
	        데이터 전송 및 페이지 요청을 해야하는 
	        대상 페이지를 등록하는 기능을 수행한다. 
	        (생략 시 데이터 전송 및 페이지 요청을 하게 되는 대상은 자기 자신) -->
  	<!-- ※ form 태그의 method 속성은 데이터 전송 및 페이지 요청에 대한 방식
  			(생략 시 데이터 전송 및 페이지 요청을 하게 되는 방식은 get) -->	        
	<form action="/WebApp04/login" method="get">
		<table>
			<tr>
				<th>아이디</th>
				<td>
					<!-- ※ name 속성 check~!!! --> <!-- 스크립트 제어를 할 경우에는 id 속성으로 제어하는데 서버로 접근할 경우에는 name 속성으로 제어 -->
					<input type="text" name="userId" size="10" maxlength="10" class="txt">
				</td>
			</tr>
			<tr>
				<th>패스워드</th>
				<td>
					<!-- ※ name 속성 check~!!! -->
					<input type="password" name="userPwd" size="10" class="txt">
				</td>
			</tr>
			<tr>
				<td colspan="2" style="text-align: center;">
					<!-- ※ submit 액션 → form 데이터 전송 및 페이지 요청 -->
					<input type="submit" value="로그인" class="btn control"
					style="width: 48%;">
					<input type="reset" value="다시 입력" class="btn control"
					style="width: 48%">
				</td>
			</tr>
			
		</table>
	</form>
</div>
</body>
</html>

↓ 아이디 창에 superman / 패스워드 창에 1234입력 ↓