[JSP] JSP 내장객체

2019. 2. 25. 18:18JAVA Back-End

JSP 내장 객체

JSP에 입력한 대부분의 코드는 서블릿 소스(.java)의 _jspService() 메소드 안에 삽입되어 생성됩니다.

_jspService()에 삽입된 코드의 윗 부분에 미리 선언된 객체들을 jsp에서도 사용 가능합니다.


response / request / application / session / out같은 변수를 내장객체(implicit Objects)라 합니다.


즉, JSP 자체적으로 가지고 있는 객체들입니다.


JSP가 JSP로 그냥 실행되는 게 아니라 Servlet으로 바뀌어서 실행되는 걸 기억하면 JSP에서 충분히 내장객체를 작성해서

마음껏 사용할 수 있겠구나 받아들이면 좋을 것 같습니다.


ObjectType
outJspWriter
requestHttpServletRequest
responseHttpServletResponse
configServletConfig
applicationServletContext
sessionHttpSession
pageContextPageContext
pageObject
exceptionThrowable

대표적 내장 객체들.

[출처] 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