본문 바로가기

Programming/국비학원

220922 - 서버 - 서블릿 예제

  • 환율 계산기
  • webapp/calc.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환율 계산기</title>
</head>
<body>
	<h2>환율 계산기</h2>
	<form action="rate" name="formCalc" method="get">
		원화 : <input type="text" name="won">
		<select name="operator">
			<option value="dollar">달러</option>
			<option value="yen">엔화</option>
			<option value="wian">위안</option>
			<option value="pound">파운드</option>
			<option value="euro">유로</option>
		</select>
		<input type="hidden" name="command" value="cal">
		<input type="submit" value="변환하기">
	</form>
</body>
</html>

 

 

 

  • RateServlet.java
package servlet01.ex02;

import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/rate")
public class RateServlet extends HttpServlet {
	private static float USD_RATE = 1411.30F;
	private static float JPY_RATE = 972.50F;
	private static float CNY_RATE = 198.72F;
	private static float GBP_RATE = 1584.06F;
	private static float EUR_RATE = 1385.18F;

	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(); //응답 문자로 반환
		String command = request.getParameter("command");
		String won = request.getParameter("won");
		String operator = request.getParameter("operator");
		if(command.equals("cal")) { //hidden input 생성한 이유 
			String result = cal(Float.parseFloat(won),operator);
			out.print("<html><body>");
			out.print("<h2>변환 결과 = " + result + "</h2>");
			out.print("<a href='/servlet01/calc.html'>환율 계산기</a>");
			out.print("</body></html>");
			
		}
	}
	
	//환율 계산 메소드
	private static String cal(float won, String operator) {
		String result = null;
		if (operator.equals("dollar")) {
			result = String.format("$%.6f", won/USD_RATE);
		} else if (operator.equals("yen")) {
			result = String.format("¥%.6f", won/JPY_RATE);
		} else if (operator.equals("wian")) {
			result = String.format("¥%.6f", won/CNY_RATE);
		} else if (operator.equals("pound")) {
			result = String.format("£%.6f", won/GBP_RATE);
		} else {
			result = String.format("€%.6f", won/EUR_RATE);
		}
		return result;
	}
	
}

 

 

=>http://localhost:8080/servlet01/calc.html

 

 

 

 

  • 로그인 (post)
  • login3.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
	<h2>로그인 창</h2>
	<form action="login3" method="post" name="formLogin">
		<label for="user_id">아이디</label>
		<input type="text" id="user_id" name="user_id"><br> 
		<label for="user_pw">비밀번호</label>
		<input type="text" id="user_pw" name="user_pw"><br>
		<input type="submit" value="로그인">
		<input type="reset" value="다시입력"> 		
	</form>
</body>
</html>

 

 

 

  • LoginServlet3.java
package servlet01.ex02;

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

@WebServlet("/login3")
public class LoginServlet3 extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		System.out.println("아이디 : "+id);
		System.out.println("비밀번호 : "+pw);
	}

}

 

 

 

 

  • 로그인 (get&post 모두 받는 서블릿 생성)
  • login4.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
	<h2>로그인 창</h2>
	<form action="login4" method="post" name="formLogin"> 
	<!--method: 전송방식-->
		<label for="user_id">아이디</label>
		<input type="text" id="user_id" name="user_id"><br> 
		<label for="user_pw">비밀번호</label>
		<input type="text" id="user_pw" name="user_pw"><br>
		<input type="submit" value="로그인">
		<input type="reset" value="다시입력"> 		
	</form>
</body>
</html>

 

 

 

  • LoginServlet4.java
package servlet01.ex02;

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


@WebServlet("/login4")
public class LoginServlet4 extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		System.out.println("아이디 : "+id);
		System.out.println("비밀번호 : "+pw);
	}

}

 

 

 

 

  • 로그인 (기존html + 자스에서 서블릿 요청)
  • login5.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
<script type="text/javascript">
	function fn_validate(){
		let form = document.formLogin;
		let id = form.user_id.value;
		let pw = form.user_pw.value;
		if (id.length==0||id==""){
			alert('아이디를 입력해주세요');
		} else if (pw.length==0||pw==""){
			alert('비밀번호를 입력해주세요');
		} else {
			form.method="post";
			form.action="login5";
			form.submit();
		}
	}
</script>
</head>
<body>
	<h2>로그인 창</h2>
	<form name="formLogin">
		<label for="user_id">아이디</label>
		<input type="text" id="user_id" name="user_id"><br> 
		<label for="user_pw">비밀번호</label>
		<input type="password" id="user_pw" name="user_pw"><br>
		<input type="hidden" name="address" value="서울시 종로구"> <!--정보를 서버에만 전달-->
		<input type="button" value="로그인" onclick="fn_validate()">
		<input type="reset" value="다시입력"> 		
	</form>
</body>
</html>

 

 

 

  • LoginServlet5.java
package servlet01.ex02;

import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/login5")
public class LoginServlet5 extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	protected void doHandle(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");
		String address = request.getParameter("address");
		out.print("<html><body>");
		out.print("<p>"+id+"님 환영합니다!</p>");
		out.print("<p>주소 : "+address+"</p>");
		out.print("</body></html>");
	}

}

 

 

 

 

  • 로그인 (조건 추가)
  • LoginTestServlet.java
package servlet01.ex02;

import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/loginTest")
public class LoginTestServlet extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request,response);
	}

	protected void doHandle(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");
		if(id != null && id.length() != 0) {
			out.print("<html><body>");
			out.print(id+"님이 로그인했습니다.");
			out.print("</body></html>");
		} else {
			out.print("<html><body>");
			out.print("아이디를 입력해주세요<br>");
			out.print("<a href='http://localhost:8080/servlet01/login6.html'>로그인 창으로 이동</a>");
			out.print("</body></html>");
		}

	}

}

 

 

 

 

  • 구구단 출력
  • gugu.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구구단</title>
</head>
<body>
	<h2>구구단</h2>
	<form action="gugu" method="get" name="form">
		<label for="dan">단 입력</label>
		<input type="text" id="dan" name="dan"><br> 
		<input type="submit" value="구구단 출력">
	</form>
</body>
</html>

 

 

 

  • guguServlet.java
package servlet01.ex02;

import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/gugu")
public class guguServlet extends HttpServlet {

	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();
		int dan = Integer.parseInt(request.getParameter("dan"));
		out.print("<html><body>"); //
		out.print("** "+dan+" **<br>");
		for (int i=1;i<10;i++) {
			out.print(dan+" X "+i+" = "+(dan*i)+"<br>");
		}
		out.print("<a href='gugu.html'>구구단 입력창으로 이동</a>"); //
		out.print("</body></html>");
	}

}

 

=> 표로 정리

 

package servlet01.ex02;

import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/gugu")
public class guguServlet extends HttpServlet {

	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();
		int dan = Integer.parseInt(request.getParameter("dan"));
		out.print("<html><body>");
		out.print("<table border=1 width=200 align=center>");
		out.print("<tr><th colspan=2 bgcolor='azure'>"+dan+"단</th></tr>");
		for (int i=1;i<10;i++) {
			if (i%2==0) {
				out.print("<tr align=center bgcolor='beige'>");
			}else {
				out.print("<tr align=center bgcolor='whitesmoke'>");
			}
			out.print("<td width=100>"+dan+" X "+i+"</td>");
			out.print("<td width=100>"+(dan*i)+"</td>");
			out.print("</tr>");
		}
		out.print("</table>");
		out.print("<p align=center><a href='gugu.html'>구구단 입력창으로 이동</a></p>");
		out.print("</body></html>");
	}

}

 

 

 

 

  • 서블릿 요청, 응답 과정

클라이언트 - 톰캣 컨테이너 (내부에 서블릿) - DB

1. 클라이언트가 서블릿에 요청 전송
2. 서블릿은 데이터베이스 연동, 자료 탐색
3. 서블릿은 처리 결과를 클라이언트에 전송

 

 

 

 

  • 서블릿 통한 회원정보 테이블 내 회원정보 조회

클라이언트 - MemberServlet - MemberDAO - MemberVO

1. 클라이언트가 MemberServlet에 회원정보 요청
2. MemberServlet은 listMembers() 메소드로 MemberDAO 접근
3. MemberDAO는 DB 접근, 연동 / MemberVO에 데이터 세팅
4. 조회된 데이터는 클라이언트에 HTML로 전송