유정잉

43일차 JSP [ forward, cookie ] 본문

네이버 클라우드 부트캠프/복습 정리

43일차 JSP [ forward, cookie ]

유정♡ 2024. 4. 22. 18:02

[ JSP에서 다른 페이지로 이동하기 위한 방법 ]

    1) 리다이렉트 response.sendRedirect : 브라우저 URL 변경 하도록 -> (request, response 객체 유지 안 됨)

    2) 포워드 forward : 서버상에서 페이지가 이동되기 때문에 브라우저는 알아채지 못 하고 URL도 변경되지 않는다

          -> (request, response 객체 유지 됨)

          ex) 고객센터 전화하번 그 번호를 유지하면서 1번 ~~ 2번 ~~ 선택하는 것과 같은 원리 

 

[ http 프로토콜 -> 비연결지향 ]

 

[ 쿠키(cookie)와 세션(session) ]

쿠키 : 쿠키가 저장된 디렉토리를 찾아보면 정보를 다 털수 있음. 개인정보 유출 우려 때문에 쿠키를 잘 사용하지 않음. 데이터 전송 크키에도 제한이 있음. 클라이언트 쪽에 정보가 저장 됨(개발자 도구로 브라우저에서 볼 수 있음) -> 세션을 주로 사용 

    1) 쿠키 객체 생성

    2) 유효기간 설정

    3) 클라이언트에 쿠키 전송

    4) 쿠키를 생성해 클라이언트에 전송

세션 : 보안유지 강화. 데이터 저장에 대한 한계가 없음. 서버에 저장됨 (즉, 세션을 사용하면 페이지를 왔다 갔다 해도 로그인이 유지 됨)

 

[ 자바빈(bean) : 데이터 저장소(entity) -> 필드 형태 getter, setter 메서드 ]

      - 자바빈은 클래스 명 반드시 뒤에 Bean 붙여서 만들어주기 

      - 필드 선언은 private로 하기  

      - 여러개일 경우 useBean으로 액션태그 가져오기

<> 닫을때 코드 맨뒤에 <   /> 이런식으로 해서 닫을 수 있음 
class 명은 package명 까지 같이 해서 적어줘야 함 

 

[ include 액션 태그와 forward 액션 태그의 차이점을 설명해라 ]

forward1.jsp forward 태그를 사용해 페이지 이동 / param 태그를 사용해 값 지정

 


[ forward 페이지 이동 ]

[ NewFile.jsp 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>		
안녕하세요 ! NewFile.jps 입니다 !

<jsp:forward page="one.jsp"></jsp:forward> <!--  forward 형태로 페이지 이동 작업 -->

</body>
</html>
[ one.jsp 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>
안녕하세요 ! one.jsp 입니다 !
</body>
</html>

URL 주소 유지 됨

 

[ forward와 param 사용 ]

[ NewFile.jsp JSP 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
  <form action="TagTest.jsp">
      ID: <input type="text" name="id"><br>
      pw: <input type="password" name="pw"><br>
      
      
      <input type="radio" name="check" value="user" checked="checked"> 사용자
      <input type="radio" name="check" value="manager"> 관리자
      <input type="submit" value="로그인">	
   </form> 
</body>
</html>
[ TagTest.jsp JSP 파일 ]

<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<% 
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String role = request.getParameter("check");
	
	if(role.equals("user")){
%>	
	<jsp:forward page="user_main.jsp">
		<jsp:param value='<%=URLEncoder.encode("고객들","UTF-8") %>' name="userName"/>
	</jsp:forward>
<% 
	}
	else{ %>

	<jsp:forward page="manager_main.jsp">
		<jsp:param value='<%=URLEncoder.encode("관리","UTF-8") %>' name="userName"/>
	</jsp:forward>	
<% 
		
	}
%>		
</body>
</html>
[ user_main.jsp JSP 파일 ]

<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body bgcolor="pink">
	<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8") %>
	<%=request.getParameter("id") %>님 환영해요

</body>
</html>
[ manager_main.jsp JSP 파일 ]

<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body bgcolor="green">
	<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8") %>
	<%=request.getParameter("id") %>님 환영해요
</body>
</html>

 


[ 쿠키 Cookie  - 생성 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
	<h3>쿠키 생성 (=설정)</h3>
<%
	//1. 쿠키 객체 생성
	Cookie c=new Cookie("id","syj");

	//2. 유효기간 설정 / 365*24*60*60는 초단위를 나타냄 1년 동안 유지시키겠단 의미
	c.setMaxAge(365*24*60*60);
	
	//3. 클라이언트에 쿠키 전송
	response.addCookie(c);
	
	//4. 쿠키를 생성해 클라리언트에 전송
	response.addCookie(new Cookie("pwd","1234"));
	response.addCookie(new Cookie("age","20"));
%>
</body>
</html>

 

[ 쿠키 Cookie  - 클라이언트로부터 얻어온 쿠키 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<h3>클라이언트로부터 얻어온 쿠키</h3>
<%
	Cookie []co=request.getCookies();

	for(Cookie c:co) {
		out.print(c.getName()+" : " + c.getValue() + "<br>");
	}
%>
</body>
</html>

 

[ 쿠키 Cookie  - 쿠키 삭제 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<h3>쿠키 삭제</h3>
<%
	Cookie c=new Cookie("id",""); //id만 삭제시킴 
	c.setMaxAge(0); //쿠키 유효기간 만료시킴
	response.addCookie(c);
%>

<a href="GetCookie.jsp">쿠키 삭제 확인하려면 클릭</a>
</body>
</html>

id 값 사라진거 확인할 수 있음 


 

[ 세션 session  - 세션 설정 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<body>
<h3>session 세션 설정하기</h3>

<%
	session.setAttribute("id", "syj");
	session.setAttribute("pw", "1234");
	session.setAttribute("age", "26");
	
%>
</body>
</html>

 

[ 세션 session  - 1) 서버로부터 얻어온 세션 하나하나 가져오는 방법 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<h3>session 세션 얻어오기</h3>

<%
	String id=(String)session.getAttribute("id");
	String pw=(String)session.getAttribute("pw");
	String age=(String)session.getAttribute("age");
%>
</body>
</html>

 

[ 세션 session  - 2) 서버로부터 얻어온 세션 반복문으로 가져오는 방법 hasMoreElements ]

<%@page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<h3>session 세션 얻어오기</h3>

<%
	Enumeration names=session.getAttributeNames();

	while(names.hasMoreElements()) {
		String name=names.nextElement().toString();
		String value=session.getAttribute(name).toString();
		out.print(name+","+value+"<br>");
	}
%>
</body>
</html>


[ 세션 session  - 로그인 페이지 만들기 - 페이지를 왔다 갔다 해도 로그인이 유지되는 이유 = session 사용해서 ]

[ 로그인 페이지 NewFile.jsp ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<body>
	<form action="Session2.jsp" method="post">

		<label for="user">아이디 : </label> 
		<input type="text" name="id" id="user"><br> 
		
		<label for="userpw">비번 : </label> 
		<input type="password" name="pwd" id="userpw"><br> 
		<input type="submit" value="로그인">
	</form>
</body>
</html>
[ sessoion2.jsp ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	String id="hong";
	String pw="1234";
	String name="홍길동";
	
	if(id.equals(request.getParameter("id")) && 
			pw.equals(request.getParameter("pwd"))) {
		session.setAttribute("user", name);
		response.sendRedirect("main.jsp"); //웹 페이지 강제 이동
	}
	else {
		response.sendRedirect("login.jsp");
	}
%>
</body>
</html>
[ main.jsp 파일 ]

%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	if(session.getAttribute("user")==null) {
		response.sendRedirect("login.jsp");
	}
	else{
%>
	<%=session.getAttribute("user") %>님 환영합니다.
	<form method="post" action="Logout.jsp">
		<input type="submit" value="로그아웃"> <!--로그아웃 버튼 누르면 세션 종료되도록-->
	</form>
<%
	}
%>
</body>
</html>
[ Logout.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	session.invalidate(); //세션이 무효화=세션 종료 
%>
<script type="text/javascript">
	alert("로그아웃되었다.");
	location.href="login.jsp";
</script>
</body>
</html>

Redirect 사용하여 URL 바뀜

 

 

[ 세션 session  - 로그인 페이지 만들기 - 페이지를 왔다 갔다 해도 로그인이 유지되는 이유 = session과 Servlet 사용해서 ]

[ NewFile.jsp JSP 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<body>
<center>

		<h2>회원 가입</h2>

		<form action="Member" method="get">

			<table width="500" border="1">
				<tr height="50">
					<td width="150" align="center">아이디</td>
					<td width="350" align="center"><input type="text" name="id"
						size="40" placeholder="id넣으세요"></td>
				</tr>

				<tr height="50">
					<td width="150" align="center">패스워드</td>
					<td width="350" align="center"><input type="password"
						name="pass1" size="40" placeholder="비밀번호는 영문자만 넣어주세요"></td>
				</tr>

				<tr height="50">
					<td align="center" colspan="2"><input type="submit"
						value="회원가입"></td>
				</tr>
			</table>
	</form>
</body>
</html>
[ Member.java Servlet 클래스 ]

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

/**
 * Servlet implementation class Member
 */
public class Member extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Member() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charser=utf-8");
		
		String id=request.getParameter("id");
		String pw=request.getParameter("pass1");
		
		if(id!=null && pw!=null) { //서블릿에서 세션갈때 
			HttpSession session=request.getSession();
			session.setAttribute("id1", id);
		}
		response.sendRedirect("ServletSession.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
[ ServletSession.jsp 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>
<%
	String id=(String)session.getAttribute("id1");
%>
<%
	if(id!=""){
%>
	<%=id %>
	<a href="Logout2.jsp">로그아웃</a>
<%
	}
%>
</body>
</html>
[ Logout.jsp JSP 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	session.invalidate();
	response.sendRedirect("ServletSession.jsp");
%>
</body>
</html>


[ 세션 session  - java bean 자바빈 ]

[ JavaBean 만들기 ]

package kr.co.bit;

//1. 개별적으로 전송하는 것이 아닌, 정보를 하나로 묶어서 전송하는 방법(효율적)  
//자바빈 : 데이터 저장소(entity) -> 필드 형태 getter, setter 메서드
public class MemberBean {
	
	//무조건 필드는 private 사용 해야 함 !!!
	private String name;
	private String userid;
	private String nickname;
	private String pwd;
	private String email;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	private String phone;
	
}
[ test_property.jsp JSP 파일 (있는 값 출력하기) ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<!-- MemberBean member = new MemberBean(); -->
<!-- useBean JavaBean을 생성할 때 필요한 액션태그 -->
<jsp:useBean id="member" class="kr.co.bit.MemberBean" > <!-- id가 객체명임 -->
<%=member.getName() %><br>
<%=member.getUserid() %><br>
</jsp:useBean> <!-- 여기까지 서버를 돌려보면 값이 없어서 null, null로 출력 됨 -->
</body>
</html>
[ test_property.jsp JSP 파일 (값 집어 넣고 출력하기) ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<!-- MemberBean member = new MemberBean(); -->
<!-- useBean JavaBean을 생성할 때 필요한 액션태그 -->
<jsp:useBean id="member" class="kr.co.bit.MemberBean" /> <!-- id가 객체명임 -->

<jsp:setProperty property="name" name="member" value="길동" /> <!--이런식으로 끝에 /만 해줘도 닫을 수 있음 -->
<jsp:setProperty property="userid" name="member" value="hong" />

이름 : <jsp:getProperty property="name" name="member" /> <br> <!-- = member.getNmae("길동"); -->
아이디 : <jsp:getProperty property="userid" name="member" /> <br> <!-- = userid.getNmae("hong"); -->
</body>
</html>

 

[ MemberBean.java ]

package kr.co.bit;

//1. 개별적으로 전송하는 것이 아닌, 정보를 하나로 묶어서 전송하는 방법(효율적)  
//자바빈 : 데이터 저장소(entity) -> 필드 형태 getter, setter 메서드
public class MemberBean {
	
	private String id;
	private String pass1;
	private String email;
	private String tel;
	private String address;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return pass1;
	}
	public void setPassword(String password) {
		this.pass1 = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}
[ student.jsp JSP 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>

<body>

<center>
    <h2> 회원 가입 </h2>
    
    <form action="MemberJoinProc.jsp" method="post">
    <table width="500" border="1">

    <tr height="50">
        <td width="150" align="center"> 아이디 </td>
        <td width="350" align="center"><input type="text" name="id" size="40" placeholder="id넣으세요"></td>
    </tr>

    <tr height="50">
        <td width="150" align="center"> 패스워드 </td>
        <td width="350" align="center"><input type="password" name="pass1" size="40" placeholder="비밀번호는 영문자만 넣어주세요"></td>
    </tr>

    <tr height="50">
        <td width="150" align="center"> 이메일 </td>
        <td width="350" align="center"><input type="email" name="email" size="40"></td>
    </tr>   

    <tr height="50">
        <td width="150" align="center"> 전화번호 </td>
        <td width="350" align="center"><input type="tel" name="tel" size="40"></td>
    </tr>

    <tr height="50">
        <td width="150" align="center"> 주소 </td>
        <td width="350" align="center"><input type="text" name="address" size="40"></td>
    </tr>

    <tr height="50">
        <td align="center" colspan="2">
        <input type="submit" value="회원가입"></td>
    </tr>

    </table>
    </form>
    </center>

</body>

</html>
[ MemberJoinProc.jsp JSP 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	request.setCharacterEncoding("UTF-8");
%>

<!--  request로 넘어온 데이터를 자바빈즈랑 매핑을 시켜주는 userBean -->
<!-- 객체 생성 MemberBean mbean = new MemberBean() -->
<jsp:useBean id="mbean" class="kr.co.bit.MemberBean">

<!-- jsp 내용(폼에서 쓴거)을 자바빈 클래스에 데이터를 매핑(넣어준다) -->
<!-- 자동으로 모두 다 매핑(*) 시켜라 -->
<jsp:setProperty name="mbean" property="*"></jsp:setProperty>
</jsp:useBean>

<h3>아이디는 <jsp:getProperty property="id" name="mbean" /></h3>
<h3>이메일은 <jsp:getProperty property="email" name="mbean" /></h3>
<h3>전화번호는 <jsp:getProperty property="tel" name="mbean" /></h3>
</body>
</html>

 


[ 문제 풀이 ]

forward1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:forward page="forward2.jsp">
    <jsp:param name="message" value="Hello, Forward!" />
</jsp:forward>
</body>
</html>



forward2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<p>Message: <%= request.getParameter("message") %></p>
</body>
</html>
favo.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>
<form action="favorite.jsp" method="post">
   좋아하는 색 : <input type="text" name="color"><br>
   좋아하는 음악 : <input type="text" name="song"><br>
   <input type="submit" value="확인">
</form>
</body>
</html>


favoBean.java
package kr.co.bit;

public class favoBean {
   private String color;
   private String song;
   
   public String getColor() {
      return color;
   }
   public void setColor(String color) {
      this.color = color;
   }
   public String getSong() {
      return song;
   }
   public void setSong(String song) {
      this.song = song;
   }
}


favorite.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>
<%
   request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="like" class="kr.co.bit.favoBean">

<jsp:setProperty name="like" property="*"/>

</jsp:useBean>

좋아하는 색상 : <jsp:getProperty property="color" name="like"/><br>
좋아하는 노래 : <jsp:getProperty property="song" name="like"/>
</body>
</html>
728x90