반응형
http://docs.oracle.com/javaee/7/api/ 참조
01. 스크립팅 요소(Scripting Elements)
1) 스크립틀릿(Scriptlet)
- JSP 문서에서 Java 명령을 작성하는 영역을 표현하기 위한 스크립팅 요소(요청 처리 메소드의 명령)
- Java Code를 사용할 수 있는 영역 => _jspService() 메소드에 정의
<% Java 명령; Java 명령; ... %>
2) 선언문(Declaration)
- JSP 문서에서 필드 또는 메소드를 선언하는 영역을 표현하기 위한 스크립팅 요소(서블릿 클래스의 필드 또는 메소드)
- 멤버변수 또는 메소드를 선언하는 영역
<%! 필드 또는 메소드 선언 %>
3) 표현식(Expression)
- JSP 문서에서 Java 명령으로 발생되는 결과값을 표현하여 출력하는 영역을 표현하기 위한 스크립팅 요소(요청 처리 메소드의 명령)
- 값(변수, 메소드등)을 출력하기 위한 영역 => 문자열로 변환하여 출력
<%={변수명|연산식|메소드호출}%>
4) 예시
scripting > counter.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 선언문 : 필드 또는 메소드를 선언하기 위한 영역 --%>
<%!
//서블릿 클래스의 필드 : 서블릿 객체가 소멸(WAS 프로그램 종료)되면 필드는 자동 소멸 - 브라우저 종료되어도 상관없음
int count=0;
%>
<%-- 스크립틀릿 : 요청을 처리하기 위한 자바 명령을 작성하는 영역 - 요청 처리 메소드의 명령 --%>
<%
//요청 처리 메소드(_jspService 메소드)에 선언된 지역변수 - 요청 처리 메소드가 종료되면 지역변수는 자동 소멸
//int count=0;
count++;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>스크립팅 요소(Scripting Element)</h1>
<hr>
// <%-- out 객체 : JSP 문서에서 처리결과를 생성하기 위해 기본적으로 제공되는 출력스트림() PrintWriter의 자식임 --%>
// <%--<p>JSP 문서의 요청횟수 = <% out.println(count); %></p> -->
// <%-- 표현식 : Java 변수값, 연산식의 결과값, 메소드의 반환값을 문자열로 변환하여 클라이언트에게 전달(응답)하기 위한 영역 --%>
<p>JSP 문서의 요청횟수 = <%=count%> </p>
</body>
</html>
02. 지시어(Directives)
1) page Directive
- JSP 문서에 필요한 정보를 제공하는 지시어
- page Directive 속성과 속성값은 doc문서 참고하기!!
//기본적으로 많이 사용 ~~한 것들 가져다 사용해!
<%@page 속성=속성값 속성=속성값 ... %>
- 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true" %>
🖤1. contentType 속성 [page_contentType.jsp]
- contentType은 변경 자주함!
- 기본값 : text/html;charset=utf-8 로 변경해주어야 한글 사용
//<%-- 확장자 : .html --%>
//<%-- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> --%>
//<%-- ms워드 프로그램 있을 시 가능 확장자 : .doc --%>
<%@ page language="java" contentType="application/msword; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
table {
border: 1px solid black;
border-collapse: collapse;
}
td {
border: 1px solid black;
text-align: center;
width: 200px;
padding: 2px;
}
</style>
</head>
<body>
<h1>page Directive - contentType 속성</h1>
<hr>
<p>contentType 속성에는 JSP 문서를 요청하여 응답받을 수 있는 파일 형식(MimeType)과 파일의
문자 형태(CharacterSet - Encoding)를 속성값으로 설정</p>
<hr>
<table>
<tr>
<td>학번</td><td>이름</td><td>주소</td>
</tr>
<tr>
<td>1000</td><td>홍길동</td><td>서울시 강남구 역삼동</td>
</tr>
<tr>
<td>2000</td><td>임꺽정</td><td>서울시 월미구 상당동</td>
</tr>
<tr>
<td>3000</td><td>전우치</td><td>서울시 팔달구 구래동</td>
</tr>
</table>
</body>
</html>
🖤2. import 속성 [page_import.jsp]
//<%-- page Directive에서는 동일한 속성을 다른 속성값으로 중복 선언할 경우 JSP 문서 실행 시 500 에러 발생 - import 속성 제외 --%>
//<%--<%@ page import="java.util.ArrayList, java.util.List"%> --%>
//<%-- page Directive의 import 속성은 자동 완성 기능 사용 --%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//java.util.List<java.lang.String> nameList = new java.util.ArrayList<java.lang.String>();
List<String> nameList = new ArrayList<String>();
nameList.add("홍길동");
nameList.add("임꺽정");
nameList.add("전우치");
nameList.add("일지매");
nameList.add("장길산");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>page Directive - import 속성</h1>
<hr>
<p>import 속성에는 JSP 문서에서 사용할 클래스 또는 인터페이스를 속성값으로 설정
- 클래스 또는 인터페이스의 패키지를 명확하게 표현하여 제공</p>
<ul>
<% for(String name:nameList){ %>
<li><%=name%></li>
<% } %>
</ul>
</body>
</html>
🖤3. session 속성
- 서블릿과 다르게 JSP 는 기본적으로 세션을 무조건 바인딩해준다!
- 기본 속성값 - true
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true" %>
🖤 4. errorPage 속성 - 비권장 & web.xml설정 - 권장
[page_errorPage.jsp] - 권장
//방법1. 비권장
//<%-- errorPage 속성에는 JSP 문서 실행시 에러(예외)가 발생될 경우 클라이언트에게 500 에러코드 대신 에러페이지로 응답하기 위한 웹문서를 속성값으로 설정
//- 클라이언트의 URL 주소 미변경 --%>
//<%-- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="page_error.jsp"%> --%>
//방법2. 권장
//<%-- [web.xml] 파일에서 모든 웹프로그램에서 발생되는 에러코드(4XX 또는 5XX)를 클라이언트에게 전달하는 대신 에러페이지로 응답되도록 설정 가능
//- 클라이언트의 URL 주소 미변경 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
//String text = "ABCDEFG";
String text = null; // NullPointerException예외 발생 - 500에러
int num = 10/0; // ArithmeticException예외 발생 - 500에러
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>page Directive - errorPage 속성</h1>
<hr>
<p>errorPage 속성에는 JSP 문서 실행시 에러(예외)가 발생될 경우 클라이언트에게 500 에러코드
대신 에러페이지로 응답하기 위한 웹문서를 속성값으로 설정 - 클라이언트의 URL 주소는 미변경</p>
<hr>
<p>문자열의 문자갯수 = <%=text.length() %></p>
</body>
</html>
[page_error.jsp] - 비권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>요청한 프로그램 실행시 예기치 못한 오류가 발생 되었습니다. 빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>
[💖web.xml] - 권장
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>jsp</display-name>
<!-- 에러코드에 대한 에러페이지 설정:
사용자 편의성을 제공하기 위해 만드는 것이므로 프로젝트가 마무리되는 시점에 페이지를 만드는 것 -->
<!-- error-page : 에러페이지를 등록하기 위한 엘리먼트 , 하위 엘리먼트는 작성 우선순위 존재 -->
<error-page>
<!-- exception-type : 웹프로그램 실행시 발생되는 예외에 대한 예외클래스를 설정하기 위한 엘리먼트 -->
<exception-type>java.lang.NullPointerException</exception-type>
<!-- location : 에러코드 대신 응답될 에러페이지의 URL 주소를 설정하는 엘리먼트 -->
<location>/error/error_null.jsp</location>
</error-page>
<error-page>
<!-- error-code : 에러코드를 설정하기 위한 엘리먼트 -->
<error-code>500</error-code>
<location>/error/error_500.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/error/error_400.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/error_404.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
[💖error 폴더] - 권장
💖error_400 - 권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지(400)</h1>
<hr>
<p>비정상적인 방법으로 프로그램 요청을 시도 하였습니다.
정상적인 방법으로 사이트를 이용해 주세요.</p>
</body>
</html>
💖error_404 - 권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지(400)</h1>
<hr>
<p>원하시는 페이지의 주소가 잘못 입력되었거나,
변경 혹은 삭제되어 요청하신 페이지를 찾을 수가 없습니다.</p>
</body>
</html>
💖error_500 - 권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지(500)</h1>
<hr>
<p>요청한 프로그램 실행시 예기치 못한 오류가 발생 되었습니다.
빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>
💖error_null - 권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지(NullPointerException)</h1>
<hr>
<p>요청한 프로그램 실행시 예기치 못한 오류가 발생 되었습니다.
빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>
2) Include Directive
- JSP 문서에 외부파일의 코드(소스)를 포함하도록 하는 지시어
- URL 주소에 해당하는 문서를 불러서 그 파일이 가진 소스를 포함시킴 - .txt .jsp .html ...
- ex) 모든 페이지의 헤더, 풋터는 중복되므로 따로 빼서 만들고, include Directive로 소스를 가져다 포함시키면 됨
<%@include file="URL" %>
- WAS가 읽어들여서 포함시킬 문서파일은 jspf 파일로 만드는 경우 많음
- jspf : 자바코드를 가진 jsp 소스파일 (클라이언트가 요청해도 서블릿(웹프로그램)으로 만들지 않음)
💛JSP문서에 외부파일의 코드(소스) 포함
include_main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> //두 파일이 동일하도록
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>include Directive</h1>
<hr>
<p>웹서버에 존재하는 문서파일의 소스코드를 현재 JSP 문서에 포함하는 지시어 - 정적포함</p>
<hr>
// <%--
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// <p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
// --%>
// <%-- include Directive의 file 속성값으로 동일 서버에 저장된 문서파일의 URL 주소 설정 --%>
// <%-- => file 속성값으로 설정된 문서파일이 없는 경우 에러 발생 --%>
// <%-- => 문서파일의 소스코드를 include Directive 명령 위치에 포함하여 실행 --%>
<%@include file="include_sub.jspf"%>
</body>
</html>
💛include_sub.jspf
// JSPF 파일 : 클라이언트 요청에 의한 실행이 목적이 아닌 다른 JSP 문서에 소스코드를 제공하기 위한 파일
// 주의) JSP 파일과 JSP 파일에 선언된 page DirectiveType 속성값이 **반드시 동일**해야함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %> //두 파일이 동일하도록
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
3) taglib Directive
- JSP 문서에 태그 라이브러리 파일(커스텀 태그)을 포함하도록 지시
- 고급에서 많이 사용
<%@taglib prefix="namespace" uri="tldId" %>
03. 표준액션태그(Standard Action Tag)
- Java 명령으로 구현해야 하는 기능을 표준 액션 태그로 제공
- HTML 태그나 다른 markup 파일(xml파일)에서의 tagname과 구분하기 위해와 [jsp] 네임스페이스(NameSpace) 사용 : JSP 태그
- jsp 액션태그에서는 표현식(expression) 사용 가능
- include, forward, useBean, setProperty, getProperty 액션태그
- 그 외 더 많은 태그들이 존재하지만 자바 명령으로 해도 되므로 다른 태그들은 잘 사용하지 않음
<namespace:tagname>데이타</namespace:tagname>
1) include 태그
- JSP 문서의 스레드를 다른 JSP 문서로 이동하여 실행된 결과(웹문서)를 제공받아 태그를 사용한 위치에 포함하는 태그
- 실행결과물만 가지고 원래 파일로 이동
<jsp:include page="포함파일명"/>
<!-- a.jsp 문서 내에 아래와 같은 액션태그를 만나면 -->
<jsp:include page="b.jsp"/>
<!-- 스레드가 b.jsp로 이동하여 명령들을 실행 후 실행결과물만 가지고 a.jsp에게 전달 -->
vs
<!-- a.jsp 문서 내에 아래와 같은 include 지시어를 만나면 -->
<%@include file="b.jsp" %>
<!-- b.jsp파일의 코드(소스)를 포함하도록 지시함 - 즉, a.jsp + b.jsp 인 파일이 되는 것임 -->
2) forward 태그
- JSP 문서의 스레드를 다른 JSP 문서로 이동하여 실행된 결과(웹문서)를 클라이언트에게 전달하여 응답하는 태그
- 스레드 자체가 그냥 이동
<jsp:forward page="이동페이지명"/>
3) param 태그 - 자식태그
- JSP 문서에서 스레드가 이동된 JSP 문서로 값을 전달하기 위한 태그
- include 태그와 forward 태그의 하위태그로 실행
- 즉, 독립적태그가 아니라 자식태그로만 동작함
- 액션태그에서는 쿼리스트링을 이용할 수 없으므로 param액션태그를 이용함
- 하지만 param액션태그보다 request내장객체를 이용하는 것이 더 많음
<jsp:include page="포함파일명">
<jsp:param><jsp:param>
</jsp:include>
<jsp:forward page="이동페이지명">
<jsp:param><jsp:param>
</jsp:forward>
4) useBean 태그
- JSP 문서에서 사용할 수 있는 객체를 제공하기 위한 태그
- 내장객체에 저장된 속성값을 반환받아 제공하거나 (만약 값이 없다면) 새로운 객체를 생성하여 제공
- Bean(자바객체)를 사용하기 위한 태그
- 즉, new 연산자를 쓰지 않아도 객체를 제공받을 수 있음
<jsp:useBean id="객체명" class="패키지명.클래스명" scope="Scope객체"></jsp:useBean>
5) setProperty 태그 - 종속태그
- useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그(Setter 메소드 호출)
- useBean 태그의 종속태그 (자식태그아님!)
- 즉, useBean 태그가 없다면 사용 불가능하다는 의미
<jsp:useBean id="객체명" class="패키지명.클래스명" scope="Scope객체"></jsp:useBean>
<jsp:setProperty name="useBean객체" property="멤버변수명"/>
6) getProperty 태그 - 종속태그
- useBean 태그로 제공된 객체의 필드값을 반환하기 위한 태그(Getter 메소드 호출)
- useBean 태그의 종속태그 (자식태그아님!)
- 즉, useBean 태그가 없다면 사용 불가능하다는 의미
<jsp:useBean id="객체명" class="패키지명.클래스명" scope="Scope객체"></jsp:useBean>
<jsp:getProperty name="useBean객체" property="멤버변수명"/>
반응형
'jsp' 카테고리의 다른 글
[jsp] 6. JSP 내장객체의 사용범위(Scope) (0) | 2024.07.06 |
---|---|
[jsp] 5. JSP 내장객체 (0) | 2024.07.05 |
[jsp] 4. 커스텀 태그 클래스 등록해 사용하는 법 (taglib Directive) (0) | 2024.07.05 |
[jsp] 3. Include Directive를 통한 사이트 구축 (중형사이트에 최적) (0) | 2024.07.04 |
[jsp] 1. JSP(Java Server Page)의 개념 (0) | 2024.07.04 |