국비 49-2

냐아암·2023년 6월 29일
0

국비

목록 보기
63/114

로그인, 피자

LoginServlet.java

package edu.kh.jsp.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;

// @WebServlet("요청주소") 어노테이션
// - 해당 클래스를 Servlet 클래스로 등록(<servlet>태그)하고
//   어떤 요청 주소를 처리할지 지정(<servlet-mapping>태그)

// /JSPProject/login에서 앞의 /JSPProject 지우기
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		// 요청 시 전달된 input 태그의 값(==Parameter) 얻어오기
		// (파라미터는 모두 String 타입이다!!)
		
		String inputId = req.getParameter("inputId");
		String inputPw = req.getParameter("inputPw");
		
		// 파라미터를 잘 얻어왔는지 확인
		System.out.println("ID : " + inputId);
		System.out.println("PW : " + inputPw);
		
		// 간이 로그인 확인 코드
		String result = null;
		
		if(inputId.equals("user01") && inputPw.equals("pass01!")) {
			result = inputId + "님이 로그인하셨습니다.";
		} else {
			result = "아이디 또는 비밀번호가 일치하지 않습니다.";
		}
		
		// out.print("<html>"); --> JSP 교체
		
		// JSP란?
		// - Servlet에 HTML 코드를 쓰는 게 불편하기 때문에
		//   반대로 HTML 코드에 Java 코드를 쓸 수 있게 하는 문서
		
		// * JSP 생성 폴더 위치
		// -> webapp/WEB-INF 폴더 내부에 생성
		
		// ************************************************************
		
		// ** JSP로 응답하기 **
		
		// Dispatcher : 필요한 정보를 제공하는 자 == 발송자
		
		// 위임 : (맡은 일은)넘겨주다
		
		// forward : 전송하다, 보내다
		
		// * 응답 화면을 만드는 Servlet의 일을
		//   좀 더 효율적으로 처리할 수 있는 JSP에게 넘겨줄 예정
		
		// req.getRequestDispatcher("JSP 경로");
		// - HTTPServletRequest 객체가 생성될 때
		//	 내부에 자동으로 요청발송자(RequestDispatcher)가 같이 생성됨
		
		// -"JSP경로" : 전달할 JSP의 경로를 작성
		
		// *** JSP 경로 작성 규칙 ***
		// - webapp 폴더를 기준으로 해서 JSP 파일까지의 모든 경로를 작성!!
		
		RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/loginResult.jsp");
		
		// JSP에게 전송될 예정인 req 객체에 
		// result 변수 값 담아서 같이 전달
		
		// req.setAttribute(String key, Object value);
		// - key는 String(문자열)
		// - value는 모든 객체(타입 상관 없음)
		
		// - Attribute : 속성 (데이터, 값)
		req.setAttribute("res" , result );
		
		// 요청 발송자를 이용하여 req, resp 객체를 전송(forward)함
		dispatcher.forward(req, resp);
	}
	

}

LoginResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<% // 자바 코드를 작성하는 영역

	// 여기는 JSP -> Servlet으로부터 전송받은 req, resp가 있음
	// -> req, resp 사용할 수 있다.
	// -> 대신 이름이 request, response로 바뀜
	
	String r = (String)request.getAttribute("res");
	
	// getAttribute("key")
	// - 반환형 Object -> 원래 타입으로 강제 형변환이 필요하다.


%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 결과 페이지</title>
</head>
<body>

	<!-- 위에 선언된 변수 r에 저장된 값 출력 -->
	<h1><%=r %></h1>
	
	
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSP 프로젝트</title>
</head>
<body>

    <h3>GET 방식 요청</h3>

    <form action="/JSPProject/login" method="GET">

        <!-- 
            요청 주소 : /JSPProject/login
            데이터 전달 방식 : get(주소 뒤에 데이터가 붙어서 전달됨)
         -->


         ID : <input type="text" name="inputId"><br>
         PW : <input type="password" name="inputPw"><br>
         <button>로그인</button>


    </form>
    

    <hr>

    <h3>JSP 테스트</h3>

    <form action="/JSPProject/pizzaOrder" method="get">
        피자 선택(1만원) : 
        <select name="pizza">
            <option>치즈 피자</option>
            <option>고구마 피자</option>
            <option>쉬림프 피자</option>
            <option>콤비네이션 피자</option>
            <option>시카고 피자</option>
        </select>

        <br><br>

        사이즈(L 선택 시 2천원 추가) :
        <label> R <input type="radio" name="size" value="R"></label>
        <label> L <input type="radio" name="size" value="L"></label>

        <br><br>

        수량 : <input type="number" name="amount" min="1" max="10"><button>주문하기</button>
    </form>



</body>
</html>

PizzaOrderServlet.java

package edu.kh.jsp.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;

@WebServlet("/pizzaOrder")
public class PizzaOrderServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		// 파라미터 얻어오기
		String pizza = req.getParameter("pizza");
		
		// radio 타입의 값은 1개밖에 전달되지 않으므로 getParameter()를 사용
		String size = req.getParameter("size");
		
		// 파라미터는 모두 String 타입이다.
		// -> String을 정수로 변경하고 싶은 경우
		//	  Integer.paresInt("문자열")을 사용하여 변경(파싱)
		int amount = Integer.parseInt(req.getParameter("amount"));
		
		// 피자 - 1판 1만원
		// 사이즈 - L인 경우 2천원 추가
		// 수량 - 1~10판
		
		int temp = 0; // 사이즈에 따른 추가 금액
		
		if(size.equals("L")) { // L 사이즈면 2천원으로 변경
			temp = 2000;
		}
		
		int result = (10000 + temp)*amount;
		
		// 응답 화면 작성하는 것을 JSP 위임
		
		// JSP 경로는 webapp 폴더를 기준으로 작성
		RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/orderResult.jsp");
		
		req.setAttribute("res", result);
		
		dispatcher.forward(req, resp);
		
	}
}

orderResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- HTML 주석 (개발자도구에 노출 O) -->

<%--JSP 주석 (개발자도구에 노출 X --%>

<%--

	<%@ %> : 지시자 -> 알려주거나 지시하는 속성을 기입
	
	"charset=UTF-8" : 현재 문서가 UTF-8 문자 인코딩 형식으로 작성되었다.
	pageEncoding="UTF-8" : 현재 문서를 해석할 때 UTF-8 문자 인코딩을 이용해서 해석
	
	<% %> : 스크립틀릿(scriptlet) -> JSP에서 자바 코드를 작성할 수 있는 영역
	-> JSTL 라이브러리를 이용해서 태그 형식으로 변경
	
	<%= %> : 표현식(Expression) -> 자바 코드의 값을 HTML형식으로 표현(출력)

 --%>
    
<% // 자바 코드 작성 영역(scriptlet 스크립틀릿)
	int result = (int)(request.getAttribute("res")); // Object를 int로 형변환
	
	// JSP에서도 요청 시 전달 받은 값(parameter)을 얻어올 수 있다.
	String pizza = request.getParameter("pizza");
	String size= request.getParameter("size");
	String amount = request.getParameter("amount");
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>주문결과</title>

	<style>
		h1{color : red;}
		#area{
			font-size : 18px;
			font-weight : bold;
		}
	</style>

</head>
<body>


	<!-- webapp 폴더 내부 html/css/jsp 등은 서버 끄지 않고도 수정 가능 -->
	<div id="area">
		피자 : <%=pizza %>
		<br>
		사이즈 : 
			<% if(size.equals("R")){%>
				Regualr
			<%} else {%>
				Large
			<%}%>
			
			<!-- <%=size.equals("R") ? "Regular" : "Large"%> -->
		 
		<br>
		수량 : <%=amount %>판
	</div>

	<h1>계산 결과 : <%=result %></h1>
	
	<% for(int i = 1; i<6; i++){ %>
		<h<%=i %>><%=i %>번째 출력 중</h<%=i %>>
	<%} %>


</body>
</html>
profile
개발 일지

0개의 댓글