ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 06) JSP
    학교/JAVA 2023. 12. 14. 12:11

     

    💜 JSP (Java Server Page)

    - 서블릿에 비해 쉬운 프로그래밍 구문 제공

    - 서블릿으로 변환되어 실행

     

     

     

    💛 서블릿과 JSP 비교

    - 아래 장단점으로부터 서블릿과 JSP는 필요에 따라 이용하는 것이 바람직

     

     

     

     

    🧡 JSP 실행 과정

    1. login.jsp는 서블릿인 login_jsp.java로 변환

     

    2. login_jsp.java를 컴파일하여, login_jsp.class를 생성

     

    3. Java 리플렉션 API를 이용하여 login_jsp 클래스 파일을 메모리에 로드

    Java 리플렉션은 주어진 파일을 메모리에 반영한다는 의미로, Class.forName() 함수에 의해 실행

    (Java Reflection API 이용 - Class.forName())

     

    4. 초기화를 위해 login_jsp 클래스의 jspInit() 함수가 호출

    그리고 클라이언트로부터 요청이 올 때까지 대기

     

    5. 클라이언트로부터 HTTP 요청이 전달된 경우 _jspService() 함수가 실행

    해당 함수에는 사용자가 login.jsp에서 정의한 JSP 코드를 변환한 Java 코드가 포함되어 있음

     

     

     

     

     

    1️⃣ login.jsp 변환 코드 확인

    - 파일 탐색기에서 아래 경로로 이동하여 login_jsp.java 파일 열기

    C:\work\project\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\
    work\Catalina\localhost\ Hello\org\apache\jsp

     

    2️⃣ login_jsp.java 코드 확인 (1/2)

    - login_jsp.java 클래스: _jspInit, _jspService() 함수로 구성

    (login_jsp.java)

    public final class login_jsp extends org.apache.jasper.runtime.HttpJspBase
    ...
    public void _jspInit() {
    }
    ...
    public void _jspService(final javax.servlet.http.HttpServletRequest request, final
    javax.servlet.http.HttpServletResponse response)
    throws java.io.IOException, javax.servlet.ServletException {
    ...
    javax.servlet.jsp.JspWriter out = null;
    ...
    out = pageContext.getOut();

     

     

    3️⃣ login_jsp.java 코드 확인 (2/2)

    - _jspService() 함수에 변환 코드가 위치 (거의 원본 코드와 1:1 대응)

    (login_jsp.java)

    out.write("\r\n");
    out.write("<!DOCTYPE html>\r\n");
    out.write("<html>\r\n");
    out.write("<head>\r\n");
    out.write("<meta charset=\"ISO-8859-1\">\r\n");
    out.write("<title>Insert title here</title>\r\n");
    out.write("</head>\r\n");
    out.write("<body>\r\n");
    out.write("<h3>User ID: ");
    out.print( request.getParameter("id") );
    out.write("</h3>\r\n");
    out.write("</body>\r\n");
    out.write("</html>");
    ...

     

     

     

     

     

     

     

     

    🩷 JSP 스크립팅 요소

    - 아래의 5가지 요소가 있으며, 공통적으로 <% ... %> 형식으로 정의

     

     

     1️⃣스크립트릿(Scriptlet)

    - Java 코드 추가를 위해 이용되며, <% ... %> 내에 Java 코드 입력

    (login2.jsp)

    <html>
    <%
    String uid = request.getParameter("id");
    String res = "<h3>User ID: " + uid + "</h3>";
    out.print(res);
    %>
    </html>

     

     

    * login2_jsp.java 확인

    - 파일 탐색기에서 아래 경로로 이동하여 " login2_jsp.java" 코드 확인

    C:\work\project\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\
    work\Catalina\localhost\ Hello\org\apache\jsp

     

     

    * 변환 규칙

    - 기본적으로 1:1 대응 변환 규칙이 적용되며, 요소 별로 아래의 규칙 이용

    - HTML 태그: out.write() 함수의 입력 파라미터로 전달

    - 스크립트릿 내의 Java 코드: _jspService() 함수에 그대로 출력

     

     

     

    2️⃣ 지시어 (Directive)

    - JSP 페이지 처리에 필요한 부가 속성을 정의하기 위해 이용

    - <%@ ... %> 안에 속성 정의

    - JSP 파일 생성 시 이클립스에서 템플릿 코드에 포함되어 제공

     

    * 지시어 종류

    - page와 include에 대해 설명

    - taglib는 JSTL(JSP Standard Tag Library)와 관계된 내용이며, 다루지 않음

     

     

    (1) Page 지시어

    - JSP 페이지 처리와 실행에 필요한 속성 정의

     

     

    * 변환 규칙

    - 기본적으로 1:1 대응 변환 규칙이 적용되며, 개행 문자가 출력되도록 변환

    - 단, _jspService() 상단에 response.setContentType("text/html")이 추가됨

     

     

    * response.setContentType("text/html")

    - <html> 태그가 빠져 있어도 브라우저가 HTML 파일로 인식하도록 지원

     

    * 한글처리

    - Page 지시어에 pageEncoding 속성 값으로 “utf-8” 추가

    - <form> 태그의 method 속성 값이 post일 경우 → 한글 깨짐

    - request.setCharacterEncoding() 함수 추가

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%
    request.setCharacterEncoding("utf-8");
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    out.print(res);
    %>

     

     

     

    * Page 지시어의 import 속성

    - 예제: 로그인 시간 출력 -> Date 클래스를 이용하려면?

    (login4.jsp)

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%
    request.setCharacterEncoding("utf-8");
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    out.print(res);
    %>

     

     

     

    * Include 지시어

    (login5.jsp)

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%
    request.setCharacterEncoding("utf-8");
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    out.print(res);
    %>
    <%@ include file="loginTime.jsp" %>

     

    (loginTime.jsp)

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%@ page import="java.util.Date" %>
    <%
    String res1 = "<br>로그인 시간: " + (new Date()).toString();
    out.print(res1);
    %>

     

     

    * login5.jsp의 변환 결과 -> loginTime.jsp의 코드가 함께 복사

    ( login5_jsp.java)

    ...
    public void _jspService(final javax.servlet.http.HttpServletRequest request, final
    javax.servlet.http.HttpServletResponse response)
    ...
    request.setCharacterEncoding("utf-8");
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    out.print(res);
    ...
    String res1 += "<br>로그인 시간: " + (new Date()).toString();
    out.print(res1);
    ...

     

     

     

     

    3️⃣ 선언문 (Declaration)

    - 함수나 변수의 선언을 위해 이요되며, <%! ... %> 안에 정의

    (login6.jsp)

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%@ page import="java.util.Date" %>
    <%!
    String getDate() {
    return (new Date()).toString();
    }
    %>
    <%
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    res += "<br>로그인 시간: " + getDate();
    out.print(res);
    %>

     

     

    * 변환 규칙

    - login6_jsp 클래스의 멤버 함수로 추가됨 (_jspSerivice()에 포함되지 않음에 유의)

     

     

     

    4️⃣ 표현식 (Expression)

    - 함수나 변수의 호출을 위해 이용되며, <%= ... %> 안에 정의

    (login7.jsp)

    <%@ page contentType="text/html" pageEncoding="utf-8" %>
    <%@ page import="java.util.Date" %>
    <%
    String uid = request.getParameter("id");
    String res = "<h3>사용자 아이디: " + uid + "</h3>";
    out.print(res);
    String date = (new Date()).toString();
    %>
    로그인 시간: <%= date %>

     

    * 변환 규칙

    - 기본적으로 1:1 대응 변환 규칙이 적용

    - out.write() 함수를 통해 함수나 변수 값이 출력되도록 출력되도록 변환

Designed by Tistory.