10 16
<jsp:useBean> 액션태그..
VO class를 객체화 하여 사용할 때 사용함..
객체화와 함께 scope 객체 를 사용할 수있다.(코드를 줄일 수 있다)
<jsp:setProperty> , <jsp:getProperty> 와 함께 사용된다..
사용법)
1.객체화) default constructor만 사용할 수 있다.
<jsp:useBean id="객체명" class="패키지명.클래스명" scope="객체화 후 객체의 사용범위">
2.값 할당) setter method 호출
<jsp:setProperty name="객체명" property="set을 제외한 method명을 소문자로 쓴다..i.v와 같다 value="값"/>
3.값 사용)- getter method 호출
<jsp:getProperty name="객체명" property="get을 제외한 method명 소문자/>;
scope 속성
page(pageContext): JSP를 요청할 때 마다 객체가 생성되고, 생성된 객체는 해당 JSP에서만 사용된다..
request: JSP를 요청할 때 마다 객체가 생성되고, 생성된 객체는 forward로 이동한 페이지에서 사용된다..
session:웹 브라우저마다 하나의 객체가 생성되고, 생성된 객체는 모든 JSP에서 사용된다...
application: 최초 접속자에 의해 하나의 객체가 생성되고, 모든 접속자는 하나의 객체를 사용하며,
모든 페이지에서 사용할 수 있다
사용법)
public class TestVO{
private String name;
private int myAge
public TestVO(){
}//constructor
public TestVO( String name, int myAge){
}//constructor
public void setName(String name){
this.name=name;
}
public void getName(){
retur name;
}
public void setMyAge(String name){
this.myAge=myAge;
}
public void getMyAge(){
return myAge;
}
}//TestVO
이처럼 VO Class가 존재한다고 치자..
기존 코드로 사용하는 방법
<%
TestVO tVO = new TestVO();
pageContext.setAttribute("obj",tVO);
tVO.setName("김현우");
tVO.setmyAge(20);
%>
표준액션태그를 사용하는 방법.
객체화
<jsp:useBean id="tVO" class="패키지명.TestVO" scope="page" />
setter method 사용
<jsp:setProperty name= "tVO" property = "name" value="김현우"/>//이름할당
<jsp:setProperty name ="tVO" property="myAge" value="20"/>
getter method 호출
getter method의 반환값을 web browser로 출력해준다...(변수에 할당할 수 없다)
ex)
이름: <jsp:getProperty name ="tVO" property="name"/>
나이: <jsp:getProperty name="tVO" property="myAge"/>
jsp에서 page 이동할때
forward: 업무처리 페이지와 디자인을 분리할 때..
redirect: 정상적인 요청이 되는 페이지에서 비 정상적인 요청이 들어왔을 때 이동함.
useBean 액션태그를 사용한 web parameter 받기..
request.getParameter 이나 request.getParameterValues를 사용하지 않고 web parameter를 받는다..
주의
HTML Form Control의 name속성의 값과 VO의 instance 변수의 이름이 반드시 같아야 한다,,,
<jsp:forward>
forward 방식으로 페이지를 이동할 때 사용..
데이터 처리페이지와 화면 디자인 페이지를 분리하여 작성할 때 사용..
사용법)
web parameter를 생성하지 않고 이동할 때
<jsp:forward page="이동할JSP의 URI">
web parameter를 생성하여 이동할 때
<jsp: forward page = "이동할JSP URI">
<jsp:param name="파람터명" value="값"/>
</jsp:forward>
sql파일은 db객체 create/drop/insert 보이게 만들기..
클다 그리기..
JSP는 클다만들지 않음..
클다는 DAO랑 VO를 만듬,,,,,
UI설계서를 보고 데이터베이스와 연동되는 부분이 어딘지 생각해서 그리기..
보여지는곳에서 DB가 어디에 붙는지가 중요함..
EL(Expression Language)
표현 언어 JSP에서화면 출력을 목적으로 만들어진 언어..
Page directive에서 isELIgnored = "false" 인 상태에서 사용할 수 있다.
변수의 값, scope 객체의 값, web parameter의 값, 간단한 연산의 결과를 출력할 수 있다.
사용법
${코드}
연산자를 사용할 수 있다.
문법)
${값 연산자 값}//연산자는 단항,산술,관계,논리,삼항
web parameter를 출력할 수 있다..
param 객체를 사용한다
배열이라면 paramValues를 사용한다./
사용법)
이름이 유일한 경우
${param.폼컨트롤명} //input type="text"
개발자가 URL 뒤에 query string을 직접 만들어서 요청할 수 이싿
이름이 중복(JSTL과 같이 사용)
${ paramValues폼 컨트롤명[인덱스]}
el에서 변수의 출력
EL에서는 변수를 직접 출력할 수 없다. =>변수를 scope 객체에 저장하여 출력한다.
scope객체
pageContext,request,session,application
el에서는 각각 지원명이 다르다
pageScope , requestScope, sessionScope ,applicationScope
scope객체에 변수값을 저장하고 , scope객체에 저장된 값을 참조하여서 출력하면 된다,.
사용법)
1.scope 객체에 값을 설정한다.
pageContext.setAttribute("이름",값);//값에는 object가 들어가서 모든값을 넣을수 있고 쓸땐 casting해서 쓰면 된다.
2.EL에서 scope 객체값을 얻으면 된다
${pageScope.scope객체의 이름}
${requestScope.이름}
${sessionScope.이름}
${applicationScope.이름} 이때 여기서 이름만 써도됨!
scope 객체에 사용한 이름이 같고, EL에서 scope 객체를 생략했을때
저장기간이 작은 순으로 접근이 됨
page>request>session>application 순으로 접근된다,.
JSTL(JSP Standard Tag Library)
java가 아닌 다른 개발자나 단체에서 만들고 배포하는 액션태그.
표준액션(액션태그)에서 지원하지 않는 기능을 제작하여 제공..
Tag Lib라고 한다.
배포는 .jar로 되고, web inf - lib에 넣어서 사용한다.
JSTL 사용법)
1.지시자 선언) 외부 Tag lib를 연결하기 위해서 선언함.
<%@ tagli prefix="접두어" uri="Tag Lib를 사용하기위해 제공하는 URL" %>
2,Tag Lib에서 제공하는 태그 사용.
<prefix:태그명 속성="값" . . . > 내용 </prefix:태그명> //여기서 prefix에는 지시자에서 사용한 접두어를 쓰면 된다.
core
제공기능: 변수 선언 가능,웹 브라우저 출력 가능,제어문,import,redirect,execption 처리 가능
사용법)
1.JSTL을 사용하기위한 지시자 선언)
<%@ taglib prefix="c" uri="http://java.sum.com/jsp/jstl/core" %>
//이때 JSP가 빠진 URL을 사용하면 JSTL에서 EL을 사용할 수 없다....
//URL로 접근해도 아무것도 없고, 배포된 jar안에서 식별하요 사용하기 위한 값이다.
2.Tag Lib에서 제공하는 태그를 사용)
<c:태그명 속성명="값" ,,, />
변수관련기능.
변수선언)
<c:set var="변수명" value="값" /> //이렇게 선언한 변수는 EL에서 바로 사용할 수 있다.
웹 브라우저로 출력
<c:out value="출력할 값" escapeXml="true/false"/> //true가 기본값,,
//출력할 값에 입력된 값이 있다면 그대로 웹 브라우저에 출력된다.
//escapeXml속성은 입력값이 HTMl Tag를 가지고 있다면 그대로 보여줄것인지/해석하여 그릴것인지 설정
//true:태그를 문자열로 출력, false" 태그를 해석해서 태그로 출력.
변수선언하고
<c:set var="year" value="2024"/>
웹브라우저로 출력
<c:out value="year" /> //ㅇ이렇게 하면 year가 출력된다
만약 year에 할당한 2024가 출력되게 할려면
<c:out value="${year}" />//이렇게 el로 접근해야 el이 출력된다.
사용자에게 보어주어야 하는 값은 <c:out 을 사용하고,
사용자에게 노출되지 않는 값은 EL만 사용한다.
제어문
scriptle 없이 JSTL에서는 제어문을 사용할 수 있다.
조건문 : if,choose, when, otherwise
반복문: forEach, forTokens
if: 단일 if만 지원한다
문법)
<c:if test="조건식" > //조건식에는 true/false를 직접써도되고,이를 반환하는 연산자를 가진EL을 사용한다.
조건에 맞을 때 실행 될 문장들
</c:if>