목차

Chaper 1-4 스크립트 요소

Chapter 07 액션 태그

`jsp:include`

`jsp:forward`

`jsp:useBean`, `jsp:setProperty`, `jsp:getProperty`

태그

#JAVA

#JSP

JSP 기초

2021년 11월 27일 01:33

22-thumbnail-image

이 글은 골든래빗 출판사로부터 책을 제공받아 작성했습니다.

http://www.yes24.com/Product/Goods/105016218 (저는 yes24를 좋아합니당^__^)

어제 기분좋게 책을 받고 처음부터 끝까지 훑어봤다

시작하기에 앞서 간단한 평이다

JSP에 대해서 정말 자세하게 알려주는 책이다. 또한 웹 개발에 있어서 기초적인 부분들을 정말 잘 설명해주는 책이다. 내가 부족했던 부분까지 채워줄 수 있었고, jsp안에서 정말 많이 쓰이는 EL태그와 JSTL에 대해 정리가 잘되어있었다. JSP부터 시작해 MVC 패턴으로 넘어오는 방식이 인상깊었다.

내가 앞으로 정리해볼것은 JSP기초, EL태그, JSTL을 간단하게 정리해볼것이다.


Chaper 1-4 스크립트 요소

  • 선언부 (Declaration)
    • 멤버 변수, 메서드를 선언
    • <%! 멤버 변수, 메서드 %>
  • 스크립틀릿 (Scriptlet)
    • 요청을 받을 때 실행돼야 할 자바 코드를 작성하는 영역
    • 서블릿으로 변환 시 _jspService() 메서드 내부에 기술된다
    • 즉, 다른 메서드를 선언할 수 없다
    • <% 자바 코드 %>
  • 표현식 (Expression)
    • 변수의 값을 웹 브라우저 화면에 출력할 때 사용
    • <%= 자바 표현식 %>

내가 따로 작성한 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP EX</title>
</head>
<body>
	<!-- HTML 주석 : 소스보기에서 보인다 -->
	<%-- JSP 주석 : 소스보기에서 보이지 않는다 --%>

	<%
	// java 문법 시작 --> java 주석
	// scriptlet
	// - 메인 함수에 정의 하는 느낌
	int sum = 0;
	for (int i = 1; i <= 10; i++) {
		sum += i;
	}
	%>

	<b>합계 : </b>
	<input type="text" value="<%=sum%>">

	<hr>

	<%!
	// 선언문 Declaration
	private int num = 100;

	public String getHelloWorld() {
		return "Hello World!";
	}
    %>

	<%-- 표현식 Expression --%>
	<%=getHelloWorld()%>
	
	<hr>
	
	<%=num + 200%>

</body>
</html>

응용 코드

<%@ 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>

	<%
		String nickname = request.getParameter("nickname");
		String hobby = request.getParameter("hobby");
		String animal = request.getParameter("animal");
		String[] foodArr = request.getParameterValues("food"); // 선택 항목이 여러 개일 때 getParameterValues();
		String fruit = request.getParameter("fruit");		
	%>

	<table border=1>
		<tr>
			<th>별명</th>
			<td><%= nickname %></td>
		</tr>
		<tr>
			<th>취미</th>
			<td><%= hobby %></td>
		</tr>
		<tr>
			<th>좋아하는 동물</th>
			<td><%= animal %></td>
		</tr>
		<tr>
			<th>선호하는 음식</th>
			<td>
				<%
				if(foodArr != null){
					String result = "";
					for (String food : foodArr) {
						result += food + ", ";
					}
					
					// 맨 뒤에 붙은 , 제거
					result = result.substring(0, result.length() - 2);
					out.print(result);
				}
			%>
			</td>
		</tr>
		<tr>
			<th>좋아하는 과일</th>
			<td><%= fruit %></td>
		</tr>
	</table>

</body>
</html>

Chapter 07 액션 태그

액션 태그 : JSP의 표준 태그

특징

  • XML 문법을 따름
  • 반드시 종료 태그를 사용
  • 액션 태그 사이에 주석을 사용하면 에러남

크게 4가지의 종류

  1. jsp:include : 외부 파일을 현재 파일에 포함
  2. jsp:forward : 다른 페이지로 요청을 넘김
  3. jsp:userBean, jsp:setProperty, jsp:getProperty : 자바빈을 생성하고 값을 설정, 추출
  4. jsp:param : 다른 페이지로 매개변수 전달 (include, forwerd와 함께 사용)

이제 아래에 하나씩 설명

jsp:include

  • 중요한 부분 - !페이지 자체를 현재 페이지에 포함시킨 후 컴파일 진행!
  • 실무에서 주로 템플릿으로 많이 쓰인다
  • 항상 있어야되는 부분을 나눈뒤 페이지 자체를 포함시킨뒤 뿌려준다

개인적으로 작성한 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%-- <jsp:include와 같은거임 -->
	<%@ include file="../WEB-INF/ex/templet/header.jsp" %>
	
	<%@ include file="../WEB-INF/ex/templet/sideNav.jsp" %>
	<table>
		<thead>
			<tr>
				<th>#</th>
				<th>title</th>
				<th>content</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>1</td>
				<td>안녕하세요</td>
				<td>안녕하세요 초보 개발자입니다</td>
			</tr>
		</tbody>
	</table>
	
	<%@ include file="../WEB-INF/ex/templet/footer.jsp" %>
</body>
</html>

jsp:forward

얘는 예제 먼저 보는게 편하다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	pageContext.setAttribute("pAttr", "김유신"); // 결과값 안넘어감
	request.setAttribute("rAttr", "계백"); // 결과값 넘어감
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<jsp:forward page="../WEB-INF/ex/templet/main.jsp" />
	
</body>
</html>
  • 포워드된 페이지는 이전 페이지와는 서로 다른 페이지이므로, 페이지별로 생성되는 page영역은 공유되지 않는다
  • 한편 포워드는 요청을 전달하므로 request영역에는 공유된다

jsp:useBean, jsp:setProperty, jsp:getProperty

<jsp:useBean id="자바빈 이름" class="사용할 패키지와 클래스명" scope="저장될 영역" />
  • id : 자바빈 객체의 이름 지정
  • class : 자바빈 객체의 실제 패키지명과 클래스명을 지정
  • scope : 자바빈이 저장될 내장 객체 영역을 지정
<jsp:setProperty name="자바빈 이름" property="속성명(멤버 변수)" value="설정할 값" />
  • name : 자바에서 클래스안, 인스턴스 변수를 지정하는 것과 같음 / 어떤 자바빈인지
  • property : 자바빈의 멤버 변수명 지정 / cv 생성
  • value : 멤버 변수 설정 값 / cv 값 설정
<jsp:getProperty name="자바빈 이름" property="속성명(멤버 변수)" />

예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%-- 자바빈(클래스) 생성 --%>
	<jsp:useBean id="person" class="common.Persom" scope="request" />
	
	<%-- 속성(변수) 지정 --%>
	<jsp:setProperty property="person" name="name" value="홍채민" />
	<jsp:setProperty property="person" name="age" value="19" />
	
	<%-- 속성(변수) 읽기 --%>
	<h4>이름 : <jsp:getProperty property="person" name="name" /></h4>
	<h4>나이 : <jsp:getProperty property="person" name="age" /></h4>

</body>
</html>