0%
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>
|
- 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++) { %> <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
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>"); }
|
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."); } }
|
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>
|