-
(JSP/Servlet) 개념과 기초 정리서버 프로그래밍 2021. 8. 24. 17:50
JSP란 JavaServer Page의 약자로 HTML 코드 내부에 JAVA코드를 작성할 수 있는 서버 프로그램 언어이다.
이번에도 역시 개념과 특징을 정리해보자.
- 빈즈, 자바 컴포넌트 사용 가능 -> 후에 실습 내용에 서술
- 커스텀 태그 만들어서 사용 가능
- JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리 이용 가능
- 스프링, @MVC 등 다양한 프레임워크와 결합하여 개발 가능
★ JSP의 동작 ★
test.jsp 코드를 실행! -> Server with Container가 읽고 변환 -> test_jsp.java(Servlet파일 생성) -> 컴파일 -> test_jsp.class -> 실행 -> HTML 파일 -> HTTP 프로토콜을 통해 브라우저가 서비스를 받는다.
--> JSP로 코드를 짜면 Servlet 코드로 컨테이너가 변환시켜준다. 아래 예시를 보자.
1234567891011121314<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.Date"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>JSP 실습</title></head><body><%=new Date() %></body></html>cs - 간단한 JSP 코드 예시이다. HTML 코드 내부 <%= %> 태그 안에 자바 코드가 삽입되어 있다. 이걸 실행하면 Servlet코드(.java)와 실행할 class파일이 만들어진다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144/** Generated by the Jasper component of Apache Tomcat* Version: Apache Tomcat/8.5.69* Generated at: 2021-08-24 04:58:12 UTC* Note: The last modified time of this file was set to* the last modified time of the source file after* generation to assist with modification tracking.*/package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import java.util.Date;public final class NewFile_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;private static final java.util.Set<java.lang.String> _jspx_imports_packages;private static final java.util.Set<java.lang.String> _jspx_imports_classes;static {_jspx_imports_packages = new java.util.HashSet<>();_jspx_imports_packages.add("javax.servlet");_jspx_imports_packages.add("javax.servlet.http");_jspx_imports_packages.add("javax.servlet.jsp");_jspx_imports_classes = new java.util.HashSet<>();_jspx_imports_classes.add("java.util.Date");}private volatile javax.el.ExpressionFactory _el_expressionfactory;private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.Map<java.lang.String,java.lang.Long> getDependants() {return _jspx_dependants;}public java.util.Set<java.lang.String> getPackageImports() {return _jspx_imports_packages;}public java.util.Set<java.lang.String> getClassImports() {return _jspx_imports_classes;}public javax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();}}}return _el_expressionfactory;}public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {if (_jsp_instancemanager == null) {synchronized (this) {if (_jsp_instancemanager == null) {_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}}}return _jsp_instancemanager;}public void _jspInit() {}public void _jspDestroy() {}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, "JSP들은 오직 GET, POST 또는 HEAD 메소드만을 허용합니다. Jasper는 OPTIONS 메소드 또한 허용합니다.");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;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.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>\r\n");out.write("<html>\r\n");out.write("<head>\r\n");out.write("<meta charset=\"UTF-8\">\r\n");out.write("<title>JSP 실습</title>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write("\r\n");out.print(new Date() );out.write("\r\n");out.write("\r\n");out.write("</body>\r\n");out.write("</html>");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}}cs (간단한 JSP코드가 변환된 Servlet 코드, 새삼 JSP가 고마워진다...)
- 결국 JSP는 Servlet코드를 편하게 짜기위한 코드라고 생각하면 될 것 같다.
★★ JSP를 변환한 Servlet 코드를 보면 pageContext, application, request, response 등등의 객체가 초기화 되어 있다.
---> JSP에서 별도의 선언 없이 사용이 가능! (이것이 핵심!) == 이것을 'JSP 내장객체' 라고 부른다.
후에 예제 코드와 함께 JSP 코드를 설명해 보도록 하겠습니다 :)
'서버 프로그래밍' 카테고리의 다른 글
(JSP) 포워딩과 리다이렉트 (0) 2021.08.26 (JSP) 자바 빈즈를 활용한 계산기 (0) 2021.08.26 (JSP) 계산기를 만들어보자 (0) 2021.08.26 (Servlet) 개념과 특징 정리 (0) 2021.08.24