JSP가 서블릿에 비해 처리속도가 느리지 않는 이유
클라이언트가 요청한 것은 JSP 파일 ex) myCount.jsp 이지만 응답하는 것은 JSP 파일이 아니라 .class 확장자를 가지고 있는 서블릿 파일(myCount_jsp.class)
JSP는 서블릿으로 변환되는 과정이 추가되기 때문에 서블릿보다 응답시간이 느릴 것이라고 생각할 수 있지만, 서블릿과 JSP는 응답하는데 걸리는 시간 차이가 그리 크지 않음
스크립트릿 (scriptlet) : 자바 코드를 기술 함 : <% %>
선언 (declaration) : 변수와 메서드를 선언 함 : <%! %>
표현식 (expression) : 계산식이나 함수를 호출한 결과를 문자열 형태로 출력 함 : <%= %>
주석 (comment) : JSP 페이지에 설명을 넣음 : <%-- --%>
지시자 (Directive) : JSP 페이지의 속성을 지정함 : <%@ %>
JSP 페이지에서 자바 사용
스크립트릿과 선언문, 표현식으로 간단한 JSP의 예
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
String str = "안녕하세요!";
int a = 5, b = -5;
public int abs(int n) {
if (n < 0)
n = -n;
return n;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/* scriptlet에서의 주석 */
out.println(str + "<br>");
out.print(a + "의 절대값 : " + abs(a) + "<br>");
out.print(b + "의 절대값 : " + abs(b) + "<br>");
%>
<!-- HTML의 주석도 사용 가능 -->
<%-- 간단한 인사말 --%>
<%-- 인삿말을 str 변수에 저장한다. --%>
<br>
<%= str %>
<br>
<%= a %> 의 절대값 : <%= abs(a) %>
<br>
<%= b %> 의 절대값 : <%= abs(b) %>
</body>
</html>
<%@ 지시자 속성 = "값"...%>
page : 해당 JSP페이지 전반적으로 환경을 설정할 내용을 지정
include : 현재 페이지에서 다른 파일의 내용을 삽입할 때 사용
taglib : 태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능을 제공
내장 객체
request : 웹 브라우저의 요청 정보를 저장하고 있는 객체
response : 웹 브라우저의 요청에 대한 응답 정보를 저장하는 객체
out : JSP 페이지의 출력할 내용을 가지고 있는 출력 스트림 객체
session : 하나의 웹 브라우저 내에서 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체
application : 웹 애플리케이션 Context의 정보를 담고 있는 객체
pageContext : JSP 페이지에 대한 정보를 저장하고 있는 객체
page : JSP 페이지를 구현한 자바 클래스 객체
config : JSP 페이지에 대한 설정 정보를 담고 있는 객체
exception : JSP 페이지에서 예외가 발생한 경우 사용하는 객체
redirect 방식은 다음 페이지로 넘어갈때 request 값이 사라진다?
그래서 forward 방식을 많이 사용한다...?
실행 결과를 브라우저로 되돌려 줄 때 사용하는 내장 객체
response.sendRedirect("http://www.gulbut.co.kr");
JSP에서 다른 페이지로 이동하기 위한 방법
1. 리다이렉트 방식
2. 포워드 방식
리다이렉트 방식은 response 객체의 sendRedirect()로 페이지를 이동하는 방법
리다이렉트 방식은 브라우저의 URL을 변경하도록 하여 페이지를 이동하는 방식으로 request와 response 객체가 유지되지 않는다.
리다이렉트 방식 sendRedirect()
response.sendRedirect("05_redirectResult.jsp?age=" + 20);
포워드 방식 forward()
RequestDispatcher dispatcher = request.getRequestDispatcher ("05_forwardResult.jsp");
dispatcher.forward(request, response);
request.setAttribute("name", "request man");
application.setAttribute("name", "application man");
ServletContext로 선언된 application 내장 객체
JSP가 웹 컨테이너에 의해 서블릿으로 변환될 때, 자동으로 ServletContext 인터페스를 구현해서, 애플리케이션 내장 객체를 활용할 수 있게 함.
getServerInfo() : JSP 컨테이너의 이름과 버전을 반환한다.
getContextPath() : 웹 애플리케이션의 URL 경로 중 컨택스트 패스명을 반환한다.
getRealPath() : JSP의 실제 경로를 반환한다.
getMimeType(filename) : 지정된 파일의 MIME 타입을 반환한다.
log(message) : 지정된 message의 로그를 저정한다.
액션태그
<jsp:forward> : 다른 사이트로 이동할 때 사용한다. 페이지의 흐름을 제어할 때 사용한다.
<jsp:include> : 정적 혹은 동적인 자원을 현재 페이지의 내용에 포함시킨다. 페이지를 모듈화할 때 사용한다.
<jsp:param> : <jsp:forward>, <jsp:include>, <jsp:plugin> 과 같이 사용되어 인자를 추가할 때 사용한다.
<jsp:useBean> : 빈(Bean)을 생성하고 사용하기 위한 환경을 정의하는 액션 태그이다.
<jsp:setProperty> : 액션은 빈에서 속성 값을 할당한다.
<jsp:getProperty> : 액션은 빈에서 속성 값을 얻어올 때 사용한다.
<jsp:...속성="값">내용</jsp...>
<jsp:forward page="yellow02.jsp">
<jsp:param name = "url" value="red02.jsp"/>
<jsp:param name = "news" value="Happy New Year!"/>
</jsp:forward>
<jsp:foroward> 액션 태그
현재 JSP 페이지에서 URL로 지정한 특정 패이지로 넘어갈 때 사용하는 태그
현재 JSP 페이지에서 URL로 지정한 특정 페이지로 넘어갈 때 사용하는 태그
<jsp:forward page="relativeURLspec"/>
- 포워드 방식
- 기존의 request 연결을 유지하면서 서버상의 url로 request 정보를 전달
- JSP에서 다음 코드와 동일한 동작
RequestDispatcher dispatcher = request.getRequestDispatcher("url"): dispatcher.forward(requestm response);