YJ의 새벽
JSP (Java Server Pages) 란 ? 본문
- JSP
-- JAVA 코드가 들어가 있는 HTML 코드
-- 서블릿보다 쉽고 작성하기 빠름.
-- 디자인부분 (html) 과 로직부분 (java) 로 분리시킬수 잇음.
-- .jsp 파일에 지시자 꼭 작성
-- <%@ %> : 지시자 ( 알려주거나 지시하는 속성을 기입)
-- charset = UTF-8 : 현재 문서를 해석할 때 UTF-8 인코딩을 이용해서 해석 (해석방법안내)
-- pageEncoding = "UTF-8" : 현재 문서가 UTF-8 인코딩으로 작성되어있음. (문서가 작성된 형식 안내)
-- <% %> : 스크립틀릿 (Scriptlet) : JSP 에서 자바코드를 작성할 수 있는 영역
--> JSTL 라이브러리 이용해 태그 형식 변겅
ex ) < c:if > JSTL < /c:if >
-- <%= %> : 표현식 (Expression) : 자바코드의 값을 HTML 형식으로 출력 (자바의값을 화면에 보이게 함 )
--> EL (Expression Language, 표현언어) 로 변경
ex ) ${ EL }
- JSP 로 응답하기
-- Dispatcher : 발송자 , 필요한 정보를 제공하는 자.
-- RequestDispatcher : 요청을 위임하는 역할의 객체 .
--> 요청에대한 응답화면을 만들어 클라이언트에게 출력하는 역할 을 위임하는 객체 .
-- req.getRequsetDispatcher ( " JSP 경로 " ) = webapp 폴더 기준
-- HttpServletRequset 객체가 생성될때
내부에 요청을 위임하는 객체를 생성하는 방법을 포함하고 있다.
-- forward : 보내다, 전달하다 , 전송하다.
-- forward는 페이지 이동이 아닌 JSP에게 req, resp 를 전달만 하는 것.
--> JSP 응답을 대신하는것 뿐 .
--> 결론 : 페이지 이동 X --> 주소창의 요청 주소도 변하지 않는다 . !!
// *********************** JSP 로 응답하기
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/loginResult.jsp");
req.setAttibure("키",값); // (String key, Object value)
// value 값이 String이라면, 업캐스팅 상태.
dispatcher.forward(req, resp); // req, resp 를 jsp 로 넘겨줌.
손님 --> 웨이터 (Servlet) --> 알바 (dispatcher) =foward --> 셰프 (JSP)
** EX 1 index.html
<!--
로그인
user01 / pass01! 로그인시 성공
-->
<!-- 프로젝트명/서비스요청주소 -->
<form action="/JSPProject1/login" method="post">
ID : <input type="text" name="inputId">
PW : <input type="password" name="inputPw">
<button>로그인</button>
</form>
** EX 1 JAVA 클래스 ( LoginServlet.java )
@WebServlet("/login") // <servlet>, <servlet-mapping> 태그 대체 어노테이션
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); // post방식 데이터문자 인코딩처리
String id = req.getParameter("inputId");
String pw = req.getParameter("inputPw");
System.out.println(id);
System.out.println(pw);
String result = null;
if (id.equals("user01") && pw.equals("pass01!")) {
result = "로그인성공";
} else {
result = "id/pw 불일치";
}
// resp.setContentType("text/html; charset=UTF-8");
// PrintWriter out = resp.getWriter();
// *********************** JSP 로 응답하기
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/loginResult.jsp");
req.setAttribute("r", result);
dispatcher.forward(req, resp); // req, resp 를 jsp 로 넘겨줌.
}
}
** EX 1 loginResult.jsp JSP 파일 .
<%@ page language="java" contentType="text/html; cherset=UTF-8"
pageEncoding="UTF-8"%>
<!-- HTML 주석 : HTML 태그 ,CSS 등 HTML 요소만 주석처리 가능.-->
<%-- JSP 주석 : HTML 요소 + JSP 전용 태그--%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인 결과 페이지</title>
</head>
<body>
<h1>로그인 결과</h1>
<!-- jsp에서 자바코드의 값을 출력하는 방법 -->
<%= request.getParameter("inputId") %> <br>
<%= request.getParameter("inputPw") %> <br>
<%
// jsp 에서는 req, resp 를
// request , response 으로 풀네임 작성해야 한다 !!!
String res = (String)request.getAttribute("r");
// 다운캐스팅 필요
%>
<!-- res 변수 저장된값이 출력 -->
<h3 style='color:green;'> <%= res %></h3>
<button type="button" onclick='history.back()'>돌아가기</button>
</body>
</html>
---> 정리해보자 .
html 에서 name 값을
java 로 받아와서 loginReslt.jsp (html) 로 넘겨주고
dispatcher --> req.getRequserDispatcher("jsp파일경로")
--> req.setAttribute("key",value) --> dispatcher.forward(req,resp);
jsp 에서 html+자바 코드 작성.
--> <% String value = request.getAttribute("key") %>
--> <%= value %>
** EX 2 index.html
<form action="/JSPProject1/pizzaOrder" method="post">
피자 선택(1만원) :
<select name="pizza">
<option>콤비네이션 피자</option>
<option>고구마 피자</option>
<option>쉬림프 피자</option>
<option>하와이안 피자</option>
<option>불고기 피자</option>
</select>
<br><br>
사이즈
<br>
<label>
R <input type="radio" name="size" value="R">
</label>
<br>
<label>
L(+2,000) <input type="radio" name="size" value="L">
</label>
<br><br>
수량 : <input type="number" name="amount" min="1" max="10" value="1">
<br><br>
<button>주문하기</button>
</form>
** EX 2 JAVA 클래스 ( PizzaOrderServlet.java )
@WebServlet("/pizzaOrder")
public class PizzaOrderServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String size = req.getParameter("size"); // R or L
int amount = Integer.parseInt(req.getParameter("amount"));
// String --> int 변환 .
// 기본(10000) + 사이즈( 0 or 2000 ) * 수량
int temp=0;
if( size.equals("L" )) {
temp = 2000;
}
int total = (10000 + temp) * amount;
// JSP 요청위임 객체생성
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/orderResult.jsp");
req.setAttribute("tot", total); // req에 total값 세팅
dispatcher.forward(req, resp); // req, resp 위임.
}
}
** EX 2 orderResult.jsp JSP 파일 .
<%@ page language="java" contentType="text/html; cherset=UTF-8"
pageEncoding ="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>주문결과</title>
<style>
#container{
width : 400px;
border : 1px solid black;
margin : auto;
}
</style>
</head>
<body>
<%
int total = (int)request.getAttribute("tot");
String pizza = request.getParameter("pizza");
String size = request.getParameter("size");
String amount = request.getParameter("amount");
%>
<div id ="container">
주문한 피자 : <%= pizza %> <br>
<% if(size.equals("L")){ %>
Large
<% } else { %>
Regular
<% } %>
<br>
수량 : <%= amount %> 판
<h3> 총 합계 : <%= total %></h3>
</div>
</body>
</html>
** EX 3 index.html
<form action="/JSPProject1/login2" method="post">
<h2>회원가입 (JSP 버전)</h2>
<table id="table1">
<tr>
<th>아이디</th>
<td><input type="text" name="inputId"></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="inputPassword"></td>
</tr>
<tr>
<th>비밀번호 확인</th>
<td><input type="password" name="inputPassword"></td>
</tr>
<tr>
<th>이름</th>
<td><input type="text" name="inputName"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" name="inputEmail"></td>
</tr>
<tr>
<th>취미</th>
<td><label>공부 <input type="checkbox" name="hobby" value="공부"></label>
<label>게임 <input type="checkbox" name="hobby" value="게임"></label>
<label>헬스 <input type="checkbox" name="hobby" value="운동"></label><br>
<label>독서 <input type="checkbox" name="hobby" value="독서"></label>
<label>영화 <input type="checkbox" name="hobby" value="영화"></label>
<label>코딩 <input type="checkbox" name="hobby" value="코딩"></label>
</td>
</tr>
<tr>
<td></td>
<td><button>회원가입</button></td>
</tr>
</table>
</form>
** EX 3 JAVA 클래스 ( LoginServlet2.java )
@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String[] inputPassword = req.getParameterValues("inputPassword"); // password를 배열로 가져온다.
int result=0;
if ( inputPassword[0].equals(inputPassword[1])) { // 비밀번호가 같으면 1을
result=1;
}else { // 비밀번호가 다르면 0을 리턴.
result=0;
}
RequestDispatcher dispatcher = req.getRequestDispatcher("WEB-INF/views/login2Result.jsp");
req.setAttribute("key", result); // 리턴값을 "key" 로 전달.
dispatcher.forward(req, resp);
}
}
** EX 2 login2Result .jsp JSP 파일 .
<body>
<%
int result = (int)request.getAttribute("key");
String inputId = request.getParameter("inputId");
String[] inputPassword = request.getParameterValues("inputPassword");
String inputName = request.getParameter("inputName");
String inputEmail = request.getParameter("inputEmail");
String[] hobby = request.getParameterValues("hobby");
%>
<% if ( result == 1) { %> <!-- 비밀번호가 같으면 리스트 출력 -->
<li>아이디 : <%= inputId %></li>
<li>비밀번호 : <%= inputPassword[0] %></li>
<li>이름 : <%= inputName %></li>
<li>이메일 : <%= inputEmail %></li>
<li>취미 :
<% if ( hobby != null){ %>
<% for ( int i =0 ; i < hobby.length ; i++){ %> <!-- 취미값 받아오기 -->
<%= hobby[i] %>
<% }
} %>
</li>
<h3><%= inputName %>님의 회원가입이 완료되었습니다</h3>
<% } else { %> <!-- 비밀번호가 다르면 실패문구 출력 -->
<h3> 회원가입이 실패되었습니다</h3>
<% } %>
<br>
<button type="button" onclick='history.back()'>돌아가기</button>
</body>
'SelfStudy > Server ( Servlet , JSP )' 카테고리의 다른 글
Servlet( EL ) (0) | 2023.03.21 |
---|---|
Servlet vs JSP ( 차이점 ) (0) | 2023.03.20 |
Servlet 이란?( Get, Post 방식 ) (0) | 2023.03.17 |
오라클 포트:8080 다른걸로 바꾸기 !! (0) | 2023.03.17 |
이클립스와 톰캣 연동하기 !! (0) | 2023.03.17 |