1) Servlet , JSP 정리
2) JSP내장객체
2-1 ) 영역개념
2-2)request
2-3)response
2-4)pageContext
1) forword
2)pageContext 예
3) pageContext에서의 include
2-5) session
1) session예제1(장바구니)
2) session 예제2
1)Servlet JSP 정리
== Servlet ==
실행순서
1. 첫번째요청
(1) 서블릿의 객체화 , 생성자호출
(2) init() 호출됨
-GET 요청 : doGet() 호출
-POST 요청 : doPost() 호출
2.두번쨰 요청
(1) Service() 호출
-GET 요청 : doGet() 호출
-POST 요청 : doPost() 호출
GET 방식 : 기본 method방식
POST 방식 : <form method="post"...>요청
=== JSP ===
1.기본구성요소
(1) 지시어(Directive) <%@ 종류속성=.. %>
-page : JSP 페이지의 특징 설정
contentType: mime형태 문서종류설정(인코딩방식)
import : jsp페이지에서 사용되는 클래스의 패키지 등록
isErrorPage : 현재페이지가 오류페이지 (기본값:false)
-include : 다른페이지를포함시킬떄 사용
<%@ include file="포함시킬페이지명"%>
2개의 jsp페이지가 하나의 서블릿으로생성(변수공유가능)
-taglib : 커스텀태그 사용시 설정
(2)스크립트(Script) 자바소스의 영역
- 스크립트릿 <%... %> : _jspService() 메서드에 자바소스로생성
-표현식 <%=.. %> : 값을 웹화면에출력
값이 존재 : 변수, 상수 , 리터널 ,리턴값 있는 함수
-선언문 <%!.. %> : 서블릿의 멤버로생성됨(거의사용안함)
(3) 주석문(comment) :
- jsp 주석 : <%-- --%> : jsp가 servelt으로생성시 주석으로 됨
(서블릿에 보여지지않음)
-java 주석 : 스크립트영역에서만 사용 가능함
서블릿이 컴파일시 주석처리됨(실행되지않는영역)
생성된 서블릿에 보인다
-HTML 주석<!-- --> : 브라우저에서 주석으로처리됨(브라우저의소스보기에 보임)
jsp나 서블릿에서는 주석으로 인식하지않는다
2) JSP 내장객체 (8+1)
1.request : 요청객체(브라우저에서 전달되는 요청정보 저장)
2.response : 응답객체(브라우저로 전달하는 정보 저장)
3.pageContext : 현재페이지의 정보저장하고있는 객체
4.session : 브라우저의 상태정보를 저장할수있는 객체
5.applcation : 웹 어플리케이션(프로젝트)정보 저장 객체
6.out : response 객체의 출력버퍼가 목적지인 스트림객체
7.config : 서블릿 환경변수를 저장하는 객체
8.page : 서블릿 객체 this와 같은 객체(자주사용 X)
9. exception : 예외객체 #(error 페이지에서만 제공되는 객체)
2-1) 영역개념
page영역 : 한개의 jsp페이지가 하나의 page영역임 => pageContext 객체를 공유함
(includeDirective의 경우 페이지2개가 하나의 page영역일수도 있음)
request 영역 : 한번의 요청에서 응답까지의 실행 영역 => request객체 공유
session 영역 : 하나의 브라우저에서 실행되는 모든페이지의 영역 ==>session 객체공유
application 영역 : 하나의 프로젝트의 모든JSP페이지는 같은영역 => application객체공유
영역담당 객체 : pageContext , requset , session , application
=> 속성등록(setAttirbute)
조회(getAttirbute)
삭제기능(remvoeAttribute)
2-2) request 객체
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>request 객체 : 클라이언트의 요청정보를 저장하고있는 객체</h2>
<!-- submit 시 ex01_request.jsp로 보낸다 -->
<!-- method = post( URL에 정보가노출X) -->
<form action="ex01_request.jsp" method="post">
<!-- name : 파라미터값(서버로전송되는값) -->
이름:<input type="text" name="name"><br>
나이:<input type="text" name="age"><br>
성별:<label for="ma">
<input type="radio" name="gender" value="1" id="ma">남
</label>
<label for="fa">
<input type="radio" name="gender" value="2" id="fa">여<br>
</label>
취미:<input type="checkbox" name="hobby" value="trip">여행
<input type="checkbox" name="hobby"value="cook">요리
<input type="checkbox" name="hobby"value="read">독서
<input type="checkbox" name="hobby"value="soccer">축구<br>
출생년도 : <select name="year">
<option>1995</option><option>1996</option><option>1997</option>
<option>1998</option><option>1999</option><option>2000</option>
<option>2001</option><option>2002</option><option>2003</option>
</select>
<input type="submit" value="전송">
</form>
</body>
</html>
전송(submit) 시 브라우저에서 ex01_request.jsp파일로 요청을 보낼것이다
파라미터명 : <input type=".." name="파라미터명">
String request.getParameter(파라미터명) : 파라미터의 값 1개만 리턴
String[] request.getParameterValues(파라미터명) : 파라미터의값들을 배열로 리턴
Enumeration request.getParameterNames() : 파라미터의 이름들 가져오기
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>전송된 파라미터값 출력</title>
</head>
<body>
<% //클라이언트가 전송한 데이터를 인코딩하여 한글 깨짐을 방지
request.setCharacterEncoding("UTF-8");
//파라미터(name)속성으로 요청정보의 파라미터를 가져옴
String name = request.getParameter("name");
String age = request.getParameter("age");
String gender = request.getParameter("gender");
//getParameter("파라미터명") : 한개의값만조회
String hobby = request.getParameter("hobby");
//select태그 : option태그의 value값
String year = request.getParameter("year");
%>
<%-- 화면에 표시되는 부분들(표현식) --%>
이름 : <%= name %><br>
나이 : <%= age %><br>
성별 : <%= gender.equals("1")?"남":"여" %><br>
취미 : <%=hobby %><br>
출생년도 : <%=year %><br>
<hr>
<h3>모든취미정보 조회</h3>
<%
String[] hobbies = request.getParameterValues("hobby");
for(String h : hobbies){
%>
<%= h %> <%--for문 내부에서 동작 --%>
<% } %>
<hr>
<h3>모든파라미터 정보 조회</h3>
<table border="1">
<tr><th>파라미터이름</th><th>파라미터값</th></tr>
<%--
Enumeration : 반복자.
Enumeration.getParameterNames(); 파라미터의 이름목록리턴
--%>
<% Enumeration e = request.getParameterNames();
while(e.hasMoreElements()){
//pname : 파라미터 이름 중 한개
String pname = (String)e.nextElement();
//values : 파라미터의 값들
String[] values = request.getParameterValues(pname);
%>
<%-- while 구문 내부문장 --%>
<tr><td><%=pname %></td>
<td><% for(String s: values){ %>
<%= s %>
<% } %><%--for문종료 --%>
</td>
</tr>
<%} %><%--while문 종료 --%>
</table>
</body>
</html>
2-3)response (응답객체)
response.sendRedirect()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>response :응답객체</title>
</head>
<body>
<h1>response 객체는 브라우저에 전달되는 객체라 이해하면된다
내부에 출력버퍼를 가지고있어서 , 브라우저에 전달되는 내용을 저장하고있다</h1>
<h2>또한 response 객체를 이용해 브라우저로 하여금 다른페이지를 요청하도록 할 수 있다.
다른페이지를 요청하도록 하는것을 redirect 라고 한다.</h2>
<h2>지금보여지고있는 페이지의 내용은 하나도 보이지안음</h2>
<%-- 밑에 sendRedirect떄문에 위에있는 문장들은 나타나지않을것임 --%>
<%-- response.sendRedirect(".jsp")를 보자마자
ex02_response.jsp로 다시 요청한다
--%>
<% response.sendRedirect("ex02_response.jsp"); %>
</body>
</html>
ex01의 모든내용은무시됨
위의 코드 실행 시 ex02_response.jsp 의 urlMapping
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex02_response2.jsp</title>
</head>
<body>
<h2>ex02_response2.jsp</h2>
ex01_response1.jsp 페이지에서 요청하면 이 페이지가 호출 <br>
브라우저의 url 부분도 이 페이지의 url로 변경되어 있습니다 <br>
이런현상을 redirect , 이후의 forward와 비교해 정확한 의미를 이해하자 <br>
<h2><%= request.getParameter("id")%></h2>
</body>
</html>
2-4) pageContext
1)forward
ex01_form.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>
<select id="city">
<option value="seoul">서울</option><option value="busan">부산</option>
</select>
<input type="button" value="도시조회" onclick="city_select(city.value)">
<script type="text/javascript">
function city_select(city) {
location.href = "ex01_city.jsp?city="+city;
<%--select에 따라 현재 URL을 다음과같이 변경한다 --%>
}
</script>
</body>
</html>
ex01_city.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>
<h1>이 페이지는 보여지지않습니다</h1>
<%
//요청받은 파라미터를 가져옴
String city = request.getParameter("city");
//브라우저와 상관없이 서버내부에서 ex01_seoul.jsp | ex01_busan.jsp 페이지를 forwarding
// ex01_seoul.jsp | ex01_busan.jsp 의 결과로 브라우저에게 응답 전달
//ex01_city.jsp 페이지와 forward된 ex01_seoul.jsp | ex01_busan.jsp는
// 같은 request 영역에 속함
pageContext.forward("ex01_"+city+".jsp"); //request , response 객체 전달
/*pageContext.forward() :
현재 JSP 페이지를 실행하지 않고, 지정된 JSP 파일로 요청을 넘기는 역할을 합니다.*/
%>
</body>
</html>
pageContext.forward() :
현재 JSP 페이지를 실행하지 않고, 지정된 JSP 파일로 요청을 넘기는 역할을 합니다
(브라우저상관없이 서버 내부에서 페이지를 forward)
현재 페이지의 출력 내용이 사라지고, 새로운 JSP로 완전히 이동한다.
request , response 객체도 전달
ex01_seoul.jsp ex01_busan.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>
<h3>부산은 대한민국의 밑</h3>
<h3>부산의 인구는 약 500만명</h3>
<h3><%= request.getParameter("city") %></h3>
</body>
</html>
--------------------------------------------------------------------------------------------
<%@ 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>
<h3>서울은 대한민국의 수도</h3>
<h3>서울의 인구는 약 1000만명</h3>
<h3><%= request.getParameter("city") %></h3>
</body>
</html>
2) pageContext 예제
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pageContext 예제</title>
</head>
<body>
<h2>pageContext 객체 : page 영역을 담당하는 객체 , 현재페이지의 자원을 관리함</h2>
<h3>
<%
// == : 객체가동일한경우 true
if(request == pageContext.getRequest()){%>
request객체와 pageContext.getRequest() 함수가 리턴하는 객체는 같은 객체<br>
<% }%>
<%
if(response == pageContext.getResponse()){%>
response객체와 pageContext.getResponse() 함수가 리턴하는 객체는 같은 객체<br>
<% }%>
<%
if(session == pageContext.getSession()){%>
session객체와 pageContext.getSession() 함수가 리턴하는 객체는 같은 객체<br>
<% }%>
</h3>
<h3>pageContext 객체는 영역담당 객체이므로 속성관리 메서드를 가진다</h3>
<% pageContext.setAttribute("today", new Date()); %>
today : <%= pageContext.getAttribute("today") %><br>
</body>
</html>
pageContext 객체 : page 영역을 담당하는 객체 , 현재페이지의 자원을 관리함
request객체와 pageContext.getRequest() 함수가 리턴하는 객체는 같은 객체
response객체와 pageContext.getResponse() 함수가 리턴하는 객체는 같은 객체
session객체와 pageContext.getSession() 함수가 리턴하는 객체는 같은 객체
pageContext 객체는 영역담당 객체이므로 속성관리 메서드를 가진다
today : Wed Apr 02 12:27:55 KST 2025
3) PageContext에서의 include
include 지시어와 다른점은 하나의 서블릿에 생성되지않음
그래서 변수가 공유되지 않습니다. (하지만 같은 request영역)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 예제</title>
</head>
<body>
<h3>ex03_include.jsp 페이지에서 출력된 내용 입니다</h3>
<hr>
<%
String msg= "ex03_include.jsp페이지의 메세지임";
pageContext.include("ex03_include2.jsp");
%>
<hr>
test 파라미터(1) : <%= request.getParameter("test") %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h4>ex03_include2.jsp 페이지</h4>
<p>
ex03_include.jsp 페이지에 포함되는 페이지 입니다.<br>
include 지시어와 다른점은 하나의 서블릿에 생성되지않음<br>
그래서 변수가 공유되지 않습니다.<br>
<%--
System.out.println(msg); 사용불가능
--%>
test파라미터(2) : <%= request.getParameter("test")%>
</p>
name이 test인 파라미터하나를 입력해봤다( request영역 확인을 위해)
2-5)session
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>seesion 객체 예제</title>
</head>
<body>
<%
//session 유지시간 설정 : 10초
//Tomcat의 기본 session 유지시간 : 30분(1800초)
//session유지시간 : 최종접속시간 이후 10초
//(10초간 아무행동도하지않았을 때)
session.setMaxInactiveInterval(10);
%>
<h3>session 정보 : 브라우저별로 session이할당 <br>
주요기능 : 클라이언트 정보 저장</h3>
isNew() : <%= session.isNew() %><br><%--session이 새로 만들어졌는가? --%>
생성시간 : <%= session.getCreationTime()%><br><%--session 생성 시간 --%>
최종접속시간 : <%= session.getLastAccessedTime() %><br>
<%--session객체가 최종으로 사용된 시각 --%>
session id : <%=session.getId() %><br><%--session의 고유ID값(유일성) --%>
</body>
</html>
최초 실행 시
10초 내로 새로고침 or 클릭을 실행 시
10초 이후에 새로고침을 해봤을 때(session 재생성)
1) Session 예제1 ( 장바구니)
여기서 같은session객체를 가지고있는지 손쉽게 확인하기위해
subString(1,10)으로 id를 1번째에서 9번쨰 숫자만 가져왔음
ex02_cartform.jsp (여기가 실행하는곳이 될것)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--/jspStudy/src/main/webapp/ex07_session/ex02_cartform.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session 이용한 장바구니</title>
</head>
<body>
<!-- submit 시 ex02_cartAdd.jsp로 요청을 보냄 -->
<form action="ex02_cartAdd.jsp" method="post">
<select name="product">
<option>사과</option><option>배</option><option>감</option>
<option>자몽</option><option>귤</option><option>딸기</option>
</select>
<input type="submit" value="장바구니 추가">
</form>
<a href="ex02_cartView.jsp">장바구니보기</a>
ID:<%= session.getId().substring(1, 10) %>
</body>
</html>
ex02_cartAdd.jsp 파일 ( 장바구니 추가버튼 누를시 동작하는 페이지)
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>
<%
request.setCharacterEncoding("UTF-8");
String fruits = request.getParameter("product");
// cart속성을 가져옴
//ex02_cartform과 같은브라우저임(같은session영역)
List<String> cart = (List<String>)session.getAttribute("cart");
//없다면 cart속성을 만든다.
if(cart==null){
cart = new ArrayList<String>();
session.setAttribute("cart", cart);
}
cart.add(fruits);
%>
<script type="text/javascript">
alert('<%=fruits %>가 장바구니에 추가 ID:<%= session.getId().substring(1, 10) %>');
history.go(-1); //전 페이지로
</script>
</body>
</html>
ex02_cartView.jsp ( 조회버튼 누를 시 동작하는 페이지)
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>카트 보기</title>
</head>
<body>
<%
List<String> cart = (List<String>)session.getAttribute("cart");
// 같은 브라우저의 session은 동일하다
if(cart==null || cart.size() == 0 ){
%>
<h3>장바구니에 상품X</h3>
<%} else{ %>
<h3>장바구니상품</h3>
<% for(String s : cart){ %>
<h3><%= s %></h3>
<%--장바구니 조회 후 장바구니 초기화 --%>
<% } } session.removeAttribute("cart");%>
ID:<%= session.getId().substring(1, 10) %>
</body>
</html>
같은 브라우저에 여러개에 페이지가있을경우는
같은 session 영역이란것을 인지하고 있어야함
session.setAttribute() 로 속성을 어딘가에서 만들고
session.getAttribute()를 통해 다른페이지(같은session)에서 조회가 가능
2)session 예제2
ex03_exam1.jsp(메인페이지)
<%@page import="java.util.Date"%>
<%@ 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>
<h3>현재날짜를 session 객체에 등록을 하자</h3>
<%
session.setAttribute("date", new Date());
%>
등록된 날짜 : <%= session.getAttribute("date") %><br>
<a href="ex03_exam2.jsp">등록날짜 조회</a>
</body>
</html>
등록날짜 조회를 누르면 이동할 페이지(ex03_exam2.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>
<h3>
session에 등록된 날짜 조회 후
session 속성에서 제거하기<br>
등록된 날짜가없는 경우에는 다시돌아가기
</h3>
<%
if(session.getAttribute("date")==null){
%>
<script type="text/javascript">
alert('등록된 날짜X');
history.go(-1);
</script>
<%
}else{
%>
<%= session.getAttribute("date") %>
<%session.removeAttribute("date"); } %>
<%-- 조회 후 date속성 삭제--%>
</body>
</html>
등록된날짜가 있을 때 조회 후 새로고침해보기(조회후 속성삭제확인)
날짜를 등록하지않고 조회를 누를시
알림창 + history.go(-1) {전페이지로 돌아감 }
'JSP' 카테고리의 다른 글
부트캠프46일차 (delete , 사진등록 , id,pw찾기) (0) | 2025.04.08 |
---|---|
부트캠프45일차(로그인 , main , sitemesh , 회원목록 , updateForm) (0) | 2025.04.07 |
부트캠프44일차(model1 ) (0) | 2025.04.04 |
부트캠프43일차(내장객체 , cookie ,JDBC) (0) | 2025.04.03 |
부트캠프41일차(servelt , JSP) (0) | 2025.04.01 |