국비 코딩 Feb22 | Scope, action tag, EL TAG, java beans
session 가져올 때 주의사항
session의 키는 string이지만 value는 오브젝트기 때문에 세션을 가져올 땐 캐스팅이 필요하다
request객체에 데이터를 실어보낼 수 있다
저장영역 Scope
JSP에서는 데이터 저장시 공유하는 영역들이 있다, 데이터를 언제까지 가지고 있는지를 기준으로 구분할 수 있다
page: 일반적으로 사용하는 페이지
request: 데이터를 주고, 받고 2페이지정도유지가됨
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에서 사용될 변수를 설정한다.