0%
  
  
    
      
      
    
  
  
  
    
    
      
      
      
    
    
      
    
    
    
      
    
    
    
    
        JSP Syntax
- Declaration – <%! %>: 전역변수 선언 및 메소드 선언에 사용
- Scriptlet – <% %>: 프로그래밍 코드 기술에 사용
- Expression – <%=%>: 화면에 출력할 내용 기술에 사용
Declaration (선언문)
- <%! %>
- JSP 내에서 변수 및 메소드 선언
| 12
 3
 4
 5
 6
 
 | <%!String id = "u001";
 public String getId() {
 return id;
 }
 %>
 
 | 
Scriptlet
- <% %>
- 가장 일반적으로 많이 쓰이는 스크립트 요소
- 주로 프로그램이의 로직을 기술할 때 사용.
- 스크립트릿에서 선언된 변수는 지역변수
| 12
 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>
 
 | 
- JSP에서 사용할 수 있는 주석
- HTML 주석  browser에서는 안보인다.
- JSP 주석 <%– –%>
- JSP 주석은 해당 페이지를, web browser를 통해 출력 결과로서 표시하거나, 웹 브라우저 상에서
 소스 보기를 해도 표시 되지 않음, 또한 JSP주석 내에 실행 코드를 넣어도 그 코드는 실행되지 않는다.
 
- JAVA 주석
- //, /* */ 변환은 되는데 servlet에서 실행될때 안된다.
 
- Comment example code
| 12
 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++) {
 %>
 <H<%=i %>> 아름다운 한글 </H<%=i %>>
 <%
 }
 %>
 </body>
 </html>
 
 | 
JSP 내장 객체
- JSP를 실행하면 서블릿 소스가 생성되고 실행된다.
- JSP에 입력한 대부분의 코드는 생성되는 Servlet source의 _jspService() method 안에 삽입 되는 코드로 생성된다.
- _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 해당 객체들은 jsp에서도 사용 가능하다.
- response, request, application, session, out과 같은 변수를 내장객체라고 한다.
- 미리 선언이 되어 있으므로 바로 가져다가 쓸 수 있다.
| 12
 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
| 12
 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>");
 }
 
 | 
| 12
 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.");
 }
 }
 
 | 
| 12
 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>
 
 |