Spring

국비 코딩 Feb22 | Scope, action tag, EL TAG, java beans

onnnzeoz 2023. 2. 22. 17:50

session 가져올 때 주의사항

session의 키는 string이지만  value는 오브젝트기 때문에 세션을 가져올 땐 캐스팅이 필요하다


request객체에 데이터를 실어보낼 수 있다


저장영역 Scope

JSP에서는 데이터 저장시 공유하는 영역들이 있다, 데이터를 언제까지 가지고 있는지를 기준으로 구분할 수 있다

page: 일반적으로 사용하는 페이지

request: 데이터를 주고, 받고 2페이지정도유지가됨

이렇게 두 창이 request인거

session : 세션을 끄지 않으면 다 저장됨

application: 한번저장하면 서버가 꺼질 때 까지 저장됨 (피씨를끄던말던 상관 x)

-> 함부로 다 저장하면 보안성이 안좋을 수 있음 (이건 안쓰다고보면됨)

 

jsp는 보여주는 용도로만 쓰고

로직에서 java를 써야할때는 scriptlet 말고 딴거 쓰자!! 너무 복잡해

그래서 나온게

action tag

scriptlet을 안쓰려고 쓰는건데 결국 scriptlet을 쓰게 돼서 많이 사용하지 않음

 

- foward

- include : 비슷함

- usebean

 

forward

 : 페이지로 이동뿐만 아니라 데이터도 전달해줌 (redirect랑 다른 점), request 객체의 하위임

최종주소를 URL에 밝히지 않기 때문에 보안이 좋다

<jsp:forward page="<%= nextPage %>">
	<jsp:param name="tel" value="010-0000-0000"/> tel이란 이름으로 value값 전송
</jsp:forward>

redirect로는 response 객체를 사용하고 데이터를 전송할 수 없는 반면 forward는 request 객체를 사용하기 때문에 데이터 전송까지 가능함(파라메터 추가 가능)

또 마지막 페이지를 표시하는 redirect와 달리 forward는 거쳐간 페이지까지만 보여줌

page="보낼 주소"  <jsp:param/> : 전송할 때 같이 보낼 값 넣는것 

 

자바에 데이터를 저장하는거는 자바에 파일을 따로 빼놓자 -> 해서 나온게 모델1 -> 그리고 모델2

모델 1:데이터관련 파일는 java로 보냄 근데 로직은 scriptlet쓰고잇음 (근데 이거 안써, 그저 최초의 시도) ex) java bean

모델 2: 로직도 java로 바꿈 -> EL TAG를 만듬, 찍을 때 썼던 <%=%> 대신 ${}(mvc패턴이라고도 부름)

 

el tag : scriptlet의 출력부분을 대체하기 위해 만들어진 것

page,request 내장객체라서 뒤에 Scope 붙여줘야함

더보기
	<form action="result.jsp">
	ID : <input type="text" name="id"/>
	<button>전송</button>

이렇게 index에 적으면 이런 형태

이제 저 값을 result.jsp에 나타내기 위해 el tag 사용해줌 

<body>
	sessionID : ${sessionScope.sessionId}
	<br/>
	ID : ${param.id}
</body>

또한 EL TAG 는 간단한 연산 및 비교 연산도 가능 하다.

논리연산(같다, 같지않다) + 사칙연산

include

특정 페이지를 불러온다

<%@ %>를 대체하기 위해 나왔다

<!-- 불러올 페이지(header.jsp) -->
	<jsp:include page="header.jsp"/>
	
	<!-- 불러올 페이지(body.jsp) -->
	
	<jsp:include page="body.jsp">
		<jsp:param value="my content body" name="content"/>
	</jsp:include>
	
	<!-- 불러올 페이지(footer.jsp) -->
	<jsp:include page="footer.jsp"/>

body에서 param 넣은거는 출력 하기 위해서 또 따로 body.jsp에다 <%= request.getParameter("content") %>찍어줘야함


scriptlet을 최소화하려는 이뉴는 java logic과 html을 분리시키기 위해서 -> JAVA Bean 이용한다

 

java beans

Bean은 여러 jsp에서 생성되는 데이터의 창고 역할을 수행함, 데이터를 자바빈이라는 클래스에 담아서 보여주는거임

 

- scriptlet 활용한 자바빈

	String name = request.getParameter("userName"); //파라메터에서 받아서
	firstBean.setName(name); //빈에 저장
	response.sendRedirect("result.jsp"); // 페이지 이동

 

bean 자체가 자바코드이므로 scriptlet으로도 접근이 가능하나 action tag를 활용하는 방법도 있다

 

- action tag 활용한 자바빈 3가지

<jsp:useBean> : 자바빈 객체를 생성하는 액션태그 (이걸로 객체화하는 느낌)(index.jsp 윗부분에 넣어주기)

<jsp:useBean id=“빈 이름” class=“빈에 대응할 클래스” scope=“빈의 사용 범위” />
<jsp:useBean id="firstBean" class="com.beans.FirstBean" scope="page"/>

//저거 밑에 이렇게 적으면 저 주소 클래스에 있는 name 값을 가져오는 거임
<h3>java bean : <%= firstBean.getName() %></h3>

com.beans.FirstBean 클래스에는 

public class FirstBean {

	//beans규약 : 빈을 만들 때는 반드시 멤버 변수를 private으로 한다.
	private String name = "hong gil-dong";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

- 만들때 유의사항

패키지는 이름이 겹치면 안됨->그래서 도메인형태로 지어( ex. com.naver. 등등 kr.co.goodee

패키지에 클래스 추가하고 beans 규약에 맞추기 위해 변수 private으로 선언함

 

 

<jsp:setProperty> : 생성된 자바빈에 property를 지정하는 기능

<jsp:useBean id="firstBean" class="com.beans.FirstBean" scope="page"/>
<jsp:setProperty name="firstBean" property="id" value="abcd"/>

userName같은 param 넣고 싶다면 value 속성대신 param 속성 사용하기
이 param 속성은 원래 value=<%= request.getParameter("이름") /%>
이렇게 해야되는데 scriptlet 안쓰려고 param 만든거임

 

 

<jsp:getProperty> : property를 가져오는(빼오는) 액션태그

<jsp:getProperty name="firstBean" property="name"/>

 

클래스의 멤버를 property라고도 부름


JSTL

Jsp Standard Tag Library

개발자들이 필요한 태그를 직접 만들었고(custom tag) 이를 오픈했는데

그 중 많이 쓰이는 태그들 모아놓은 라이브러리

 

사용하려면 1. 설치 2. 테이블속성에 정의해줘야함 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

 

절대경로 vs 상대경로

상대경로는 '나'를 중심으로 경로 설명(ex 내 옆에 있어)

 

jstl 태그 종류

- set

JSP에서 사용될 변수를 설정한다.