본문 바로가기
Programming/Languages (Java, etc)

JSP란

by kghworks 2022. 10. 5.

 

목차

  • JSP란
  • JSP 요소

JSP란

 

 동적인 웹 콘텐츠 (문서)를 더 편하게 만들기 위해 고안된 서블릿입니다. 기존 서블릿 (JSP가 아닌)의 경우 java class 파일에 html을 작성하고, 컴파일하고, was를 재기동하는 과정이 필요하기 때문에 굉장히 불편합니다.

 그러나 JSP는  server side의 JAVA 코드를 스크립트 언어로서 HTML 페이지에 작성할 수 있도록 하는 서블릿입니다. 그리고 컴파일은 WAS (톰캣)가 최초 요청마다 자동으로 컴파일하기 때문에 WAS의 재기동과 같은 과정이 필요 없습니다.

 

 오늘 날짜를 출력하는 웹페이지를 jsp와 jsp가 아닌 서블릿으로 예시를 보여드리면 jsp의 탄생 이유, 편리함이 바로 체감되는데요.

 

jsp가 아닌 서블릿의 경우 아래처럼 작성됩니다. 

package com.example.demo;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class ServletSample01 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.setContentType("test/html; charset=UTF-8");
        Date today = new Date();
        PrintWriter writer = response.getWriter();
        writer.println("<html><body><head>" +
                "<title>" +
                "<h1> " + today + "</h1>" +
                "</title>" +
                "</head></body></html>");
    }

}

 

너무 불편합니다.

 

  • 동적인 요소 하나 (오늘 날짜) 때문에 너무나  java 코드에 html 태그들을 일일이 나열 (개발 생산성 저하)
  • 웹페이지에 작은 수정사항 발생에도 재컴파일 과정 필요
  • 컴파일 후 was 재기동 과정 필요
  • 매우 귀찮;;

 

jsp 파일입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>java util</title>
</head>
<body>
<%
    Date today = new Date();
    out.println("<h1>" +today + "</h1>");
%>
</body>
</html>

 

너무  편합니다. 

 

  • html 태그를 작성하고, 필요할 때만 java 코드를 작성 (개발 생산성)
  • 컴파일 과정이 필요하나, was가 해줌
  • was 재기동 필요 없음

 


JSP 요소

 

  • 스크립트 요소
  • 지시어
  • 내장 객체
  • 액션 태그
  • 표현 언어
  • JSTL, 사용자 정의 태그
  • 주석

 

스크립트 요소
<%-- scriptlet --%>
<%
    Date today = new Date();
%>

<%--Expression (표현식)--%>
<%--수식의 결과는 String 으로 return--%>
<h1><%=today%></h1>

<%--Declaration (선언)--%>
<%!
    public int addValue (int a){
        return a++;
    }
%>

 

지시어 : JSP  설정 정보를 웹 컨테이너 (톰캣)에게 지시합니다.
<%--include--%>
<%--컴파일 시 삽입할 텍스트, 코드, 문서를 지정--%>
<%@ include file="/common/header.jsp" %>

<%--page--%>
<%-- 현재 jsp 페이지에 대한 정보를 지정 --%>
<%--스크립트 언어, 상속 받는 클래스, import 클래스, 에러페이지 등의 속성 지정--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.sql.*" %>
<%@ page session="false" %>
<%@ page import="java.util.Date" %>

<%--taglib--%>
<%--jsp 페이제엇 사용할 태그라이브러리 선언--%>
<%@ taglib prefix="kghCustomerTags" prefix="kghCustTag" %>

 

내장 객체
  • 묵시적으로 정의되어있는 자바 객체 (선언하지 않고 바로 사용한 객체)
  • 자주 사용하는 기능을 JSP 컨테이너가 객체 형태로 제공.
  • 선언, 초기화 과정 필요 없음
  • ex) : request, response, session, application, out, page 등
<%--request 변수 초기화 가 없음에도 사용 가능--%>
<%
    request.setCharacterEncoding("UTF-8");
    String userID = request.getParameter("id");
    String userPW = request.getParameter("password");
%>

 

내장객체에 대한 더 자세한 내용은 아래 포스팅을 참고해주세요.

 

2022.11.10 - [개발/JAVA] - JSP 내장객체

 

JSP 내장객체

목차 내장객체란 종류 내장객체란 JSP 프로그래밍에서 내장객체란 묵시적으로 이미 정의되어있는 자바 객체입니다. 이미 정의되어있으므로 선언하지 않고 바로 사용이 가능합니다. 선언과 초기

kghworks.tistory.com

 

액션 태그

요청 처리 시 특별한 기능 (액션)을 수행하도록 지시하는 것입니다. 아래 2개 외에도 여러 액션 기능들이 존재합니다. 

<%--jsp:forward--%>
<%--다른 페이지로 이동 시킴--%>
<jsp:forward page="/common/login.jsp"/>

<%--jsp:param--%>
<%--forward시 파라미터 지정--%>
<jsp:forward page="/common/infoPopUp.jsp">
    <jsp:param name="userName" value="<%=userObj.getUserName()%>"/>
</jsp:forward>

<%--jsp:include--%>
<%--다른 페이지를 포함, 모듈화--%>
<jsp:include page="/common/submenu.jsp"/>

<%--jsp:useBean--%>
<%--서버에서 정의한 Bean 사용 가능--%>
<jsp:useBean id="userObj" class="com.example.vo.User" />
<%
    String userID = userObj.getUserID();

%>
<%--jsp:setProperty--%>
<%--Bean 객체의 값을 지정 --%>
<jsp:setProperty name="uName" property="userName" value="<%=userObj.getUserName()%>"/>

<%--jsp:getProperty--%>
<%--Bean 객체에서 값을 가져와 사용 --%>
<b><jsp:getProperty name="userObj" property="userName" /></b> 님

 

표현 언어
  • 데이터를 다루기 쉽게 하는 간단한 스크립트 언어
  • 스크립트 요소 밖에서 사용
<b>${sessionScope.member.memberName}</b>님

 

JSTL, 사용자 정의 태그
  • JSTL : JSP Standard Tag Library
  • 자주 사용하는 기능을 태그로서 사용할 수 있도록 표준화
  • 그 외에도 사용자 정의 태그로서 사용자가 정의하여 사용 가능

 

jtsl 라이브러리 import (maven의 경우 pom.xml)

 <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
</dependency>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<c:forEach var="name" items="${nameList}" varStatus="status"> 
      <p>${status.count} : <c:out value="${name}" /></p>
</c:forEach>

 

 

 

 

'Programming > Languages (Java, etc)' 카테고리의 다른 글

[JSP] Runtime  (0) 2022.11.02
static 변수에 @Value inject  (0) 2022.10.24
JAVA는 call by reference 없습니다.  (0) 2022.07.19
분할정복 알고리즘  (0) 2022.06.23
싱글톤 패턴 (Singleton pattern)  (0) 2022.05.10

댓글