본문 바로가기
FrontEnd/Jsp

[JSP]JSP 기초

by pplucy 2021. 1. 14.

 

JSP란 JavaSeverPage의 약자로

Servlet의 Business로직으로 부터 화면로직(즉, MVC패턴의 View)을 분리하기 위해 사용된다.

 

JSP도 내부적으로 Servlet이기 때문에 클라이언트로부터 요청을 받아와서 데이터를 처리하는 등의 일을

처리할 수 있지만 그렇게 하지 않고 JSP와 Servlet을 철저히 분리해준다.

 

 

 

* JSP의 Element 표기법

 

-  <%-- 주석 --%>

- <%@ 지시자 %>

- <%! 선언문 %>

: JSP에서 선언해주면 필드에 등록되기 때문에 Servlet에서 처리해주는 것을 추천 !

: 예외적으로 변수선언이 필요할 경우엔 <% %> 표기법을 사용해 로컬변수를 선언해줄 수 있다.

- <% 코드 %>

: JSP 내에서 JAVA 코드를 사용할 때 사용

- <%= 표현식 %>

 

 

* JSP 주석과 HTML주석의 컴파일

 

- JSP 의 주석을 HTML의 주석표기법인 <!-- -->로 해줄 경우,

  클라이언트에게 보여지는 화면에서는 주석이 보이지 않지만

  브라우저를 개발자 모드로 확인하게 되면 모든 주석이 body단에 함께

  구성되어 나타나게 된다.

  이럴 경우엔 해당 주석의 내용이 남용될 수 있고 클라이언트에게 이런

  자세한 부분까지 노출시킬 필요가 없기 때문에 꼭 ! JSP에서는 JSP의

  주석을 사용해주도록 한다. 더불어 JSP에서 HTML의 주석을 사용하게 되면

  서버 통신의 양과 컴파일양이 늘어나게 된다.

 

 

 

 

 

 

- IndexServlet (servlet파일)

: 클라이언트가 요청한 데이터를 Servlet이 받아 비즈니스 로직을 처리한 후 View를 구성하는 JSP에 전달

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.kh.index.controller;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class IndexController
 */
@WebServlet("/index")
public class IndexController extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public IndexController() {
        super();
       
    }
 
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //JSP는 내부적으로 Servlet이기 때문에 요청을 재지정 할 수 있다.
        //그렇기때문에 우리는 사용자가 요청을 IndexController로 하게 할거고 여기서
        //index.jsp를 부르는 형태로 해줄 것이다.
        
        System.out.println("IndexController 호출");
        request.setAttribute("지시자태그""<%@ %>"); //request에 String값을 name으로 하는 속성값을 담아준다.
        request.setAttribute("선언태그""<%! %>");
        request.setAttribute("스크립틀릿태그""<%@ %>");
        request.setAttribute("표현식태그""<= %>");
        request.setAttribute("decTag""<% %>");
        
        
    
        //request.gerRequestDispatcher() 메소드는 해당 path 경로로 서버를 재요청하게 된다.
        RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/index.jsp");
        rd.forward(request, response); //forward로 내부 객체들을 함께 넘겨줘서 JSP(index.jsp)에서 그 객체를 받아 읽어낼 수 있다.
                                       //sendRedirect는 String 값에 넘겨줄 수 없기 때문에 객체를 넘길 땐 이 메소드사용 !
    }
 
    
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }
 
}
 
cs

 

 

- index.jsp (JSP파일)
: Servlet이 넘겨준 request 데이터를 토대로 View 구성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> <%-- 이미 UTF-8로 바껴서 나옴 (우리가  세팅을 해놨기 때문에)--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
    <h1> JSP 기초 </h1>
    <pre>
        JSP는 기존에 서버용 자바언어인 Servlet에서
        화면 구현에 관련된 소스 부분을 별도로 분리하는 기술을 말한다.
    </pre>
    <hr>
    <h2>지시자 태그</h2>
    <h3><%=request.getAttribute("지시자태그")%></h3>
        <%--setAttribute로 넣어둔 key, value값들  "지시자태그" key값인 value를 불러오게 된다. --%>
    <pre>
        지시자 태그란, 해당하는 페이지 전체에서 사용할 속성을 지정하는 JSP태그
        
        1.page : 해당 페이지에서 사용할 속성을 지정
            1-1 : language : 사용 프로그래밍 언어
            1-2 : import : 페이지에서 필요한 자바의 클래스를 import 할 때 사용
        2.include : 다른 위치의 html/jsp를 현재 페이지에 삽입할 때 사용
                    (ex. header.jsp를 만들어 파일에 공통적으로 필요한 부분들을 따로 뺴내서 모듈화 시켜주고 이것을 include 해줌)
        3.taglib : 다른 라이브러리에서 제공하는 커스텀태그를 사용할 때 사용
    </pre>
    
    <hr>
    <h2>선언 태그</h2>
    <h3><%=request.getAttribute("선언태그")%></h3>
    <pre>
        선언태그는 메서드, 필드변수를 선언할 때 사용. 따라서 static 변수도 선언이 가능하다.
        클래스의 필드에 해당하기 때문에 함부로 사용하면 위험하다.
    </pre>
    
    <%!
        public String declaration(String startDec, String endDec){
            return startDec + " " + endDec;
        
        }
    %>
    <hr>
    <h2>스크립틀릿(Scriptlet)</h2>
    <h3>
        <%
            String arg1 = "&lt;%";
            String arg2 = "%&gt;";
            out.write(declaration(arg1, arg2));
        %>
 
    </h3>
    <pre>
        페이지 내부에서 Java 소스코드를 작성하는 영역을 나타내는 태그.
        스크립틀릿에 작성하는 코드는 _jspService() 메서드 내부에 작성된다.
        따라서 메서드 선언이나, static 변수는 사용할 수 없다.
    </pre>
    <hr>
    <h2>표현식 태그</h2>
        <h3>
        <%
            String exArg1 = "&lt;%=";
            String exAarg2 = "%&gt;";
        %>
        <%= declaration(exArg1, exAarg2) %><br>
        <% out.println(declaration(exArg1, exAarg2)); %>
    </h3>
    <hr>
    <pre>
        표현식 태그란 특정 객체나, 변수릐 값을 출력하는 용도로 사용
        out.println() 메서드를 보다 편하게 사용할 수 있다.
    </pre>
    
    
    
    
</body>
</html>
cs

댓글