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="로그인하기" />
<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="관리자 로그인" />
<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 |