BackEnd/Servlet

[Servlet] JSP 02

JJoajjoa 2023. 10. 5. 13:22

 

 

 

 

JSP

<table>
	<% for(Member m : mlist) { %>
            <tr>
                <td> <%=m.name %> </td>
                <td> <%=m.email %> </td>
            </tr>
	<% } %>
</table>

▲ 가독성 너무 안좋음

 

▶ JSP의 구조적 문제를 해결하기 위해 커스텀 태그를 기반으로 하는 JSTL 및 EL이 도입되었음

<table>
	<c:forEach var="m" item="${mlist}">
    	    <tr>
        	<td> ${m.name} </td>
                <td> ${m.email} </td>
            </tr>
	</c:forEach>
</table>

 

단점)

화면 구조를 서버에서 빌드(SSR)하는 구조이기 때문에 모든 실행이 톰캣과 같은 서블릿 컨테이너를 통해야 함

<c:forEach> 태그나 ${m.name}, <%@ page.. %> 와 같은 JSP 구문은 클라이언트에서 해석할 수 없음

 

 

 

액션 태그

JSP에서 작업을 수행하는 XML 스타일 태그

JSP에서 객체 생성과 공유, 페이지 이동과 전달, 태그 파일 작성 등에 필요한 기능을 제공하는 일종의 커스텀태그

 

<jsp:include>

현재 JSP에 다른 리소스를 동적으로 포함

현재 JSP에 x

<jsp:include page="파일명" flush="false" />
<jsp:include page="header.jsp" />

<%@include>와이 차이점: 액션은 실행된 결과를 가지고 감 (구분없이 사용해도 상관없을때가 많음)

구분 include 액션태그 include 디렉티브태그
처리시간 요청 시 자원 포함 번역 시 자원 포함
기능 별도의 파일로 요청 처리 흐름을 이동 현재 페이지에 삽입
데이터
전달방법
request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터 전달 페이지 내의 변수를 선언한 후 변수에 값을 저장
용도 화면 레이아웃의 일부분을 모듈화할때  다수의 jsp 웹페이지에서 공통으로 사용되는 코드나 저작권과 같은 문장을 포함하는 경우
기타 동적 페이지에 사용 정적 페이지에 사용

 

<jsp:forward>

요청을 다른 리소스로 전달하거나 리다이렉트함

다른 페이지로의 이동과 같은 페이지 흐름을 제어함

request와 response 객체를 포함해 다른 페이지로 포워드함

<jsp:forward page="파일명"/>
<jsp:forward page="nextPage.jsp" />

 

<jsp:param>

include, forward 등의 부모태그와 함께 사용하기 위한 쿼리 문자열을 추가할 수 있음

 

 

<jsp:text>

CDATA라는 섹션을 정의함

내부 텍스트는 파싱되지 않음

 

<jsp:fallback>

플로그인 액션이 실패할 때 처리할 내용

 

<jsp:params>

여러 개의 <jsp:param> 을 그룹화 하는데 사용

 

Java Bean  빈 객체

스프링 컨테이너가 관리하는 재사용 가능한 컴포넌트

jsp:useBean, jsp:setProperty, jsp:getProperty 등을 통해 사용 가능

>> 쟤네가 빈 객체를 생성하고 속성 관리를 함

<jsp:useBean id="자바빈즈식별이름" class="자바빈즈이름" scope="범위" />
<jsp:useBean id="newBean" class="com.examle.NewBean" />
<jsp:setProperty name="newBean" property="*" />
<jsp:getProperty name="newBean" property="name" />

 

 

 

 

 

 

커스텀 태그 ★

개발자가 직접 정의하여 사용하는 JSP 태그

 

표준 HTML 태그 이외에 사용자 정의 태그를 자바 프로그램 형태로 구현하고,

JSP를 서블릿 형태로 변환할 때 함께 처리될 수 있도록 하는 서블릿 규격 중 하나

 

1. 태그 핸들러 클래스 작성

태그에 기능을 구현하는 자바 클래스를 작성

javax.servlet.jsp.tagext.Tag 인터페이스 혹은

javax.servlet.jsp.tagext.BodtTag 인터페이스를 구현함 (택 1)

 

2. 태그 라이브러리 디스크립터(TLD) 파일 생성

TLD 파일은 XML 형식으로 태그핸들러, 클래스에 대한 정보를 담고있음

 

3. JSP에서 커스텀 태그 사용

<%@  taglib %> 를 사용하여 TLD 파일을 참조

 

 

▶이렇게

▼ SimpleTagHandler.java (클래스 생성)

Hello World를 찍어내는 태그 만들어줌

 

mytags.tld (TLD 파일 생성)

더보기

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd "         version="2.0">

 

▼ JSP 에서 커스텀태그 사용

 

 

 

 

JSTL  JSP Standard Tag Library

커스텀 태그의 집합

 

<c: tagName> 형태

XML 스타일의 문법을 가짐

 

 

 

 

EL  Expression Language

표현식 언어

자바 객체에 쉽게 접근 가능

${expression} 형태

주로 변수 값에 접근하거나 출력하는데 사용

 

▶ 다운 받아서 써야함 ㅜ

▼ 방법 

더보기

1. https://tomcat.apache.org/download-taglibs.cgi

초록 네모에 저거 두개 따운

 

2. 다운 받은거 드래그해서 저따 넣기

 

3. 확인해보깅

 

 

 

 

 

 

 

Core 태그 라이브러리

<c:>

 

1. 조건문

<c:if>

<c:choose>

<c:when>

<c:otherwise>

 

2. 반복문

<c:forEach>

<c:forTokens>

 

3. 기타

<c:set> 변수 선언 및 값 할당

<c:remove> 변수 삭제

<c:catch> 예외 처리

 

 

 

 

Fomatting 태그 라이브러리

<fmt: >

 

Locale 설정 태그

<fmt:setLocale>

현재 페이지에서 사용할 로케일을 지정함

>> 페이지 별로 다르게 설정해줄 수도 있음 

 

메세지 번들 태그

<fmt:setBundle>

번들에서 locale에 맞는 메세지를 지정함

 

메세지 출력 태그

<fmt:message>

번들에서 locale에 맞는 메세지를 출력함

 

형변환 태그

<fmt:formatNumber>

>> 위에 로케일 따라서 원화나 달러 등으로 바꿔줄 수 있움

 

날짜시간 형식 태그

<fmt:formatDate>

 

 

 

 

 

SQL 태그

<sql: >

 

데이터베이스 연결 설정 태그

<sql:setDataSource>

>> var 안에 있는 이름으로 setDataSource 객체 생성함

 

쿼리 실행 태그

<sql:query>

SQL SELECT문을 실행하고 결과를 가져옴

 

쿼리 결과

 

기타

<sql:update> 인섩 업뎃 딜릿 등 쿼리 실행

<sql:param> 쿼리에 파라미터 값을 전달

 

 

 

 

 

 

XML 태그 라이브러리

<:x>

XML 문서를 처리하기 위한 기능

 

XML 파싱 태그

<x:parse>

XML 문서나 문자열을 파싱하여 DOM 객체로 만듦

 

XPath 검색 태그

<x:out>

 

XML 조작 및 반복문 태그

<x:set>

<x:if>

<x:forEach>

 

 

 

예시

.jsp 파일

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> JSTL & EL </title>
</head>
<body>
	<%-- 함 해보기 --%>
	<c:set var="name" value="JJo" />
	<c:set var="age" value="20" />
	
	<p> 이름 : ${name} </p>
	<p> 나이 : ${age} </p>
	
	<c:if test="{age >= 20}">
		<p> 성인인데영 </p>
	</c:if>
	
	<c:set var="numbers" value="1,2,3,4,5" />
	
	<ul>
		<c:forEach items="${numbers}" var="number">
			<li>${number}</li>
		</c:forEach>
	</ul>
	
	
	<%-- 20살 넘은애들만 출력 --%>
	<%-- 1. 배열사용 --%>
	<%! 
		String[] names = {"쪼랭", "부추"};
		int[] ages = {19, 21};
	%>
	<%
		request.setAttribute("names", names);
		request.setAttribute("ages", ages);
	%>
	<c:forEach var="i" begin="0" end="<%= names.length -1 %>">
		<c:if test="${ages[i] >= 20}">
			<p>이름: ${names[i]}</p>
			<p>나이: ${ages[i]}</p>
		</c:if>		
	</c:forEach>
	
	<%-- 2. 맵 사용 --%>
	<%@ page import="java.util.HashMap" %>
	<%@ page import="java.util.Map" %>
	<%!
		Map<String, Integer> people = new HashMap<>();
		{
			people.put("몽", 19);
			people.put("청", 21);
		}
	%>
	<%
		request.setAttribute("people", people);
	%>
	<c:forEach var="entry" items="${people.entrySet()}">
		<c:if test="${entry.value >= 20}">
			<p> ${entry.key}, ${entry.value} </p>
		</c:if>
	</c:forEach>
	
</body>
</html>

 

▼ 결과물