Upload
-
View
124
Download
5
Embed Size (px)
DESCRIPTION
routine to know how to convert jsp to servlet
Citation preview
To be JSP7장
JSP
MVC 아키텍쳐에서 View단을 맡고 있다.
!request.setAttribute("styles", result); RequestDispatcher view = request.getRequestDispatcher(“result.jsp");view.forward(request, resp);
이 과정에서 jsp파일을 세팅해주고
목적지로 forward시킨다. 즉 redirect시킴
In JSP
• 그러면 JSP는 내부적으로 어떻게 동작하는가?
JSP Code Problem
<title>View</title></head><body>The page count is :<% out.println(Counter.getCount());%>!</body></html>
package 가 없다!!!!
JSP Code Problem
JSP 코드 앞에 패키지를 넣어 주면 된다.
foo.Counter.getCount();
근데 이건 너무 귀찮다! 자바처럼 import할 방법이 없을까?
지시자(directive)
• 지시자는 컨테이너가 페이지를 자바 코드로 변환할 시에 특별한 지시를 내릴 수 있다.
• page, include, taglib이 있다. !<%@ page import=“foo.*, java.util.*” %>
여러 개를 import하는 것도 가능
out.println
out.println(Counter.getCount());! 이것도 너무 귀찮다. 계속 out객체를 이용하고 싶지 않다. 그리고 웹 디자이너들은 자바를 잘 모른다. 다른 문법이 없을까?!!
JSP 표현식(expression)
<%= Counter.getCount()%>!이걸 사용하면 자동으로 out 객체로 println을 시행해줌out.println(Counter.getCount());랑 같은 거니까당연히 끝에는 세미콜론(;)이 없어야겠죠?
지역변수
<% %> : 스크립틀릿을 사용하면 호출할때마다 변수가 초기화된다. 지역변수기 때문에
인스턴스 변수로 만들 수 있을까?
선언문(declaration)
<%! int count = 0 %>
이렇게 선언하면 인스턴스 변수로 값이 할당됨.
Convert to Servlet지시자를 확인한다(<%@ %>)
HttpServlet 의 하위 클래스를 생성한다
page 지시자가 있으면, 패키지 선언 아래애 import 문을 넣는다
service() 메소드를 만든다.
내장 객체
• JSP가 서블릿이 되기 때문에 서블릿의 내장 객체를 이용할 수 있다.
• API와 내장 객체 매핑은 책을 참조 || 검색하는 걸로!
JSP LifeTime
• JSP파일을 저장해서 배포한다
• 사용자가 jsp파일을 요청한다.
• jsp가 컴파일되어 .class파일로 변환된다.
• jsp가 서블릿으로 변환되고, 컨테이너가 인스턴스화한다.
• 요청이 들어올때마다 _jspService() 메소드를 실행한다.
초기화
• jsp는 서블릿으로 변환되니 당연히 초기화도 할 수 있고, 재정의도 할 수 있다.
• 초기화는 <servlet-class>태그가 아닌 <jsp-file>태그를 이용한다.
속성 체크
• jsp 내에서 내장 객체를 이용하여 서블릿처럼 각각의 컨텍스트에 접근할 수 있다.
• Application, Request, Session에 접근 가능하다.
• 그런데 Page라는 다른 컨텍스트가 존재한다.
Page
• PageContext는 자기 자신에게 설정되어 있는 Page속성 뿐만 아니라 다른 생존범위 속성에도 접근할 수 있다.
• PageContext를 이용하여 Session, application 생존 범위 내에 값을 세팅하고, 읽어올 수 있다.
<% %>
• 스크립틀릿은 자바 코드이다.
• 웹 디자이너들은 프로그래머가 아니므로, 자바 코드를 이해할 수 없다.
• 어쩌지?
EL
• EL은 Expression Language의 약자며, 스크립틀릿이나 표현식으로 했던 작업들을 할 수 있다.
• 코드를 짜는 것이 아니라, 다른 데서 짜 놓은 코드를 EL을 가지고 호출할 수 있다.
EL
• ${applicationScope.mail} ==
<%= application.getAttribute(“mail”) %>
EL
• 그러나 항상 EL이 좋은 것은 아니다. 코드 중에 EL이 사용된 것처럼 착각할 수 있는 코드가 존재할 수 있다.
• 그럴 땐 EL을 사용할 수 없게 만들어야 한다.
• DD에서 세팅하는 방법과, page 지시자 속성을 이용하는 방법이 있음.
• 항상 page 지시자가 우선함(둘 다 세팅했을 경우에는)
Action
• 표준 액션 :<jsp:include page=“wickedFooter.jsp”/>
• 기타 액션 :<c:set var=“rate” value=“32” />
• 자세한 건 다음 장에서