프로그래밍 언어/자바 웹

서블릿을 이용한 여러 가지 실습 예제

· 코딩마이데이

1. 현재 /wepapp위치에 실습용 HTML 파일을 실습용 HTML 파일을 따로 저장하는 폴더를 만들겠습니다. webapp 폴더를 선택하고 마우스 오른쪽 버튼을 클릭한 후 New > Folder를 선택합니다.

New > Folder 선택

 

2. 폴더 이름을 test01로 입력한 후 폴더가 생성되었는지 확인합니다.

폴더 test01이 생성후 확인

 

실습 예제1: 서블릿에 로그인 요청 시 유효성 검사하기

문제: ID를 정상적으로 입력했을 때는 로그인 메시지를 표시하고, ID를 입력하지 않았을 때는 다시 로그인하려는 메시지를 표시하도록 작성하시오.

1. test01 폴더에 login.html을 만들고 다음과 같이 작성합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
  <form name="frmLogin" method="post" action="/pro06/loginTest"  encType="UTF-8">
	아이디  :<input type="text" name="user_id"><br>
       비밀번호:<input type="password" name="user_pw" ><br>
    <input type="submit" value="로그인">  <input type="reset" value="다시입력">
  </form>
</body>
</html>

 

2. LoginTest 클래스를 다음과 같이 작성합니다. ID나 비밀번호를 제대로 입력하지 않으면 오류 메시지를 출력한 후 다시 로그인창으로 이동합니다.

package sec04.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/loginTest")
public class LoginTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public void init() {
		System.out.println("init 메소드 호출");
	}
       
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		
		System.out.println("아이디 :" + id);
		System.out.println("패스워드: " + pw);
		
		if (id != null && (id.length()) != 0) {
			out.print("<html>");
			out.print("<body>");
			out.print(id + " 님!! 로그인 하셨습니다.");
			out.print("</body>");
			out.print("</html>");
		} else {
			out.print("<html>");
			out.print("<body>");
			out.print("아이디를 입력하세요!!!");
			out.print("<br>");
			out.print("<a href='http://localhost:8090/pro06/test01/login.html'>로그인 창으로 이동 </a>");
			out.print("</body>");
			out.print("</html>");
		}
	}
	public void destory() {
		System.out.println("destroy 메소드 호출");
	}
}

 

3. http://localhost:8090/pro06/test01/login.html로 요청한 후 ID와 비밀번호를 정상적으로 입력하고 로그인을 클릭합니다.

ID와 비밀번호를 정상적으로 입력

4. 로그인 성공 메시지가 정상적으로 출력됩니다.

ID와 비밀번호를 정상적으로 입력한 결과

만약 ID를 입력하지 않고 요청하면 다시 입력하라는 오류 메시지가 출력됩니다.

ID를 입력하지 않은 경우

 

 

실습 에제2: 서블릿으로 로그인 요청 시 관리자 화면 나타내기

문제: 실습예제 1을 이용해 로그인 시 admin ID로 로그인하면 회원 관리와 회원 삭제 기능을 보여주도록 작성하시오.

1. LoginTest2 서블릿을 생성하고 다음과 같이 작성합니다. adminID로 로그인 시관리자 화면을 보여주는 서블릿으로, 이중if문을 사용해 ID를 정상적으로 입력해도 다시 ID가 admin인지 체크합니다.

package sec04.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/loginTest2")
public class LoginTest2 extends HttpServlet{  
   public void init(){	
      System.out.println("init 메서드 호출");
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
      request.setCharacterEncoding("utf-8");   
      response.setContentType("text/html;charset=utf-8");  
      PrintWriter out = response.getWriter();				
      String id = request.getParameter("user_id");  
      String pw = request.getParameter("user_pw");  
		
      System.out.println("아이디: "+ id);  // 콘솔에 출력한다.
      System.out.println("패스워드: "+ pw);

      if(id!= null &&(id.length()!=0)){
		 if(id.equals("admin")){
		   out.print("<html>");
		   out.print("<body>");
	 	   out.print( "<font size='12'>관리자로 로그인 하셨습니다!!</font>" );
		   out.print("<br>");
		   out.print("<input type=button value='회원정보 수정하기'  />");
		   out.print("<input type=button value='회원정보 삭제하기'  />");
		   out.print("</html>");
		   out.print("</body>");
		 }else{
		   out.print("<html>");
		   out.print("<body>");
		   out.print( id +"님!! 로그인 하셨습니다." );
		   out.print("</html>");
		   out.print("</body>");
		 }     
      }else{
		out.print("<html>");  
		out.print("<body>");
		out.print("아이디와 비밀번호를 입력하세요!!!" ) ;
		out.print("<br>");
		out.print("<a href='http://localhost:8090/pro06/test01/login.html'> 로그인창으로 이동  </a>");
		out.print("</html>");
		out.print("</body>");
      }
   }
   public void destroy(){
      System.out.println("destroy 메서드 호출");
   }
}

 

2. login.html에서 LoginTest2를 매핑하도록 수정합니다.

3. http://localhost:8090/pro06/test01/login.html로 요청한 후 ID를 admin으로 입력한 후 로그인합니다.

ID를 admin으로 입력해 로그인

 

4. 다음과 같이 "관리자로 로그인 하셨습니다!!"라는 메시지를 표시됩니다.

관리창에 표시

 

실습 예제2: 서블릿으로 요청 시 구구단 출력하기

문제: 구구단 단수를 입력 받아 단수를 출력하시오.

1. 구구단의 단수를 입력받는 gugu.html을 다음과 같이 작성합니다. 단수를 입력받아 guguTest 서블릿으로 전송합니다.

<!DOCTYPE html>
<html>
<head>
   <title>단수 입력창</title>
</head>
<body>
   <h1>출력할 구구단의 수를 지정해 주세요.</h1>
    <form method="get" action="/pro06/guguTest">
       출력할 구구단  :<input type=text  name="dan" /> <br>
    <input type ="submit" value="구구단출력">	 
    </form>
  </body>
</html>

 

2. GuguTest 클래스를 다음과 같이 작성합니다. <table> 태그와 <tr> 태그와 자바의 for 문을 이용해 구구단을 연속해서 행으로 출력합니다.

package sec04.ex01;

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

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/guguTest")
public class GuguTest extends HttpServlet {
	public void init() {
		System.out.println("init 메서드 호출");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
														throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		int dan = Integer.parseInt(request.getParameter("dan"));

		out.print(" <table border=1 width=800 align=center>");
		out.print("<tr align=center bgcolor='#FFFF66'>");
		out.print("<td colspan=2>" + dan + " 단 출력 </td>");
		out.print("</tr>");

		for (int i = 1; i < 10; i++) {
			out.print("<tr align=center>");
			out.print("<td width=400>");
			out.print(dan + " *  " + i);
			out.print("</td>");
			out.print("<td width=400>");
			out.print(i * dan);
			out.print("</td>");
			out.print("</tr>");
		}

		out.print("</table>");
	}

	public void destroy() {
		System.out.println("destroy 메서드 호출");
	}
}

 

3. 출력 결과 화면에서 구구단 입력창을 요청한 후 단수를 입력합니다.

출력할 구구단 수 입력

 

4. 전송된 단수에 대한 구구단이 브라우저에 행으로 출력됩니다.

구구단 출력하기

 

5. 이번에는 서블릿의 응답 기능을 이용해 구구단 테이블의 행 배경색을 교대로 바꾸어 보겠습니다. 다음과 같이 GuguTest2 클래스를 생성하고 코드를 작성합니다.

package sec04.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/guguTest2")
public class GuguTest2 extends HttpServlet{  
   public void init(){	
      System.out.println("init 메서드 호출");
   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                                    					throws IOException, ServletException{
      request.setCharacterEncoding("utf-8");            
      response.setContentType("text/html;charset=utf-8");  
      PrintWriter out = response.getWriter();		
      int dan =Integer.parseInt( request.getParameter("dan"));  
		
      out.print(" <table border=1 width=800 align=center>");
      out.print("<tr align=center bgcolor='#FFFF66'>"); 
      out.print("<td colspan=2>" +  dan+ "단 출력 </td>");
      out.print("</tr>");
		  
      for(int i=1; i<10;i++){ 
	if(i%2 == 0) {
	    out.print("<tr align=center bgcolor='#ACFA58'> ");
	 }else {
	     out.print("<tr align=center bgcolor='#81BEF7'> ");
	 }
		out.print("<td width=400>"); 
		out.print(dan+" *  "+i );    
	        out.print("</td>");
		out.print("<td width=400>");
		out.print(i*dan); 
		out.print("</td>");
		out.print("</tr>");
      }
      out.print("</table>");
   }

   public void destroy(){
      System.out.println("destroy 메서드 호출");
   }
}

 

6. guguTest2 서블릿을 매핑하도록 gugu.html 파일을 수정한 후 브라우저에 요청합니다. 구구단 수를 입력하면 테이블의 배경색이 교대로 바뀌는 것을 확인할 수 있습니다.

테이블 행의 배경색이 교대로 바뀌도록 표시하기

 

 

7. 이번에는 서블릿의 응답 기능을 조금 더 응용해서 행마다 라디오 박스와 체크박스가 표시되도록 구현해 보겠습니다. 다음과 같이 GuguTest3 클래스를 작성합니다.

package sec04.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/guguTest3")
public class GuguTest3 extends HttpServlet {
	public void init() {
		System.out.println("init 메서드 호출");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		int dan = Integer.parseInt(request.getParameter("dan"));

		out.print(" <table border=1 width=1200  align=center>");
		out.print("<tr align=center bgcolor='#FFFF66'>");
		out.print("<td colspan=4>" + dan + "단 출력  </td>");
		out.print("</tr>");

		for (int i = 1; i < 10; i++) {
			if (i % 2 == 0) {
				out.print("<tr align=center bgcolor='#ACFA58'> ");
			} else {
				out.print("<tr align=center bgcolor='#81BEF7'> ");
			}
			out.print("<td width=200> ");
			out.print("<input  type='radio'  />" + i);
			out.print("</td>");
			out.print("<td width=200> ");
			out.print("<input  type='checkbox'  />" + i);
			out.print("</td>");
			out.print("<td width=400>");
			out.print(dan + " *  " + i);
			out.print("</td>");
			out.print("<td width=400>");
			out.print(i * dan);
			out.print("</td>");
			out.print("</tr>");
		}

		out.print("</table>");
	}

	public void destroy() {
		System.out.println("destroy 메서드 호출");
	}
}

 

8. 다음은 실행 결과입니다.

서블릿의 응답 기능 이용해 라디오 박스와 체크박시 표시하기