내부적으로 서블릿으로 변환되어 실행
👉 서블릿의 단점이기도 함
👉 서블릿은 구현 및 유지보수가 불편함
👉 서블릿의 단점을 보완한 것 = JSP
web.xml
파일에 등록 or @어노테이션
추가 안해도 됨<%@ page contentType="text/html; charset=UTF-8" %>
가 있으면 JSP<%@ page contentType="text/html; charset=UTF-8" %>
가 없으면 HTML서버는 브라우저 요청에 대한 JSP 파일을 찾은 후
서블릿 클래스로 변환
변환된 후
서블릿 객체와 동일하게 서블릿 컨테이너에서 생성 및 관리
<Context docBase="BoardWeb" **path="/"** reloadable="true" source="org.eclipse.jst.jee.server:BoardWeb"/></Host>
<%@page contentType="text/html; charset=UTF-8" %>
<!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>임시 제목</title>
</head>
<body>
<center>
<h1><%= request.getParameter("id")%>님 환영합니다.</h1>
</center>
</body>
</html>
C:\FACAM_DEV\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\ROOT
_jspService()
메서드 안으로 자동 등록됨public final class hello_jsp extends HttpJspBase implements JspSourceDependent, JspSourceImports {
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {
final PageContext pageContext;
HttpSession session = null;
final ServletContext application;
final ServletConfig config;
JspWriter out = null;
final Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write("<title>임시 제목</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("<center>\r\n");
out.write("<h1>");
out.print( request.getParameter("id"));
out.write("님 환영합니다.</h1></center>\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
} finally {
}
}
}
JSP가 제공하는 태그
태그 | 형태 | 의미 |
---|---|---|
주석문(Comment) | <%-- --%> | 특정 코드를 서블릿 변환에서 제외 |
지시자(Directive) | <%@ %> | 서블릿 변환 과정에서 추가할 페이지 정보를 설정 |
스크립트릿(Scriptlet) | <% %> | 실행될 자바 코드를 작성 |
표현식(Expression) | <%= %> | 브라우저에 출력할 데이터를 설정 |
선언문(Declaration) | <%! %> | 변환된 서블릿의 멤버변수와 메소드를 선언 |
HTML 주석
JSP 파일이 서블릿으로 변환될 때 서블릿에 포함
JSP 주석
서블릿으로 변환될 때 포함되지 않음
<!-- HTML 주석입니다. -->
<%-- JSP 주석입니다. --%>
JSP가 서블릿 클래스로 변환될 때 , 어떤 내용을 반영할지 지시할 때 사용
지시자 | 형태 | 의미 |
---|---|---|
page | <%@ page %> | 서블릿 변환 과정에서 추가할 페이지 정보를 설정 |
include | <%@ include %> | 다른 JSP의 코드를 특정 위치에 포함 |
taglib | <%@ taglib %> | XML 기반의 태그를 사용할 수 있도록 선언 |
<%@page %>
@
와 page
사이는 띄어쓰지 않는 것을 권고<%@page contentType="text/html; charset=EUC-KR" %>
속성 | 의미 |
---|---|
isErrorPage | 현재 페이지가 에러 처리 전용 페이지임을 설정 |
errorPage | 에러가 발생했을 때 에러를 처리할 페이지를 지정 |
import | 변환된 서블릿 클래스에서 import할 클래스를 설정 |
session | 현재 페이지에서 세션 객체를 기본적으로 사용할 것인지 설정 |
isErrorPage
속성값을 true
로 설정하면?exception
라는 변수가 자동으로 선언됨exception
변수에 JSP
에서 발생된 예외 객체가 자동으로 할당isErrorPage="true"
<h3><%= exception.getClass().getName() %> 발생!</h3>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<center>
<h3><%= exception.getClass().getName() %> 발생!</h3>
<hr>
<% StackTraceElement[] elements = exception.getStackTrace(); %>
예외 위치 : <%= elements[0].toString() %>
</center>
<%@page contentType="text/html; charset=UTF-8"
errorPage="errors/boardError.jsp"%>
<!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>임시 제목</title>
</head>
<body>
<center>
<h1><%= request.getParameter("id").toString()%>님 환영합니다.</h1></center>
</body>
</html>
session="true"
<%@page contentType="text/html; charset=UTF-8"
errorPage="errors/boardError.jsp" session="true" %>
<!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>임시 제목</title>
</head>
<body>
<center>
<h1><%= request.getParameter("id").toString()%>님 환영합니다.</h1>
세션 아이디 : <%= session.getId() %>
</center>
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8"
errorPage="errors/boardError.jsp"%>
<!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>게시판 프로그램</title>
</head>
<body>
<hr>
<a href="#">Home</a>
<a href="#">회원가입</a>
<a href="#">로그인</a>
<hr>
<br>
<%@ page contentType="text/html; charset=UTF-8"%>
. . .
<br>
<hr>
<br>
<center>
문의 전화 : 02-1234-5678<br>
주소 : 서울시 강남구 짱구대로 999
</center>
<%@page contentType="text/html; charset=UTF-8" errorPage="errors/boardError.jsp"%>
<%@include file="../layout/header.jsp"%>
<center>
<h1><%=request.getParameter("id") %>님 환영합니다.</h1>
</center>
<%@include file="../layout/footer.jsp"%>
선언문은 사용하지 않는다
_jsp Service() { }
안쪽으로 모든 코드가 들어감스크립트는 실행할 자바코드 감쌀때
익스프레션은 변수에 저장된 값 or 메서드가 리턴한 값을 브라우저 특정 위치에 출력할 때
<% %>
<%= 변수 %>
<%= 메소드호출 %>
ctrl+space
<td><%**=**board.getSeq()%></td>
<a href="getBoard.jsp"><%=board.getTitle()%></a>
<%@page import="java.util.List"%>
<%@page import="com.ssamz.biz.board.BoardDAO"%>
<%@page import="com.ssamz.biz.board.BoardVO"%>
<%@page contentType="text/html; charset=UTF-8"
errorPage="errors/boardError.jsp"%>
<%@include file="../layout/header.jsp"%>
<%
// Scriptlet : 정상적인 자바 코드가 작성되는 영역
// 1. DB 연동 처리
BoardVO vo = new BoardVO();
BoardDAO dao = new BoardDAO();
List<BoardVO> boardList = dao.getBoardList(vo);
// 2. 응답 화면 구성
%>
<center>
<table border="1" cellpadding="0" cellspacing="0" width="700">
<tr>
<th bgcolor="orange" width="100">번호</th>
<th bgcolor="orange" width="200">제목</th>
<th bgcolor="orange" width="150">작성자</th>
<th bgcolor="orange" width="150">등록일</th>
<th bgcolor="orange" width="100">조회수</th>
</tr>
<% for (BoardVO board : boardList) { %>
<tr>
<td><%=board.getSeq()%></td>
<td align="left"><a href="getBoard.jsp"><%=board.getTitle()%></a></td>
<td><%=board.getWriter()%></td>
<td><%=board.getRegDate()%></td>
<td><%=board.getCnt()%></td>
</tr>
<% } %>
</table>
</center>
<%@include file="../layout/footer.jsp"%>