표준 액션 <jsp:include page = "wickedFooter.jsp"/>
기타 액션: <c:set var = "rate" value "32" />
스크립트가 없는 JSP
빈 관련 표준 액션
<jsp:useBean> 실제 객체를 선언하고 초기화하는 태크
<jsp:useBean id="person" class = "foo.Person" scope = "request"/>
id = 빈 객체 식별자 선언
class = 클래스 타입 선언
scope = 빈 객체 속성 생존 범위
<jsp:getProperty name = "person" property = "name" />
name = 빈객체 이름
property = 프로퍼티 이름을 적음
<jsp:useBean>은 객체 생성도 함
<jsp:setProperty name = "person" property = "name" value = "Fred"/>
<jsp:useBean id = "person" type = "foo.Person" class = "foo.Employee" scope = "page">
class 없이 type만 쓸 경우, 빈이 먼저 존재해야 함
type 이 있든 없든 관계없이 class가 있을 경우 이 클래스는 추상 객체여서는 안되며 반드시 인자가 없는 public 생성자가 있어야 함
scope 속성의 default 값은 "page"
서블릿을 거치지 않고 JSP로 바로 요청을 날리면,
<%person.setName(request.getParaeter("userName"));%>
표준 액션 안에 스크립팅
<jsp:setProperty name = "person" property = "name" value = "<%= request.getParameter("userName") %>%>
param 속성으로 요청 파라미터 값을 빈 프로퍼티에 곧바로 설정가능
여기서 value 대신 param = "userName" 을 쓸 수도 있다.
이 보다 더 나은 방식으로는 폼 입력 필드 이름이 빈 프로퍼티 이름과 같으면 param 속성이 없어도 동작한다.
빈의 모든 프로퍼티 이름과 요청 파라미터 이름이 같을 때
예) Param 빈에 두개의 프로퍼티 (name, empID) 가 있을때
<jsp:setProperty name = "person" property = "*" />
빈 태그는 기본 타입 프로퍼티를 자동으로 변환
프로퍼티가 String 기본형도 아닌 경우
EL을 사용
${person.dog.name}
[] 연산자는 도트 연산자 보다 막강
${person["name"]} = ${param.name}
[]연산자는 맵, 빈, 리스트, 배열 사용가능
오른쪽에 있는 값이 인덱스 값 즉 숫자가 될 수 있으며, 자바 명명 규칙을 따르지 않는 것도 올 수 있음
예) 문자열과 도트를 가지는 다음과 같은 값 "coo.foo.trouble" 도 맵의 키가 될 수 있다.
[] 연산자 안의 값이 문자열(따옴표로 묶여 있다면) 이라면, 이것은 맵키가 될 수 있고, 빈 프로퍼티 또는 리스트나 배열 인덱스가 될 수 있다.
배열에 [] 연산자 사용하기
EL의 [] 연산자는 그냥 [] 연산자일 뿐 자바와 상관관계가 없다.
문자열(String)이아니면, 이게 뭘까 하고 실행(평가)
맵 키 값이면 맵의 값을 가져 옴
request.setAttribute("Genre", "Ambient");
Music is ${musicMap[Genre]} => Music is ${musicMap["Ambient"]}
[] 안에 내장 표현식을 쓸 수 있다.
${musicMap[MusicType[0]]}
${musicMap["Ambient"]}
EL에서 요청 파라미터
${param.name}
${param.empID}
${paramValues.food[0]}
Request에서 파라미터 이상의 정보를 원할 때
"host" 헤더 정보 읽기
Host is : ${header["host"]} = ${header.host}
requestScope은 request 정보 (property)가 아닌 request 속성을 가져 오기 위해 사용. request 정보 pageContext를 통해서 접근
${pageContext.request.method}
생존 범위 관련 내장 객체가 도움이 될 때
한 군데 이상 똑같은 이름으로 몰려 있을지도 모르는 경우
${requestScope.person.name}
속성 이름이 문자열인 경우
request.setAttribute("foo.person",p);
-> ${requestScope["foo.person"].name}
댓글 없음:
댓글 쓰기