JSP 실행 방식
사용자가 요청하면 JSP를 요청하면 .JAVA 클래스로만들고 다시 JAVA파일을 class파일로 컴파일시켜준다
JSP는 JAVA+ HTML 이라고 생각하면편하다
JSP 특징
1. jsp 파일이 변경되지 않는다면 .jsp 파일에 대한 컴파일은 다시 일어나지 않음
2. jsp 파일이 변경 될때마다 Web Container는 translation, load, init 과정 수행
3. jsp 파일의 배포 환경은 HTML과 동일
JSP 표기법
Comments tag
jsp에서의 주석은 <%-- 주석내용 --> 같은 방식으로사용합니다.
jsp주석은 웹으로 확인하였을시 안보입니다.
test1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주석 태그</title>
</head>
<body>
<h1>jsp 주석 실습하기</h1>
<p>html 주석을 사용했을시</p>
<!-- 이것은 HTML 주석입니다! -->
<!-- 저장하는 개발자 -->
<p>jsp 주석을 사용했을시</p>
<%-- 주석은 이렇게사용합니다. --%>
<%-- 주석이 웹환경에서 보일까요? --%>
</body>
</html>
Directive tag
JSP page 전체에 영향을 미치는 정보를 기술할 때 쓰임
지시자 종류는 page, include, taglib(아직안배움..)
import
변환될 서블릿 클래스에 필요한 자바 클래스의 import문 정의
java.lang, javax.servlet, javax.servlet.http, javax.servlet.jsp는
기본적으로 import 되어 있으며 여러 packge import 시 ','로 구분
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.ArrayList, java.util.Date"
%>
<%-- 페이지에 import가 필요할시 위처럼 import구문안에 필요한 클래스 임포트 작업해주면됨 --%>
<%
// ArrayList 생성
ArrayList<String> list = new ArrayList<String>();
// Date 생성
Date now = new Date();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>import문</title>
</head>
<body>
</body>
</html>
import 했을시
contentType
MIME 타입과 문자 인코딩 설정
현재페이지는 html페이지이며 언어는 UTF-8입니다.
errorPage
해당 JSP페이지가 발생시키는 모든 runtime exception을 처리할 다른 JSP페이지 지정, 값은 상태적인 URL
만약 에러가발생했을시 어디페이지로 보낼지 설정하는 태그
에러페이지로 이동
isErrorPage
현재 페이지가 JSP오류 처리용 페이지 인지 정의
값은 true/false(default), true인 경우 exception 내장 객체 사용 가능
include
다른 페이지(JSP, HTML)를 포함할 수 있음
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="width:100%; height:100px; background:blue;">
header
</div>
</body>
</html>
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="width:100%; height:100px; background:yellow;">
footer
</div>
</body>
</html>
index.html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="header.jsp" %>
<div style="width:100%; height:400px; background: red;">
content
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
Expression tag
jsp에 값을 동적으로 표시하기위해 사용하는 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = "이순신";
String gender = "남자";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>값 표현태그</title>
</head>
<body>
<h1><%=name %>님은 <%=gender %>입니다. 환영합니다!~</h1>
</body>
</html>
JSP 내장객체
Request 주요 메소드
메소드 명 | 설명 |
getParameter(name) | name 파라미터의 값 리턴 |
getParameterValues(name) | name 파라미터의 값을 배열 형태로 리턴(checkbox 등) |
getParameterNames() | 요청에 포함된 파라미터 이름 리턴 |
getMethod() | 현재 요청 방식 리턴 |
getSession() | 현재 세션 객체 리턴 |
setCharacterEncoding() | 클라이언트에서 서버로 전잘된 값을 지정한 문자 셋으로 변경 |
Response 주요 메소드
메소드 명 | 설명 |
sendRedirect(url) | 응답 결과를 요청으로 하여 지정된 url에 재전송 |
setStatus(int status_code) | 응답으로 전송될 상태 코드 설정, 성공은 200 / OK |
sendError(int status_code) | 에러가 발생할 경우 응답 헤더에 상태 코드 설정 |
setContentType(String) | 서버에서 클라이언트로 전달될 값의 데이터 타입 설정 |
위의 메소드들을 사용해 간단한실습
햄버거 가게에 키오스크가있는데
햄버거, 사이드메뉴 선택후 주문하기 누르면
주문한 음식 및 총결제 가격 값 나오도록 실습해보겠습니다.
order.jsp(주문 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>햄버거 키오스크</title>
</head>
<body>
<h1>안녕하세요. 맥도날드덕 입니다. 햄버거를 주문해주세요!</h1>
<form action="/2_JSP/payMent" method="post">
<table border="1">
<tr>
<th>종류</th>
<th>메뉴명</th>
<th>가격</th>
<th>선택</th>
</tr>
<tr>
<th rowspan="5">햄버거</th>
<td>불고기버거</td>
<td>3000</td>
<td><input type="radio" name="hambuger" value="불고기버거"></td>
</tr>
<tr>
<td>치즈버거</td>
<td>3000</td>
<td><input type="radio" name="hambuger" value="치즈버거"></td>
</tr>
<tr>
<td>치킨버거</td>
<td>4000</td>
<td><input type="radio" name="hambuger" value="치킨버거"></td>
</tr>
<tr>
<td>빅맥버거</td>
<td>4500</td>
<td><input type="radio" name="hambuger" value="빅맥버거"></td>
</tr>
<tr>
<td>불닭버거</td>
<td>6000</td>
<td><input type="radio" name="hambuger" value="불닭버거"></td>
</tr>
<tr>
<th rowspan="5">사이드</th>
<td>콜라</td>
<td>1200</td>
<td><input type="checkbox" name="side" value="콜라"></td>
</tr>
<tr>
<td>사이다</td>
<td>1400</td>
<td><input type="checkbox" name="side" value="사이다"></td>
</tr>
<tr>
<td>감자튀김</td>
<td>2100</td>
<td><input type="checkbox" name="side" value="감자튀김"></td>
</tr>
<tr>
<td>양념감자</td>
<td>2400</td>
<td><input type="checkbox" name="side" value="양념감자"></td>
</tr>
<tr>
<td>토네이도</td>
<td>3000</td>
<td><input type="checkbox" name="side" value="토네이도"></td>
</tr>
</table>
<br>
<input type="submit" value="주문하기">
</form>
</body>
</html>
PayMent.java(계산할 서블릿)
package order;
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("/payMent")
public class PayMent extends HttpServlet {
private static final long serialVersionUID = 1L;
public PayMent() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
int total = 0; //총합 계산
String sideStr = ""; // 사이드 선택메뉴 하나로 합치기
// radio값 가져오기
String hambuger = request.getParameter("hambuger");
// checkbox값 가져오기
String[] sides = request.getParameterValues("side");
// 햄버거 메뉴 계산하기
switch(hambuger) {
case "불고기버거" : total += 3000; break;
case "치즈버거" : total += 3000; break;
case "치킨버거" : total += 4000; break;
case "빅맥버거" : total += 4500; break;
case "불닭버거" : total += 6000; break;
}
// 사이드 메뉴 계산하기
if(sides != null) {
for(int i = 0; i < sides.length; i++) {
sideStr += sides[i] + " ";
switch(sides[i]) {
case "콜라" : total += 1200; break;
case "사이다" : total += 1400; break;
case "감자튀김" : total += 2100; break;
case "양념감자" : total += 2400; break;
case "토네이도" : total += 3000; break;
}
}
}
// 햄버거, 사이드, 총합 결과창으로 보내기위해 저장
request.setAttribute("hambuger", hambuger);
request.setAttribute("side", sideStr);
request.setAttribute("total", total);
// 저장된 매개변수값과 페이지이동
RequestDispatcher dispatcher = request.getRequestDispatcher("memory/orderResult.jsp");
dispatcher.forward(request, response);
}
}
orderResult.jsp(주문목록 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String hambuger = (String)request.getAttribute("hambuger");
String side = (String)request.getAttribute("side");
int total = (int) request.getAttribute("total");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주문 목록 페이지</title>
</head>
<body>
<h1>주문 목록</h1>
<h2>
햄버거 : <%= hambuger %>
</h2>
<h2>
사이드메뉴 : <%= side %>
</h2>
<h3>총 금액 : <%= total %></h3>
</body>
</html>
3000 + 1200 + 1400 + 2400
정상적으로 출력되는것을 확인할수있다.
보니깐 jsp에서는 대부분 화면을 구성하는페이지로 작성하는것이고
서블릿으로 보냈다가 서블릿이 계산한결과를 jsp로 결과값만보내서 동적으로 표시하는 루트로 진행하면될거같다
'프로그래밍 > JSP' 카테고리의 다른 글
JSP - 미니 프로젝트(1.메인페이지) (1) | 2021.08.23 |
---|---|
JSP - 미니 프로젝트 INTRO (0) | 2021.08.23 |
Servlet&JSP - 사용자 데이터 전송 방식 (0) | 2021.08.17 |
Servlet&JSP - tomcat (0) | 2021.08.17 |
JSP 파일업로드, 다운로드 (0) | 2021.02.12 |