본문 바로가기
학습/JSP

4. 서블릿(form태그 이용 서블릿에 요청, 환율 계산기)

by Elfen Lied 2022. 11. 1.
반응형

- 요청 (request)

 

- form 태그 이용

webapp 폴더에 html 만듬

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 로그인</title>
</head>
<body>
<!-- form 먼저 만들고 서블릿 만듬 -->
<form action="login" name="frmLogin" method="get">
	아이디 : <input type="text" name="user_id"><br>
	비밀번호 : <input type="text" name="user_pw"><br>
	<input type="submit" value="로그인">
</form>

</body>
</html>

아이디 비번 입력후 로그인 눌러보면

 

get방식으로 주소창에 아이디 비번이 그대로 보임

pro07/login?... 서블릿에 login으로 매핑하면된다

 

 

- 서블릿 만들기

src/main/java에 패키지와 클래스 만듬

package sec01.ex01;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/login")
public class LoginServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("로그인 서블릿 : doGet");
		
		// 모든 요청정보는 HttpServletRequest req 여기 담김
		String userId = req.getParameter("user_id");
		String userPw = req.getParameter("user_pw");
		System.out.println("아이디 : " + userId);
		System.out.println("비밀번호 : " + userPw);
		
	}
}

 

 

이제 다시 webapp 폴더안에 member 폴더 만들고 거기에 login.html로 옮긴다.

이렇게 경로가 바뀌면 아이디 비번 이메일 요청에 오류난다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 로그인</title>
</head>
<body>

<form action="/pro07/login" name="frmLogin" method="get">
	아이디 : <input type="text" name="user_id"><br>
	비밀번호 : <input type="text" name="user_pw"><br>
	이메일 : <input type="text" name="user_email"><br>
	<input type="submit" value="로그인">
</form>

</body>
</html>

html에 form 태그 action="login"을 /pro07/login으로 바꾼다. 

그리고 다시 로그인하고 콘솔창 확인해본다.

 

 

- webapp폴더에 input.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="input" name="frmInput" method="get">
		아이디 :  <input type="text" name="user_id"><br>
		비밀번호 : <input type="text" name="user_pw"><br> 
		<input type="checkbox" name="subject" value="자바"><br>
		<input type="checkbox" name="subject" value="C언어"><br>
		<input type="checkbox" name="subject" value="JSP"><br>
		<input type="checkbox" name="subject" value="안드로이드"><br>
	</form>
</body>
</html>

 

 

- src/main/java에 InputServlet을 servlet으로 생성 

 

package sec01.ex01;

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/input")
public class InputServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		
		String[] subject = request.getParameterValues("subject");
		System.out.println("선택과목 : " );
		System.out.println(Arrays.toString(subject));
	}
}

주의! @WebServlet("/input") 에 /Input  으로 대문자가 되어있을경우 소문자로 바꾸기

 

 

- webapp에 input2.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="input2">
		아이디 : <input type="text" name="user_id"><br>
		비밀번호 : <input type="text" name="user_pw"><br>
		이름 : <input type="text" name="user_name"><br>
		이메일 : <input type="text" name="user_email"><br>
		주소 : <input type="text" name="user_addr"><br>
		기타사항 : <input type="text" name="etc"><br>
		<button>전송</button>
	</form>
</body>
</html>

 

 

- src/main/java에 InputServlet을 복사해서 InputServlet2로 이름 바꿈

package sec01.ex01;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/input2")
public class InputServlet2 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		String id = request.getParameter("user_id");
//		String pw = request.getParameter("user_pw");
//		String name = request.getParameter("user_name");
//		String addr = request.getParameter("user_addr");
//		String etc = request.getParameter("etc");
//		
//		System.out.println("아이디 : " + id);
//		System.out.println("비밀번호 : " + pw);
//		System.out.println("이름 : " + name);
//		System.out.println("주소 : " + addr);
//		System.out.println("기타사항 : " + etc);
		
		Enumeration<String> enu = request.getParameterNames();
		while (enu.hasMoreElements()) {
			String name = enu.nextElement();
			String value = request.getParameter(name);
			System.out.println(name + " : " + value);
		}
		
	}
}

Enumeration 이용하면 위의 내용과 동일하게 다 받을수 있다.

콘솔 확인.

 

 

 

- 응답(response)

- src/main/java에 패키지 sec01.ex02 에 LoginServlet2 클래스 만들어줌

package sec01.ex02;

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;

@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String testId = "admin";
		String testPw = "1234";
		String id = req.getParameter("user_id").trim(); // trim() 공백제거
		String pw = req.getParameter("user_pw").trim();
		
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		out.print("<html>");
		out.print("<body>");
		if(id != null && pw != null && id.equals(testId) && pw.equals(testPw)) {
			// 로그인에 성공한 경우
			out.print("<p>");
			out.print("관리자(" + id + ")님 반갑습니다");
			out.print("</p>");
		} else {
			// 로그인에 실패한 경우
			out.print("<p>");
			out.print("아이디 또는 비밀번호가 일치하지 않습니다.<br>");
			out.print("<a href='/pro07/login2.html'>로그인 페이지로 가기</a>");
			out.print("</p>");
		}
		out.print("</body>");
		out.print("</html>");
		
	}
}

 

 

- webapp에 login2.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="login2">
		아이디 : <input type="text" name="user_id"><br> 
		비밀번호 : <input type="text" name="user_pw"><br>
		<button>로그인</button>		
	</form>
</body>
</html>

 

아이디와 비밀번호가 admin // 1234  일치할 경우 : 

 

아닐경우 : 

이렇게 나오면 된다.

 


 

 

- 환율 계산기

package sec01.ex02;

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;

@WebServlet("/calc")
public class CalcServlet extends HttpServlet {
	
	private static float USD_RATE = 1124.70f;
	private static float JPY_RATE = 10.113f;
	private static float CNY_RATE = 163.30f;
	private static float GBP_RATE = 1444.35f;
	private static float EUR_RATE = 1295.97f;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8"); // 마임타입 결정 - 여기서는 HTML문서 결정 
		PrintWriter out = response.getWriter(); // 출력 객체를 얻어옴
		
		String command = request.getParameter("command"); // 수행할 요청
		String won = request.getParameter("won"); // 원화 값 
		String operator = request.getParameter("operator"); // 외화종류
		
		if(command != null && command.equals("calculate")) {
			String result = calculate(Float.parseFloat(won), operator);
			out.print("<html><title>환율계산기</title><body>");
			out.print("<h2>환율계산기</h2>");
			out.print("<div>변환값 : " + result + "</div>");
			out.print("<a href='/pro07/calc'>환율 계산기</a>");
			return;
		}
		out.print("<html><head><title>환율 계산기</title></head>");
		out.print("<body><form action='/pro07/calc'>");
		out.print("<input type='text' name='won'>");
		out.print("<select name='operator'>");
		out.print("<option value='dollor'>달러</option>");
		out.print("<option value='en'>엔화</option>");
		out.print("<option value='wian'>위안</option>");
		out.print("<option value='pound'>파운드</option>");
		out.print("<option value='euro'>유로</option>");
		out.print("</select><input type='hidden' name='command' value='calculate'>");
		out.print("<button>변환</button></form></body></html>");
		out.close();
		
	}

	private String calculate(float won, String operator) {
		String result = null;
		if(operator.equals("dollor")) {
			result = String.format("%.3f", won/USD_RATE);
		} else if (operator.equals("en")) {
			result = String.format("%.3f", won/JPY_RATE);
		} else if (operator.equals("wian")) {
			result = String.format("%.3f", won/CNY_RATE);
		} else if (operator.equals("pound")) {
			result = String.format("%.3f", won/GBP_RATE);
		} else if (operator.equals("euro")) {
			result = String.format("%.3f", won/EUR_RATE);
		}
		return result;
	}

}

 

반응형

댓글