개발기록/Java

서블릿 예제2

100'S 2022. 1. 19. 23:12

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>servlet_1_project</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>
</web-app>

 

 

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet Practice 1</title>
</head>
<body>
	<h1>Servlet Practice 1</h1>
	<h1>이 사이트 주인 : 백혜영</h1>
	<hr>
	
	<ol>
		<li>
			<h3>
				<a href="test1.do">
					서블릿이란?
				</a>
			</h3>
		</li>
		<li>
			<h3>
				<a href="views/loginForm.html">서블릿 호출하기</a>
			</h3>
		</li>
		<li>
			<h3>
				<a href="views/loveSong.html">서블릿에서 다른 서블릿 호출하기(forward)</a>
			</h3>
		</li>
		<li>
			<h3>
				<a href="views/errorTest.html">서블릿에서 다른 서블릿 호출하기(sendRedirect)</a>
			</h3>
		</li>
	</ol>

</body>
</html>

 

TestServlet1.java

package com.first.controller;

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 TestServlet1
 * 접속할 경로의 주소
 */
@WebServlet("/test1.do")
public class TestServlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet1() {
        super();
    }

    /*
     * HTTP : 서버와 클라이언트 간 데이터를 HTML 형식으로 주고받기 위한 규칙
     * 
     * 사용자 ---> 서버(request : 요청)
     * 사용자 <--- 서버(response : 응답)
     * 
     * 요청 방식 ( GET / POST (/ PUT / DELETE ...))
     *  
     *  1. GET (like SELECT)
     *  - 특정 값에 대한 정보를 조회하고자 할 때 주로 사용하는 요청 방식
     *  - 전달하고자 하는 정보를 주소창에 담아, 검색 및 링크 공유 등의 목적으로 사용한다.
     *  
     *  2. POST (like INSERT, UPDATE ...)
     *  - 전달하는 값을 활용한 데이터 추가, 수정, 삭제 등의 데이터 처리를 위한 요청 방식
     *  - 전달하고자 하는 정보를 Request Body 영역에 담아 주소창에 해당 정보가 표시되지 않는다.  
     */
    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    // GET 방식으로 요청이 들어왔을 때만 처리한다.
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 최우선으로 전송하고 돌려줄 값에 
		// 한글이 존재한다면 문자열의 인코딩 방식을 변경해줘야한다.
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
				
		// 웹 페이지에 전달할 결과를 작성할 스트림 생성
		PrintWriter out = response.getWriter();
		
		// 스트림을 통해 HTML 만들기
		out.println("<html>");
		out.println("<head>");
		out.println("<title>서블릿이란?</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>서블릿이란</h1>");
		out.println("<h3> 서블릿은 웹 애플리케이션으로 보여질 코드이다. <br>");
		out.println(" 웹 문서를 자바로 구현하기 위한 기술이다. </h3>");
		
		out.println("<br><br><br>");
		out.println("<a href='index.html'> 홈으로 돌아가기..out.</a>");
		
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	// POST 방식으로 요청이 들어왔을 때만 처리한다.
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// doPost와 doGet의 역할 구분이 필요하지 않은 경우
		// doPost로 들어오는 request와 사용자에게 응답할 response를 
		// 모아서 doGet한테 다시 전달하여 두 메소드 모두 같은 일을 처리하도록 구현할 수 있다.
		doGet(request, response);
	}

}

 

 

loginForm.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼 양식</title>
<style>
	#login {
		width : 300px;
		height : 100px;
		background : lightgreen;
	}
</style>
</head>
<body>
	<h1>로그인 양식</h1>
	<div id="login">
		<form action="/servlet/test2.do" method="post">
		
		<!-- 
			form의 값을 전달할 떄에 서블릿으로 전달되는 값의 형식은
			key와 value로 전달되며, key는 name 속성의 값, 
			value는 value 속성의 값으로 생성되어 전달된다.
		 -->
		
			ID : <input type="text" name="userId" /> <br>
			PWD : <input type="password" name="userPwd" /> <br>
			
			<input type="submit" value="로그인하기" />
			&nbsp;&nbsp;&nbsp;
			<input type="reset" value="취소하기" />
			
		</form>
	</div>
	
	<a href="../index.html"> 홈으로 돌아가기...</a>
	
</body>
</html>

 

TestServlet2.java

package com.first.controller;

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 TestServlet2
 */
@WebServlet("/test2.do")
public class TestServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 한글 인코딩(UTF-8)
		request.setCharacterEncoding("UTF-8"); 
			// 사용자로부터 받아올 요청 정보를 UTF-8로 변경하겠다.
		response.setContentType("text/html; charset=UTF-8");
			// 서버에서 사용자에게 응답을 보낼 때 어떤 방식으로 보내겠다.
		
		// 2. view(HTML)로부터 받아온 값 꺼내기
		String userId = request.getParameter("userId");
		String userPwd = request.getParameter("userPwd");
		
		System.out.println("아이디 : " + userId);
		System.out.println("비밀번호 : " + userPwd);
		
		// 3. 웹 페이지 연결을 위한 스트림 객체 생성
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title>로그인 테스트</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>로그인 확인하기</h1>");
		out.println("</body>");
		out.println("ID : " + userId);
		out.println("PWD : " + userPwd);
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
		
		
		
	}

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

}

 

 

loveSong.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사랑을 위한 음악 선정하기</title>
</head>
<body>
	<h1>사랑을 위한 음악 선정하기</h1>
	<form action="/servlet/test3.do" method="get">
		
		<select name="selectSong" id="selectSong">
			<option value="사계">사계</option>
			<option value="랄랄라">랄랄라</option>
			<option value="SaveUs">SaveUs</option>
			<option value="위아래">위아래</option>
			<option value="땡벌">땡벌</option>
		</select>
		
		<input type="submit" value="선택하기" />
		
	</form>
</body>
</html>

 

TestServlet3.java

 

package com.first.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 TestServlet3
 */
@WebServlet("/test3.do")
public class TestServlet3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet3() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		// 2. view(HTML)에서 전달한 데이터 가져오기
		String selectedSong = request.getParameter("selectSong");
		
		// 3. 사용자가 전달한 데이터를 사용하여 동적인 페이지 만들기
		String feeling = null;
		
		System.out.println("전달받은 음악 : " + selectedSong);
		
		
		switch(selectedSong) {
		
		case "사계" : feeling = "좋네요";
			break;
		
		case "SaveUs" : feeling = "우린 아닌가보오";
			break;
		
		case "랄랄라" : feeling = "같이 살자";
			break;
		
		case "위아래" : feeling = "하니";
			break;
		
		case "땡벌" : feeling = "땡벌";
			break;
		}
		
		// 응답해야 할 페이지가 동적 페이지라면 
		// 다른 서블릿을 연결하여 데이터를 전달할 수 도 있다.
		RequestDispatcher view = request.getRequestDispatcher("/test3Ack.do");
		
		// 전달하고자 하는 데이터를 request에 추가한 뒤 다음 서블릿에게 넘겨주기
		request.setAttribute("feeling", feeling);
		
		// 다른 서블릿으로 출발!
		view.forward(request, response);
				
		
	}

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

}

 

TestServlet3Ack.java

package com.first.controller;

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 TestServlet3Ack
 */
@WebServlet("/test3Ack.do")
public class TestServlet3Ack extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet3Ack() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// test3.do에서 받은 데이터를 활용하여 HTML 만들기
		
		// 1. 인코딩하기 (test3에서 해서 패스)
		
		// 2. 웹 페이지에 표현할 HTML 만들기
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title> 사랑의 음악 선정 결과 </title>");
		out.println("</head>");
		out.println("<body>");
		
		out.println("<h1> 사랑의 음악 선정 결과 </h1>");
		out.println("<h3>" + request.getParameter("selectSong") + "</h3>");
		
		out.println("<h3> 이 음악을 듣고 나면 " + request.getAttribute("feeling")+"</h3>");
		
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
		
		
		
	}

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

}

 


errorTest.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 페이지</title>
</head>
<body>
	<h1>관리가 비밀번호 입력</h1>

	<form action="/servlet/test4.do" method="get">
		ID : <input type="text" name="adminId" /> <br />
		PWD : <input type="password" name="adminPwd"/> <br />
		
		<input type="submit" value="관리자 로그인" />
		&nbsp;&nbsp;&nbsp;
		<input type="reset" value="취소하기" />
	</form>
	
	<br /><br /><br />
	<a href="../index.html">홈으로 돌아가기</a>
</body>
</html>

 

TestServlet4.java

package com.first.controller;

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 TestServlet4
 */
@WebServlet("/test4.do")
public class TestServlet4 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet4() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		// 2. 전달한 데이터 받아오기
		String adminId = request.getParameter("adminId");
		String adminPwd = request.getParameter("adminPwd");
		
		// 만약에 관리자 아이디나 비밀번호가 틀렸다면..?
		// ex) adminId = 'admin' / adminPwd = 'admin1234'
		
		if(adminId.equals("admin") || adminPwd.equals("admin1234")) {
			// 응답할 페이지가 정적 페이지인 경우, (즉 현재 페이지와 관련이 없을 경우)
			// request와 response를 연결하지 않고
			// 다른 서블릿으로 다시 접속하라고 던져버릴 때
			// sendRedirect() 방식을 사용한다.
			response.sendRedirect("test4Error.do");
					
		} else {
			// 만약에 관리자 아이디와 비밀번호가 일치할 경우
			
			PrintWriter out = response.getWriter();
			
			out.println("<html>");
			out.println("<head>");
			out.println("<title>관리자 페이지 </title>");
			out.println("</head>");
			out.println("<body>");
			
			out.println("<h1> 관리자님, 환영합니다. </h1>");
			out.println("<h3>오늘은 머리가 있어 보이시네요</h3>");
			
			out.println("</body>");
			out.println("</html>");
			
			out.flush();
			out.close();
		}
		
		
	}

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

}

 

TestServlet4Error.java

package com.first.controller;

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 TestServlet4Error
 */
@WebServlet("/test4Error.do")
public class TestServlet4Error extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet4Error() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		// 2. 웹 페이지 작성을 위한 스트림 객체 생성
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title> 에러 페이지입니다. </title>");
		out.println("</head>");
		out.println("<body>");
		
		out.println("<h1> 이 페이지는 에러 페이지입니다. </h1>");
		out.println("<h3> 서버 관리자에게 문의하세요. </h3>");
		
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
		
	}

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

}

'개발기록 > Java' 카테고리의 다른 글

JSP 예제  (0) 2022.01.19
서블릿 예제1  (0) 2022.01.19
Ajax 예제  (0) 2022.01.19
서블릿 리스너 ( Servlet Listner)  (0) 2022.01.13
Filter와 Wrapper  (0) 2022.01.13