1. JSP의 수행을 다른 컴포넌트로(JSP, Servlet, HTML)로 이동하는 태그 2. RequestDispatcher객체.forard() 실행을 태그화한 것 3. 요청 Dispatch 방식으로 이동 4. 속성 - page : 수행을 이동할 컴포넌트의 url 설정 5. 예) <jsp:forward page="abc.jsp"/> -> 의미 RequestDispatcher rdp = request.getRequestDispatcher("abc.jsp"); rdp.forward(request, response);
* <jsp:setProperty> 1. <jsp:useBean> 태그로 lookup 한 객체(Attribute)의 property에 값을 설정하는 태그 2. Lookup 한 Attribute의 setter 메소드를 호출하여 값을 설정한다. - 명시적인 값을 설정 - 요청파라미터로 넘어온 값을 설정 3. 속성 - name : 값을 설정할 bean의 이름. useBean의 id값 - property : 값을 설정할 property 명. (setter메소드에서 set을 제외한 이름) - value : 설정할 값 - param : 요청파라미터의 값을 설정할 경우, 요청파라미터의 이름 4. 요청파라미터로 넘어온 값을 설정할 경우 property의 이름과 요청파라미터의 이름이 동일한 경우 param을 생략할 수 있다. 5. 예) <jsp:setProperty name="mto" property="id" value="myid"/> ->의미 mto.setId("myId");
1. 속성 영역(page, request, session, application) 에 binding 된 속성 객체를 lookup한다. 만약 가져 오지 못하면 생성하여 그 영역에 binding한다.
2. 태그의 attribute(속성) - id : 자바식별자, binding 시 설정 이름 - class : lookup할 클래스의 이름. fully name으로 설정 - scope : 속성 영역, 값 : page(기본), request, session, application - 예) <jsp:useBean id="mto" class="dto.MemberDTO" scope="request"/>
-> 의미 MemberDTO mto = (MemberDTO)request.getAttribute("mto"); if( mto == null ){ mto = new MemberDTO(); //no-arg 생성자로 생성, 따라서 MemberDTO class에는 반드시 no-arg생성자가 있어야 한다. request.setAttribute("mto",mto); }
[실습] class package : myjsp.dto class : CustomerDTO
package myjsp.dto;
public class CustomerDTO { private String id; private String password; private String name; private String email; private int age; //생성자, setter/getter, toString, equals, hashCode public CustomerDTO() { super(); // TODO Auto-generated constructor stub } public CustomerDTO(String id, String password, String name, String email, int age) { super(); this.id = id; this.password = password; this.name = name; this.email = email; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "CustomerDTO [id=" + id + ", password=" + password + ", name=" + name + ", email=" + email + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((email == null) ? 0 : email.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((password == null) ? 0 : password.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; CustomerDTO other = (CustomerDTO) obj; if (age != other.age) return false; if (email == null) { if (other.email != null) return false; } else if (!email.equals(other.email)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (password == null) { if (other.password != null) return false; } else if (!password.equals(other.password)) return false; return true; }
- JSP 내에서 자바코드를 줄이기 위한 태그 - 액션 태그는 JSP내에서 JAVA코드 없이 태그를 이용해 동적인 실행을 처리 하기 위해 제한됨 - 태그와 Java코드를 연결하여 JSP가 Servlet으로 변환 시 Web Container가 그에 알맞은 동적인 실행을 처리
- 종류 - 표준 Action 태그 : Jsp 스펙에서 제공하는 태그 - Custom tag : 사용자 정의 액션 태그
- 기본 주문 - <prefix : 태그명 속성 = "속성값" [속성="속성값"...]> - prefix - 태그 library를 구분하기 위한 이름 - xml 문법을 따른다. - 대소문자 구분 - 속성의 값은 ' 또는 "으로 감싸준다. - 태그는 반드시 닫아야 한다. - 예) <c:forEach item="list" var="mto"></c:forEach> <jsp:getProperty name='cto' property='name'/>
* 표준 액션 태그
- JSP 스펙에서 제공하는 액션태그 - 따로 library를 설정할 필요 없이 web container가 제공한다. - 구문 <jsp:태그명 속성='값' ...> - 주요 태그 - Attribute로 설정된 빈 객체와 연동하기 위한 태그 - useBean, forward, param
1. jsp에서 기본적으로 제공해 주는 객체 - 변수의 선언, 객체의 생성, 할당 없이 JSP 태그에서 사용할 수 있는 객체 - JSP가 서블릿으로 변환될 때 web container가 생성해서 제공
2. 종류 - request : HttpServletRequest - response : HttpServletResponse (ex : 쿠키 관련된 것에 많이 사용된다) - out : JspWriter - Servlet에서의 PrintWriter 역할 - session : HttpSession - <%@ page session="false"%> 로 설정하면 안 생긴다. - application : ServletContext - config : ServletConfig - pageContext : PageContext - Servlet에는 없는 객체로 다른 내장 객체들을 생성할 수 있다. - page : this - 서블릿 객체 자신 - exception : Throwable - <%@ page isErrorPage="true"%>로 설정 된 경우만 생성(default 는 false)
- Web container가 JSP를 Servlet으로 변환 할 때 특정 지시를 내리기 위해서 사용하는 태그 - 구문 <%@ 지시어 속성="값" [속성="값" ..]%> - 지시어 - page : 페이지의 기능, 특징을 지시 - include : jsp 페이지에 다른 페이지를 포함시킬 것을 지시 - taglib : jsp 페이지에서 사용할 custom tag 라이브러리 등록을 지시 - page 지시자 - 페이지에 관련된 기능 환경을 정의하는 지시어 - 속성 - import : jsp에서 사용할 클래스들을 import할 때 사용 - contentType : response.setContentType()의 인수로 들어갈 값 설정 - session : 내장 객체 session의 생성 여부 설정. 값 : true//false, true가 default - errorPage : jsp가 실행 도중 exception이 발생했을때 이동할 url 지정
* 표현식 태그
- 응답 Stream을 통해 출력하기 위한 태그 - 구문 <%= 출력내용 %> - 예) <%="안녕하세요" %> ->만약 서블릿으로 바꾸면 out.print("안녕하세요");
<% int i =10; %> <%=i %> - 서블릿으로 변환 시 out.print(출력내용); 으로 변환됨
* 선언자 태그
- JSP가 서블릿으로 변환 될때 서블릿의 member 변수(Field)나 member 메소드를 선언할 때 사용 - jspInit(), jspDestory() 오버라이딩 시 사용 - _jspService()는 오버라이딩 해서는 안된다. - 구문 <%! 선언문 %>
* dynamic web project : myjsp web content : /scripttag/jsp_lifecycle.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! //!지역변수 말고 인스턴스 변수를 만들때 사용, <% <- 을 사용하면 안에 구문은 지역변수로 잡힌다. private int count=0; public void jspInit(){ System.out.println("jspInit() 실행"); } public void jspDestroy(){ System.out.println("jspDestroy 실행"); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 당신은 <%=count++ %>번째 방문자 입니다. </body> </html>
- 실행결과
* 스크립트릿 태그
- 클라이언트의 요청에 대해 서비스 하는 동적 코드(java 실행 구문)을 작성 하기 위한 태그 - 태그내의 코드는 서블릿으로 변환 시 _jspService()의 로컬 코드로 삽입된다. - 구문 <% java 코드 %> - 예 <% if(i>10){%> -> java code 10 보다 큽니다. -> HTML <%}%> ->java code
-> 서블릿으로 변경 _jspService(){ if(i>10){ out.println("10보다 큽니다."); } }
* 주석
- jsp에서의 주석 - html 주석 : <!-- 주석 내용--> : client에 전송 - jsp 주석 : <%-- 주석내용 --%> : client에 전송이 안됨 - java 주석 : //,/* 주석내용 */ - 스크립트릿, 선언자 태그에서 사용 가능
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! //!지역변수 말고 인스턴스 변수를 만들때 사용, <% <- 을 사용하면 안에 구문은 지역변수로 잡힌다. private int count=0; //방문 객수를 저장할 변수 /* 초기화 메소드 */ public void jspInit(){ System.out.println("jspInit() 실행"); } public void jspDestroy(){ System.out.println("jspDestroy 실행"); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- HTML 주석 (이건 클라이언트 웹브라우저에서 소스보기 하면 보인다. ) HTML 주석 --> <%-- JSP 주석 ( 웹브라우저로 출력이 안된다. 안보인다) JSP 주석 --%> 당신은 <%=count++ %>번째 방문자 입니다. </body> </html>
2. 액션태그(action) -> jsp에서 java코드를 대신하기 위한 태그(java코드를 넣지 않는 태그) ① 표준 액션 Tag - Servlet/jsp spec에서 제공(기본적으로 제공) ② custom Tag - 사용자 정의 tag(사용자가 만들어 씀) - 액션 Tag 예시
<HTML> <BODY> <for s="1" e="10" step="1"/><!-- 1에서 10까지 1씩 증가하면서 찍겠다고 사용자가 지정하고 webcontainer에게 알린다. </BODY> <HTML> //위와 같이 만들어 놓고 위 코드를 실행 시 어떻게 돌아가게 하겠다라는 정의를 webcontainer에게 알려준다.
3. Expression Language2.0
* 톰켓에서 서블릿 변환 확인 경로 D:\apache-tomcat-6.0.35\work\Catalina\localhost\member_servlet\org\apache\jsp