0.JSP란?
HTML에 JAVA 코드를 넣어 동적인 웹을 생성하는 도구이며, 컨테이너에서 서블릿으로 관리된다. JSP는 지시어, 액션, 템플릿 데이터, 스크립트 요소, 커스텀 태그과 EL로 구성된다.
- JSP의 동작과정
- JSP를 JAVA 소스로 변환 (.java 파일 생성)
- JAVA 소스를 CLASS로 컴파일 (.class 파일 생성)
- 서블릿 실행
- 사용자 요청 처리
1. 지시어
- page
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
page 지시어는 JSP 페이지를 컨테이너에서 처리하는데 필요한 속성을 기술한다. IDE에서 JSP 파일을 생성할 때 자동으로 생성된다.
- include
<% include file="파일 위치"%>
include 지시어는 해당 위치에 특정 파일을 불러와 클라이언트에게 보여준다.
- taglib
커스텀태그를 사용할 시 taglib 지시어가 필요하다. 커스텀 태그란 사용자 정의 태그로, 스크립트릿 사용을 줄이고 태그 형태로 코드를 대체할 수 있다. 그러나 프로젝트가 특정 커스텀 태그에 종속될 수 있어 최근에는 잘 사용하지 않는다.
2. 스크립트 요소
JSP는 HTML에 JAVA 코드를 넣어 동적인 웹을 생성하는 도구라고 하였다. JSP는 HTML의 전반적인 구조를 따르는데, 이때 사용되는 자바 코드를 스크립트 요소라고 하며, 자바 코드가 사용되는 부분을 정의해주기 위하여 특정 태그를 사용한다.
1) 선언 태그
<%! > 꼴을가지며, 변수나 메서드를 선언할 때 사용한다.
<%!
string[] alphabet = {"a","b","c","d","e"}
int num1 = 10;
int calc (int num2) {
return num1 + num2;
}
%>
2) 표현 태그
<%= %> 꼴을 가지며, 웹 브라우저를 통해 클라이언트에 전달 될 자바 표현식을 정의한다. 자바의 'out.println'에 들어갈 수 있는 모든 자바 코드가 가능하다.
calc(10) 메서드의 실행 결과: <%= calc(10) %>
3) 스크립트릿 태그
멤버 변수 선언과 함수 선언을 제외한 모든 자바 코드의 사용이 가능하다.
<%
for (String alphabet : ap) {
%>
<li><%= ap %></li>
<%
}
%>
3. 액션 태그
액션 태그란 JSP에서 객체 생성과 공유, 페이지 이동과 전달 등에 필요한 기능을 제공하는 커스텀 태그이다.
jsp:forward | request와 response 객체를 포함해 다른 페이지로 포워드 |
jsp:include | 다른 페이지의 실행 결과를 보여줌 |
jsp:uesBean | 자바 빈즈 객체를 생성하거나 불러옴 |
jsp:setProperty | 자바 빈즈 객체의 속성에 값을 할당함 |
jsp:getProperty | 자바 빈즈 객체의 속성값을 출력함 |
jsp:param | include,forward 액션 사용 시 파라미터 값을 수정하거나 추가함 |
1) JavaBeans
자바빈즈(Java Beans)는 자바(Java)로 작성된 소프트웨어 컴포넌트를 일컫는 말로 데이터 표현을 목적으로하는 자바 클래스다.
- 인자가 없는 생성자로 구성된다.
- getter, setter 메서드를 통해 멤버 변수에 접근한다.
- getter, setter 메서드의 접근 제한자는 public이다.
<자바빈>
// 회원을 관리하는 member 클래스를 자바 빈 구조로 만들었다.
public class member {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<JSP>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="member" class="main.webapp.ch07.member"/>
<jsp:setProperty name="member" property="*"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 조회</title>
</head>
<body>
<h3>회원 조회</h3>
회원 id: <%=member.getId()%>
<br>
회원 이름: <%=member.getName()%>
</body>
</html>
<HTML>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입</title>
</head>
<body>
<form method="post" action=memberJsp.jsp>
<input type="text" name="id" size=10>
<input type="text" name="name" size=10>
<hr>
<input type = "submit" value="가입">
</form>
</body>
</html>
<실행결과>
2) include
include 액션은 include 지시어와 유사하다. 다만 include 지시어의 경우 inlclude 된 파일을 포함하여 하나의 파일로 컴파일 하는 반면 include 액션은 각각 호출하여 처리된 결과만 함께 보여준다.
3) forward
forward 액션은 response.sendRedirect()와 유사하다. 다만 리디렉션은 서버가 클라이언트에게 다시 새 페이지로 접속하도록 응답을 보내고 클라이언트가 이를 따르는 방식인 반면 forward 액션은 서버에서 내부적으로 새 페이지로 이동하고 그 내용을 클라이언트에게 응답으로 전달한다. setAttribute로 속성값을 저장하는 경우 forward를 사용하는 이유도 이와 같다.
4. EL
EL(Expression Language)는 자바 객체 혹은 자바 빈 객체를 쉽게 접근하게 해준다.
- 변수 및 객체를 참조하기 편리하다.
- null 객체를 참조해도 에러가 발생하지 않는다.
<!-- EL 연산 -->
${10+20}
${true && false}
${10>=20}
<!-- 배열 및 맵 연동 -->
${lst[0]}
${myMap["name"]}
<!-- 자바 빈 접근 -->
${member.name}
5. JSTL
JSTL은 JSP Standard Tag Library의 약자로 스크립트릿을 사용하지 않고 HTML 형식으로 자바 코드를 사용할 수 있도록 만들어진 태그 라이브러리이다.
1) <c:if>
자바의 if문과 유사하다.
<c:if test=${var2}>
<p>이 내용을 출력합니다</p>
</c:if>
2) <c:forEach>
자바의 for문과 유사하다.
<!-- intArray의 내용을 num에 저장하고, 인덱스를 i에 나타냅니다 -->
<c:forEach var="num" varStatus="i" items="${intArray}">
<li> {i.index} : ${num} </li>
</c:forEach>
3) <c:set>,<c:out>
<c:set>은 변수에 값을 저장하고, <c:out>은 값을 화면에 출력한다.
<c:set var="var1" value="<h2>이 내용을 저장했습니다<h2>"/>
<c:out value="${var1}" default="값이 없습니다." excapeXml=true />
<!-- default에 값이 없을 때 출력할 내용을 저장하고, excapeXml에서 태그를 일반 문자열로 출력할지 결정합니다.
4) <c:choose>,<c:when>,<c:otherwise>
자바의 switch case문, if else문과 유사하다,
<c:choose>
<c:when test="${var1}">
<p>when이 작동하면 이 내용을 출력합니다.</p>
</c:when>
<c:otherwise>
<p>otherwise가 작동하면 이 내용을 출력합니다.</p>
</c:otherwise>
</c:choose>
5) <c:forTokens>
자바의 StringTokenizer와 유사하다.
<c:forTokens var="var" items="var1,var2,var3,var4" delims"," varStatus="i">
${var}
</c:forTokens>
<!-- delims 구분자로 item을 나누어 순서대로 출력합니다.-->
'Web' 카테고리의 다른 글
[Servlet] 서블릿이란? (0) | 2022.07.21 |
---|