본문 바로가기

Study/JSP

[jsp] request, response, <jsp:forward>, <jsp:param>, 쿠키

JSP - <FOCUS>페이지 이동 시 데이터 값 전달, DB 데이터 활용

9가지의 내장 객체


request 객체

- 클라이언트에서 서버로 전송되는 데이터에 대한 정보를 저장
요청 관련 메소드
- getContextPath() : JSP페이지가 속한 웹 어플리케이션의 컨텍스트 패스를 구한다
Context - 독립된 하나의 웹 어플리케이션을 돌릴 수 있는 환경
- getMethod() : 요청방식이 Get, post방식인 지 알려줌
- getServerName() : 서버이름을 구한다
- getServerPort() : 서버포트를 구한다
- getRequestURI() : 요청 URL에서 쿼리문자를 제외한 부분
헤더 관련 메소드
getCookies() : 요청과 관련된 모든 쿠키를 구한다, 쿠키가 배열로 넘어온다
요청 파라미터 관련 메소드
- getParameter(String name) : 지정 이름의 파라미터 중 첫 번째 파라미터의 값을 구한다(단수형)
- getParameterNames() : 모든 파라미터의 이름을 구함(복수형)
- getParameterValues(String name) : 지정 이름을 가진 파라미터의 모든 값을 String[]으로 구한다(복수형)

예제 request>1.jsp 폼형식

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <form action="1-1.jsp" method="post"> 이름 : <input type="text" name="name" size="10">
   <br> 
   주소 : <input type="text" name="address" size="30"> 
   <br>  
   좋아하는 동물 : 
   <input type="checkbox" name="pet" value="dog">강아지 
   <input type="checkbox" name="pet" value="cat">고양이 
   <input type="checkbox" name="pet" value="pig">돼지 
   <br> 
   <input type="submit" value="전송">
  </form>
 </body>
</html>

1-1.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>    
<%@ page import = "java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <% request.setCharacterEncoding("euc-kr");%>
  <h3>요청 결과보기</h3>
  이름: <%= request.getParameter("name") %>
  <br />
  주소: <%= request.getParameter("address") %>
  <br />
  
  <h3>getParameterValues() 사용 결과</h3>
  
  좋아하는 동물 : 
  <% //여러 개의 데이터값을 가져온다 String values[] = request.getParameterValues("pet"); 
   if (values != null) {  
    for(int i=0; i<values.length; i++)   {
  %>   
     <%= values[i] %>
  <%   } 
   }
  %>
  <h3>getParameterNames</h3>
  <% //순서대로 들어오지 않아 잘 쓰진 않는다 
   Enumeration en = request.getParameterNames(); 
   while(en.hasMoreElements()) {  
    String name = (String)en.nextElement();
  %> 
  <%=  name 
  %>
  <% 
   } 
  %>
 </body>
</html>

 

 

response객체

- JSP 페이지의 실행결과를 웹 브라우저로 되돌려줄 때 사용하는 객체
URL 재작성 관련 메소드
sendRedirect(url) : 웹 서버가 웹 브라우저에게 지정한 URL로 자동 이동되도록 한다
response.sendRedirect("main.jsp?name=" + ex.toEng(name));


2.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <center><!-- 로그인 버튼을 누르면 아이디와 패스워드로 2_login.jsp로 이동하여 회원 인증 처리를 한다.  -->
  <form action="2_login.jsp" method="post">
   <table> 
    <tr>
     <td align="right">아이디  :</td>  
     <td align="left"><input type="text" name="id"></td> 
    </tr> 
    <tr size=80>  
     <td align="right">패스워드 :</td>  
     <td align="left"><input type="password" name="pw"></td> 
    </tr> 
    <tr>  
     <td><input type="submit" value="로그인"></td>  
     <td><input type="reset" value="취   소"></td> 
    </tr>
   </table>
  </form>
 </body>
</html>

2_login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<%@ page import = "util.StringUtil" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <!--  
   데이터 베이스와 접목하면 여러명의 회원 정보를 저장할 수 있다.
   사용자에 대해서 회원 인증 서비스를 해 줄 수 있지만,
   데이터 베이스와 연동하는 방법을 배우지 않아서 이 예제에서는한 명의 회원만을 사용한다. 
  -->
  <% 
   String id = "ss"; 
   String pw = "ss"; 
   String name = "쏘SPACE";  
   
   //아이디와 비밀번호가 모두 일치해야 로그인이 성공한다 
   if(id.equals(request.getParameter("id")) && pw.equals(request.getParameter("pw"))) {  
    //회원이름을 영문으로 디코딩한 후 쿼리 스트링으로 넘겨준다  
    response.sendRedirect("2_main.jsp?name="+ StringUtil.toEng(name)); 
   } 
   //아이디와 비밀번호가 일치하지 않았을 때 로그인 페이지로 이동 
   else {  
    response.sendRedirect("2.jsp"); 
   } 
  %>
 </body>
</html>

2_main.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<%@ page import="util.StringUtil" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <%  
   String name = request.getParameter("name");
  %>
  <!--  영문으로 디코딩한 후 넘겨진 파라미터는 반드시 한글로 인코딩 한다 -->
  <%= StringUtil.toHangul(name) %>님 안녕하세요.
  <br /> 
  오늘도 즐거운 하루 보내세요!!
 </body>
</html>

 

 

액션태그

- JSP 엔진에 특정 동작을 지시
중요한 건 TAG

<jsp:forwoard> 액션태그
- 현재 JSP페이지에서 URL로 지정한 특정 페이지로 넘어갈 때 사용하는 태그
ex>from.jsp에서 <jsp:forwoard page="to.jsp"> 해 줬을 때, from.jsp를 실행하면
from.jsp의 제어가 to.jsp로 완전히 가버린다. (제어가 이동된다.)
But, 주소는 이동하지 않는다.

- 형식 : <jsp:forwoard page="to.jsp">
이런 식으로 많이 쓰인다(MVC 모델 구조의 첫 번째)
String forwardPage = null;
if (조건 판단) {
 forwardPage = "페이지 주소 1"
} else if (조건 판단) {
 forwardPage = "페이지 주소 2"
<jsp:forward = "<%= forwardPage %>" />
- 자바스크립트 페이지 이동 시의 형식
<script type="text/javascript">
location.href = "<%= request.getContextPath() %>이동할페이지";
</script>


예제>forward 형식 사용방법

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  보고싶은 페이지 선택하기
  <%  
   String sel= request.getParameter("code"); 
   if (sel != null) {  
    if(sel.equals("A")) { 
  %>     
  <jsp:forward page="1.jsp" />  
  <%   } else if(sel.equals("B")) { %>    
  <jsp:forward page="2.jsp" />  
  <%   } else if(sel.equals("C")) { %>    
  <jsp:forward page="2_main.jsp" />  
  <%   } 
   }
  %>
  <form action="1.jsp"> 
   <select name="code">  
    <option value="A">A페이지</option>  
    <option value="B">B페이지</option> 
    <option value="C">C페이지</option> 
   </select> 
   <input type="submit" value="이동">
  </form>
 </body>
</html>

출력문 >
보고싶은 페이지 선택하기

<select name="code"></select> <input value="이동" type="submit" /></form>

 


<jsp:param> 태그
- 요청한 페이지로 정보를 전달할 때 사용하는 태그
형식 : <jsp:param name="인자" value="인자값" />

<jsp:include> 액션태그
- 현재 페이지에 다른 페이지의 내용을 포함시키기 위해 사용되는 태그
- 형식 : <jsp:include page="삽입할 페이지" flush="true" or "false" />
flush는 출력 버퍼에 저장되어 있는 데이터를 내준다는 의미, 
false로 해도 데이터는 보내주지만 실제적인 것을 보내주진 않는다
각각의 장점과 단점을 갖고 있다.

페이지 모듈화
include액션태그를 붙여넣기식으로 쓴다
액션태그 - 결과값만 들어온다
지시자 - 소스 통째로 들어온다 

템플레이터..
본문의 내용까지도 include로 만들어준다

hidden 태그
- 화면에 보여지진 않지만, 데이터는 전달된다
- 형식 : <input type="hidden" name="pw" value="1234">

쿠키
- 클라이언트에 저장된 적은 양의 정보, 웹 브라우저에 탑재되어 전송
- 생성자 : Cookie(String name, String value);

세션
- 상태유지, 다른 페이지로 이동하더라도 그전 페이지의 정보가 유지되야 하는 것
 1. JSP서버에서만 접근가능
session 객체가 제공하는 메소드
- getAttribute() : 오브젝트를 저장한다
session값 저장하기
- sessoin.set

예제>세션을 이용한 회원 인증 프로그램
- 2.jsp와 2_login.jsp는 위의 소스를 참고한다


2_mail.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<%@ page import="util.StringUtil" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
 </head>
 <body>
  <center>
   <%  
    String name = request.getParameter("name");
   %>
   <!--  영문으로 디코딩한 후 넘겨진 파라미터는 반드시 한글로 인코딩 한다 -->
   <%= 
    StringUtil.toHangul(name) 
   %>님 안녕하세요.
   <br> 
   오늘도 즐거운 하루 보내세요!!
   <form action="2_logout.jsp" method="post">
    <input type="submit" value="로그 아웃">
   </form>
  </center>
 </body>
</html>

2_logout.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>Insert title here</title>
  <script type="text/javascript"> 
   alert("로그 아웃 되었습니다.");
  </script>
 </head>
 <body>
  <% 
   session.invalidate(); 
  %>
 </body>
</html>


출력문>>
2.jsp

아이디 : <input name="id" />
패스워드 : <input type="password" name="pw" />
<input value="로그인" type="submit" /> <input value="취 소" type="reset" />

2_login.jsp을 거쳐서 2_main.jsp가 출력

XXX님 안녕하세요.
오늘도 즐거운 하루 보내세요!!

2_logout.jsp
alert창에서 '로그 아웃 되었습니다.' 출력

 


내장 객체 정리
page - 그 페이지 안에서만 사용
request - 다음 페이지의 요청까지(포워드로 넘어가는 경우엔 그 페이지까지
session - 로그아웃할 때까지 사용
Appkication - 톰캣 끝날때까지 사용