21.01.14

민주·2021년 1월 17일
0

[저장영역]

- page : 페이지가 클라이언트에 제공 처리 하는동안 유지
- request : 클라이언트의 요청이 처리되는동안 유지
- session : 세션이 유지되는 동안 유지
- application : 어플리케이션이 실행되고 있는 동안 유지
<!--07_ Scope <index.jsp>, 아래 테이블 생략-->
 <form action="application.jsp" method="post">
    	<table border="1">

<index.jsp>에서 정보를 입력함
<!--<application.jsp>-->
<%
	request.setCharacterEncoding("UTF-8");
	String name = request.getParameter("name");
	String id = request.getParameter("id");
	
	if(name !=null && id!=null){//어플리케이션 영역에 저장
		application.setAttribute("name", name);
		application.setAttribute("id", id);
	}else{
		response.sendRedirect("index.jsp");
	}
%>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
    </head>
    <body>
    	<h3><%=name %>님 반갑습니다.<%=name %>님의 아이디는 <%=id %>입니다</h3>
    	<form action="session.jsp" method="post">
    		<table>
    			<tr>
    				<td colspan="2">session에 저장될 내용들</td>
    			</tr>
    			<tr>
    				<td>이메일</td>
    				<td><input type="text" name="email"/></td>
    			</tr>
    			<tr>
    				<td>연락처</td>
    				<td><input type="text" name="cellphone"/></td>
    			</tr>
    			<tr>
    				<td colspan="2"><input type="submit"/></td>
    			</tr>
    		</table>
    	</form>

    </body>
 
</html>
- index.jsp에서 보낸 name이 "name"인 파라메터와 "id"인 파라메터를 가져옴
- 받아온 값이 둘 다 null이 아니라면 어플리케이션 영역에 저장
- 하나라도 null이라면 index.jsp로 되돌아감

<application.jsp>에서 정보를 입력함
<!--<session.jsp>-->
<%
	request.setCharacterEncoding("utf-8");
	String email = request.getParameter("email");
	String phone = request.getParameter("cellphone");
	String name="";
	if(email != null && phone != null){
		name = (String)application.getAttribute("name");
		session.setAttribute("email", email);
		session.setAttribute("phone", phone);
	}else{
		response.sendRedirect("index.jsp");
	}
%>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
    </head>
    <body>
		<h2><%= name%>님의 정보가 모두 저장되었습니다.</h2>
		<a href="result.jsp">확인하러가기</a>
    </body>
</html>
- email과 phone을 받아와서 session값으로 저장

<session.jsp>브라우저
<!--<result.jsp>-->
<h2>Application영역에 저장된 정보</h2><!-- 브라우저가 꺼지던지 변경되어도 남아있다.(서버가 꺼질 때 까지 유지) -->
<p>id : <%= application.getAttribute("id")%> </p>
<p>name : <%= application.getAttribute("name")%></p>
<h2>Session영역에 저장된 정보</h2><!-- 브라우저가 꺼지거나 변경되면 유지되지 못한다. -->
<p>email : <%= session.getAttribute("email")%></p>
<p>phone : <%= session.getAttribute("phone")%></p>
- application영역에 저장된 정보와 session에 저장된 정보를 가져온다.

<result.jsp>브라우저
- 여기서는 내용이 다 나오지만 session영역에 저장된 정보는 다른 브라우저에서 열거나 브라우저를 끄면 
유지되지 못하고 어플리케이션은 다른 브라우저에서 열어도 유지된다.
- 어플리케이션 영역은 서버가 종료되어야 사라진다.

[Action TAG - forward]

- scriptlet은 유용하긴 하지만 페이지가 복잡해 보인다.
- 그래서 개발한것이 Action TAG이다.
( 하지만 action tag도 현재는 많이 사용하지 않는다)
<!--<forwardForm.jsp> 아래 테이블 생략-->
<form action="stopPage.jsp" method="post">
    <input type="hidden" name="forwardPage" value="result.jsp"/><!-- 사용자에게 안보이게 -->
    <table border="1px">
- stopPage.jsp는 거쳐가는 페이지고 result.jsp가 마지막 페이지
- 거쳐야 하는데 사용자에게는 보여지지 않기 위해 hidden타입으로 넣어줌
<!--<stopPage.jsp>-->
<%
	request.setCharacterEncoding("UTF-8");
	String fpage = request.getParameter("forwardPage");
%>
<!-- redirect와같이 특정 페이지로 전달할 수 있으나 차이점이있다. -->
<!-- redirect는 response객체를 이용하지만 forward는 request객체를 사용한다. -->
<!-- 가장 큰 차이점은 전송시 특정 값을 추가하여 보낼 수 있다.파라미터에 관한거는 리퀘스트, 리스폰스는 응답만 -->
<jsp:forward page ="<%= fpage%>">
	<jsp:param name="tel" value="01012345667"/>
</jsp:forward>
- forwardForm.jsp에서 name이 forwardPage인 파라미터를 가져옴
- <jsp:forward>를 이용해 특정 페이지로 이동시킬 수 있다.
	- response.sendRedirect()와 다른점 :
    	- 사용객체 : redirect -> response객체 , forward -> request객체
    	- 파라미터 : redirect -> 추가불가 , forward -> 추가가능(데이터 전달가능)
    	- 주소창에 표시 : redirect -> 마지막페이지 표시 , forward -> 거쳐간 페이지 표시(보안성유리) 

<result.jsp>브라우저
- 최종 페이지는 result인데 forward로 거쳐와서 표시페이지가 stopPage로 나타나는 것을 알 수있다.
- stopPage.jsp에서 forward로 전달 된 값도 잘 출력 되는것을 볼 수 있다.

[Action TAG - include]

<!--<main.jsp>-->
<jsp:include page="header.jsp"/>
<h1>BODY</h1>
 <!-- include에서는 페이지를 불러올 경우 파라메터를 추가 할 수 있다. -->
<jsp:include page="body.jsp">
    <jsp:param name="name" value="my content"/>
</jsp:include>
<jsp:include page="footer.jsp"/>
- include는 특정 페이지를 불러온다.(iframe같은)
- <jsp:param>을 이용해 특정 파라미터를 보낼 수 있다.

<header.jsp> <footer.jsp> <body.jsp>

  • <jsp:param>으로 보낸 데이터를 가져옴
<!--<body.jsp>-->
<%
	request.setCharacterEncoding("UTF-8");
	String name = request.getParameter("name");
%>
<div>
	<h3><%=name%></h3>
</div>

<main.jsp> 브라우저

[Action TAG - useBean]

- 우리가 Scriptlet을 최소화 시키려하는 이유는 JAVA로직과 HTML을 분리 시키기 위해서이다.
- JAVA Bean을 이용하면 Java 코드의 일부를 분리 할 수있다.
- 이것을 MODEL 1이라고 하는데 현재는 사용하지 않는다.
- MODEL 2는 MVC패턴에서 배운다.

- Bean은 여러 JSP에서 생성되는 데이터의 창고역할을 수행한다.
- Bean에서 data를 공통으로 저장하고 사용한다.
//Java Resources > src > com.beans(package) > FirstBean(class)
package com.beans;

public class FirstBean {	
	//Beans규약 : 빈의 멤버변수는 private으로 만들어야한다.
	private String name="lee, min-joo";
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
<!--<beanForm.jsp>-->
<!-- method 기본값 get -->
<form action="beanProc.jsp">
이름 : <input type="text" name="userName"/>
<input type="submit"/>
</form>
<!--<beanProc.jsp>-->
<jsp:useBean id="firstBean" class="com.beans.FirstBean" scope="session"/>
<%
	request.setCharacterEncoding("UTF-8");
	//5. String name = request.getParameter("userName");
	//6. firstBean.setName(name);
	//response.sendRedirect("beanResult.jsp");
%><!-- param은 value변경할수도있다 -->
<jsp:setProperty name="firstBean" property="name" param="userName"/>
<jsp:forward page="beanResult.jsp"/>
- <jsp:useBean id="빈 이름" class="빈에 대응할 클래스" scope="빈의 사용범위">
- 빈에 값넣기 : 라인 5~6으로도 가능
- <jsp:setProperty name="빈이름" property="지정할이름" value="" />
- <jsp:setProperty> : 빈에 값 넣는 방법, param이 아닌 일반 값을 넣고 싶다면 value속성으로 이용
<!--<beanResult.jsp>-->
bean value 출력 : <%= firstBean.getName() %>
    	bean value 출력 : <jsp:getProperty name="firstBean" property="name"/>
- 빈의 값을 출력하는건 둘 다 사용가능 하다.

[EL tag]

- action tag만으로는 sciptlet을 대체 하기가 어려워서 EL tag가 나왔다.
-<%= %>을 간단하게 표현하려는 것이 그 목적이다.

profile
개발이좋아요

0개의 댓글