[JSP] JSP 내장객체
2019. 2. 25. 18:18ㆍJAVA Back-End
JSP 내장 객체
JSP에 입력한 대부분의 코드는 서블릿 소스(.java)의 _jspService() 메소드 안에 삽입되어 생성됩니다.
_jspService()에 삽입된 코드의 윗 부분에 미리 선언된 객체들을 jsp에서도 사용 가능합니다.
response / request / application / session / out같은 변수를 내장객체(implicit Objects)라 합니다.
즉, JSP 자체적으로 가지고 있는 객체들입니다.
JSP가 JSP로 그냥 실행되는 게 아니라 Servlet으로 바뀌어서 실행되는 걸 기억하면 JSP에서 충분히 내장객체를 작성해서
마음껏 사용할 수 있겠구나 받아들이면 좋을 것 같습니다.
Object | Type |
---|---|
out | JspWriter |
request | HttpServletRequest |
response | HttpServletResponse |
config | ServletConfig |
application | ServletContext |
session | HttpSession |
pageContext | PageContext |
page | Object |
exception | Throwable |
대표적 내장 객체들.
[출처] https://www.javatpoint.com/jsp-implicit-objects
implicitObject.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
StringBuffer url = request.getRequestURL();
out.println("url: " + url.toString());
out.println("<br>");
%>
</body>
</html>
request와 out을 따로 선언 없이 사용할 수 있습니다. 왜 그런지 서블릿으로 컴파일 된 자바코드를 살펴봅시다.
implicitObject.java
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null; //out은 내장객체로 선언됩니다.
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
// ...생략...
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>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
StringBuffer url = request.getRequestURL();
out.println("url: " + url.toString()); // out을 서블릿에서 생성되므로 JSP에서 작성한 그대로 사용할 수 있습니다!
out.println("<br>");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
// ...생략...
서블릿(자바코드)로 변환되면서
javax.servlet.jsp.JspWriter out = null;
final javax.servlet.http.HttpServletRequest request
out / request가 선언되고 JSP에서 작성한 코드가 객체를 그대로 잘 사용하는 것을 확인할 수 있습니다 :)
[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다
'JAVA Back-End' 카테고리의 다른 글
[JSP/Servlet] 스코프(Scope) (0) | 2019.02.27 |
---|---|
[JSP] redirect 와 forward (1) | 2019.02.26 |
[JSP] JSP문법 (0) | 2019.02.25 |
[JSP] JSP 라이프 싸이클 (0) | 2019.02.25 |
[JSP] JSP? (0) | 2019.02.22 |