0%

200829 TIL

JSP Syntax

  • Declaration – <%! %>: 전역변수 선언 및 메소드 선언에 사용
  • Scriptlet – <% %>: 프로그래밍 코드 기술에 사용
  • Expression – <%=%>: 화면에 출력할 내용 기술에 사용

Declaration (선언문)

  • <%! %>
  • JSP 내에서 변수 및 메소드 선언
1
2
3
4
5
6
<%!
String id = "u001"; // 멤버변수 선언
public String getId() {
return id;
}
%>

Scriptlet

  • <% %>
  • 가장 일반적으로 많이 쓰이는 스크립트 요소
  • 주로 프로그램이의 로직을 기술할 때 사용.
  • 스크립트릿에서 선언된 변수는 지역변수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for (int i = 1; i <= 5; i++) {
%>
<h<%=i %>>아름다운 한글 </h<%=i %>>
<%
}
%>

</body>
</html>

Comment

  • JSP에서 사용할 수 있는 주석
    • HTML 주석, JAVA 주석, JSP 주석
  • HTML 주석 browser에서는 안보인다.
  • JSP 주석 <%– –%>
    • JSP 주석은 해당 페이지를, web browser를 통해 출력 결과로서 표시하거나, 웹 브라우저 상에서
      소스 보기를 해도 표시 되지 않음, 또한 JSP주석 내에 실행 코드를 넣어도 그 코드는 실행되지 않는다.
  • JAVA 주석
    • //, /* */ 변환은 되는데 servlet에서 실행될때 안된다.
  • Comment example code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--jsp 주석문입니다.
여러줄을 입력할 수 있습니다. --%>
<!-- html 주석문입니다. -->
<%
/*
자바 여러줄 주석문입니다.
*/
for(int i = 1; i <= 5; i++) { // java 한줄 주석문입니다.
%>
<H<%=i %>> 아름다운 한글 </H<%=i %>>
<%
}
%>
</body>
</html>

JSP 내장 객체

  • JSP를 실행하면 서블릿 소스가 생성되고 실행된다.
  • JSP에 입력한 대부분의 코드는 생성되는 Servlet source의 _jspService() method 안에 삽입 되는 코드로 생성된다.
  • _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 해당 객체들은 jsp에서도 사용 가능하다.
  • response, request, application, session, out과 같은 변수를 내장객체라고 한다.
  • 미리 선언이 되어 있으므로 바로 가져다가 쓸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
StringBuffer url = request.getRequestURL();
out.print("url: " + url.toString());
out.print("<br>");
%>
</body>
</html>

Scope

  • Application: Web Application이 시작되고 종료될 때까지 변수가 유지되는 경우 사용
  • Session: Web Browser 별로 변수가 관리되는 경우 사용
  • Request: http요청을 WAS가 받아서 Web Browser에게 응답할 때까지 변수가 유지되는 경우 사용
  • Page: 페이지 내에서 지역변수처럼 사용, 가장 작은 단위

Page Scope

  • PageContext 추상 클래스를 사용한다
  • JSP 페이지에서 pageContext라는 내장 객체로 사용 가능 하다.
  • forwar가 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없다.
  • 사용방법은 Application scope나 Session scope, request scope와 같다.
  • 지역 변수 처럼 사용된다는 것이 다른 Scope들과 다르다.
  • jsp에서 pageScope에 값을 저장 한 후 해당 값을 EL표기법등에서 사용할 때 사용됩니다.
    지역 변수 처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용됩니다.

Request Scope

  • http요청을 WAS가 받아서 Web browser에게 응답할 때까지 변수 값을 유지하고자 할 경우 사용 된다.
  • HttpServletRequest 객체를 사용한다.
  • JSP에서는 request내장 변수를 사용한다.
  • Servlet에서는 HttpServletRequest객체를 사용한다.
  • 값을 저장할 때는 request객체의 setAttribute() 메소드를 사용한다.
  • 값을 읽어들일 때는 request객체의 getAttribute() 메소드를 사용한다.
  • forward시 값을 유지하고자 사용한다.
    • forward 하기 전에 request 객체의 setAttribute() 메소드로 값을 설정한 후, Servlet이나 jsp에게 결과를 전달하여 값을 출력하도록 하였슨데 이렇게 forward 되는 동안 값이 유지되는 것이 Request scope를 이용했다고 한다.

Session Scope

  • Web browser 별로 변수를 관리하고자 할 경우 사용한다.
  • Web browser간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션 정보를 사용할 수 있다.
  • HttpSession interface를 구현한 객체를 사용한다.
  • JSP session 내장 변수를 사용한다.
  • Servlet에서는 HttpServletRequest의 getSession() 메소드를 이용하여 seesion 객체를 얻는다.
  • 값을 저장할 때는 session객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 session 객체의 getAttribute()메소드를 사용한다.
  • 장바구니처럼 사용자 별로 유지가 되어야 할 정보가 있을 때 사용한다.
  • client 마다 유지를 해야하는 정보들을 session scope 에서 저장 및 관리

Application Scope

  • Web Application이 시작되고 종료될 때까지 변수를 사용할 수 있다.
  • ServletContext interface를 구현한 객체를 사용한다.
  • JSP에서는 application 내장 객체를 이용한다.
  • Servlet의 경우는 getServletContext() method를 이용하여 application 객체를 이용한다.
  • Web application 하나당 하나의 application객체가 사용된다.
  • 값을 저장할 때는 application객체의 setAttribute() method를 사용한다.
  • 값을 읽어들일 때는 application객체의 getAttribute() method를 사용한다.
  • 모든 Client가 공통으로 사용해야할 값들이 있을 때 사용한다.

Application Scope examples

  • ApplicationScope01.java
1
2
3
4
5
6
7
8
9
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
ServletContext application = getServletContext();
int value = 1;
application.setAttribute("value", value);

out.println("<h1>value:" + value + "</h1>");
}
  • ApplicationScope02.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();

ServletContext application = getServletContext();
try {
int value = (int) application.getAttribute("value");
value++;
application.setAttribute("value", value);

out.println("<h1>value : " + value + "</h1>");
} catch (NullPointerException e ){
out.print("the value was not set.");
}
}
  • ApplicationScope01.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
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
try {
int value = (int) application.getAttribute("value");
value = value + 2;
application.setAttribute("value", value);
%>
<h1><%=value %></h1>
<%
} catch (NullPointerException e) {
%>
<h1> 설정된 값이 없습니다. </h1>
<%
}
%>
</body>
</html>