안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2011년 8월 3일 수요일

Servlet Action(서블릿 액션)

 표준 액션  <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}

댓글 없음:

댓글 쓰기