로그인, 피자
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);
}
}
<%@ 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>
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);
}
}
<%@ 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>