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 = "<%";
String arg2 = "%>";
out.write(declaration(arg1, arg2));
%>
</h3>
<pre>
페이지 내부에서 Java 소스코드를 작성하는 영역을 나타내는 태그.
스크립틀릿에 작성하는 코드는 _jspService() 메서드 내부에 작성된다.
따라서 메서드 선언이나, static 변수는 사용할 수 없다.
</pre>
<hr>
<h2>표현식 태그</h2>
<h3>
<%
String exArg1 = "<%=";
String exAarg2 = "%>";
%>
<%= declaration(exArg1, exAarg2) %><br>
<% out.println(declaration(exArg1, exAarg2)); %>
</h3>
<hr>
<pre>
표현식 태그란 특정 객체나, 변수릐 값을 출력하는 용도로 사용
out.println() 메서드를 보다 편하게 사용할 수 있다.
</pre>
</body>
</html>
|
cs |
댓글