티스토리 뷰
※JSP 처리 과정 ※
[ JSP 컨테이너 ] : JSP 페이지(A.jsp) -(번역)→ 서블릿프로그램(A.jsp.java) -(컴파일)→ 서블릿클래스(A.jsp.class)
└자바 코드가 삽입되어 있는 태그를 처리하고 나머지는 HTML 코드나 일반 텍스트로 간주
└태그 : 스크립트 태그(Script Tag), 디렉티브 태그(Directive Tag), 액션 태그(Action Tag)
스크립트 | 디렉티브 태그 | 액션 태그 |
프로그램 구행하는 기능 구현 | JSP페이지 처리 방법 설정 | 페이지 제어 |
1. 액션태그
서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
JSP 페이지에서 페이지와 페이지 사이 제어하거나 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나 자바 빈즈(JavaBeans) 등의 다양한 기능 제공
XML 형식 <jsp: … /> 사용
forward | include | param | 자바빈즈 |
다른페이지로 이동 | 현재 JSP페이지에 외부 파일 내용 포함 |
다른 페이지에 정보 전달 단독 사용 불가 |
자바코드 사용해 자바 클래스로 로직 작성 |
(1) forward
현재 JSP 페이지에서 다른 페이지로 이동하는 태그.
JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제하고 forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동.
<!--방법1-->
<jsp:forward page="경로/파일명"> </jsp:forward>
<!--방법2-->
<jsp:forward page="경로/파일명"/>
└page 속성값 : 현재 JSP 페이지에서 이동할 페이지의 외부 파일명.
외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL(또는 상대 경로)을 설정해야 함.
(1-1) 사용 예시
first.jsp에 second.jsp로 이동하는 액션태그 입력. 실행 시, first.jsp는 뜨지 않고 곧바로 second.jsp 뜸.
-first.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<h3>이 파일은 first.jsp입니다.</h3>
<jsp:forward page="second.jsp"/> <!-- 이동한다고 -->
<p>====first.jsp의 페이지=====</p>
</body>
</html>
-second.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<h3>이 파일은 second.jsp입니다.</h3>
Today is : <%= new java.util.Date() %>
</body>
</html>
└출력(Run, 실행)해보면 곧바로 second.jsp파일이 뜸. first.jsp 내용은 전혀 뜨지 않음. 출력 안 됨.
(2) include 액션태그
include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함.
<jsp:include page="파일명" flush="false"/>
-flush : 외부 파일로 제어 이동할 때, 현재 JSP페이지가 지금까지 출력버퍼에 저장한 결과를 출력할 것인지 여부.
기본값 false는 출력하지 않고 버퍼 비움. true는 웹페이지에 출력하고 버퍼를 비움. *일방적으로 false 사용
같은 디렉토리면 파일명만, 다른 디렉토리면 URL(또는 상대경로) 설정.
(2-1) include 사용예시) 외부파일 삽입
-first_include.jsp
<%@ 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>
<h3>이 파일은 first_include.jsp</h3>
<jsp:include page="second_include.jsp" flush="false"/>
<p>Java Server Page</p>
</body>
</html>
-second_include.jsp
<%@ 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>
<h3>이 파일은 secound_include.jsp</h3>
today is <%= new java.util.Date() %>
</body>
</html>
-출력 결과 : first.jsp 파일에 <jsp:include ...>위치(<h3>과 <p> 사이)에 second.jsp파일 삽입.
이 파일은 first_include.jsp 이 파일은 second_include.jsp today is Fri Feb 22 15:56:00 KST 2022 Java Server Page |
코드를 따라가다가 <jsp:include~/>를 만나면 안의 코드 실행했다가 다시 돌아옴.
※ include 액션 태그 VS include 디렉티브 태그
include 액션 태그 | include 디렉티브 태그 | |
<jsp:include page="" flush="" /> | <%@ include file ="" %> | |
처리시간 | 요청 시 자원 포함 | 번역 시 자원 포함 |
기능 | 별도의 파일로 요청 처리 흐름이 이동 | 현재 페이지에 삽입 |
데이터 전달 방법 |
request 기본 내장 객체나 param 액션 태그를 이용해 파라미터 전달 |
페이지 내 변수 선언 후 변수에 값 저장 |
용도 | 화면 레이아웃의 일부분을 모듈화 | 다수의 JSP웹페이지에서 공통으로 사용되는 코드나 문장 |
기타 | 동적 페이지에서 사용 | 정적 페이지에서 사용 |
-요청시? 번역시? (CH01웹프로그래밍 참고)
-모듈화?
(3) param 액션태그
다른 페이지에 정보 전달 태그.
단독 사용 불가. <jsp:forward>나 <jsp:include> 태그 내부에서 사용.
<jsp:forward>
<jsp:param name = "매개변수명1" value="매개변수값1"/>
<jsp:param name = "매개변수명2" value="매개변수값2"/>
</jsp:forwad>
(3-1) 예제) 데이터를 보내는 페이지와 데이터를 받는 페이지 설정 값 보내는 거
-보낼 데이터를 작성한 페이지(parameter01.jsp). <jsp:forward page=""/> 사용
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<h3>param Action Tag</h3>
<jsp:forward page="param01_data.jsp"><!-- 이동할 파일 -->
<jsp:param name="id" value="admin"/>
<jsp:param name="name" value='<%= java.net.URLEncoder.encode("관리자") %>'/>
</jsp:forward>
<p>Java Server Page</p>
</body>
</html>
└name은 식별자, value는 값. 호출하는 페이지에서 부른 매개변수명에 따른 매개변수값을 전달.
└안쪽에 쌍따옴표(" ")를 써서 바깥쪽엔 홑따옴표('') 사용
*입력한 한글이 깨지지 말라고 사용한 메소드
<%= java.net.URLEncoder.encode("관리자") %>
<%= java.net.URLDecoder.decode(name) %><!--name값이 관리자-->
-데이터 호출하는 페이지(param01_data.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<p>아이디 : <%=request.getParameter("id") %></p>
<%
String name = request.getParameter("name");
%>
<p>이름 : <%= java.net.URLDecoder.decode(name) %></p>
</body>
</html>
-결과
아이디 : admin 이름 : 관리자 |
└param01.jsp에서 <jsp:forward page=""> 태그로 지정된 페이지로 이동. 안에 적힌 param 데이터 넘겨줌(?)
param01_data.jsp에서는 param01.jsp에서 넘긴 데이터를 가져오기 위해 request.getParameter() 사용.
└이름의 경우 한글이기 때문에 스크립틀릿, 표현문을 적어준 것(?)
(*계속 오류가 났는데 이유가 주석 때문이었음. HTML 주석이나 JSP 주석 방법이든 둘 다 모두 있을 때 오류 났음. 주석 없으니까 괜찮았고.)
(3-1) 예제2) 값 가져오는 거 parameter02
-보낼 데이터 작성 페이지. <jsp:para name="" value=""/>
<%@ 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>
<h3>param Action Tag</h3>
<jsp:include page="param02_data.jsp" >
<jsp:param name="title" value='<%= java.net.URLEncoder.encode("오늘의 날짜와 시간") %>'/>
<jsp:param name="date" value="<%= java.util.Calendar.getInstance().getTime() %>"/>
</jsp:include>
</body>
</html>
└java.util.Calendar.getInstance().getTime() 인스턴스(객체)를 만들어 캘린더의 시간을 가져오겠다.
<%@ 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 title = request.getParameter("title");
%>
<h3><%= java.net.URLDecoder.decode(title) %></h3>
Today is:<%= request.getParameter("date") %>
</body>
</html>
-결과
오늘의 날짜와 시간 Today is : Fri Feb 11 16:42:01 KST 2022 |
└파람01 페이지에서 <jsp:include page='"/>를 만나 해당 내용을 삽입(가져옴). 파람에 의해 데이터를 내보내고 가져옴(?)
(4) 자바 빈즈 액션 태그
동적 콘텐츠 개발을 위해 자바코드 사용해 자바 클래스로 로직 작성하는 방법.
자바코드와 HTML 코드를 함께 작성하면 기능 확장이나 코드 재사용에 어려움이 있음.
→ 자바코드(로직 부분)를 따로 분리하여 작성하는 것 : 자바빈즈(JavaBeans)
(*자바코드 : JSP페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당)
(*HTML코드 : 단순 화면 출력)
웹 브라우저 | 요청/응답 ↔ |
.jsp | ↔ | 자바빈즈 | ↔ | 데이터베이스 |
(4-1) 자바빈즈 개요와 규칙
-개요
데이터 표현을 목적으로 하는 자바 클래스. 자바 클래스 작성법과 동일.
자바빈즈 : 프로퍼티(property, 데이터 담는 멤버 변수) + 메소드(method, 데이터 호출 또는 저장)
-규칙 (자바 클래스의 인터페이스 구현과 동일)
① 자바 클래스는 java.io.Serializable 인터페이스 구현.
② 기본생성자.
③ 모든 멤벼 변수 프로퍼티는 private 작성.
④ 모든 멤버 변수 프로퍼티 getter, setter() 메소드 있어야 함.
(4-2) 자바빈즈 종류 : useBean 액션 태그
JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스 선언하고 초기화
id 속성과 scope 속성을 바탕으로 자바빈즈 객체 검색하고, 객체 없으면 빈 객체 생성.
<jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위"/>
-class : package 포함한 전체 경로. 기본 생성자가 있어야 하며 추상클래스 사용 불가.
-scope : 자바빈즈가 저장되는 영역 설정. page(기본값), request | session | application 중 하나 선택.
MemberBean member = (MemberBean) request.getAttribute("member");
if(member == null){
member = new MemberBean();
request.setAttribute("member", member);
}
<!--useBean 액션 태그 사용-->
<jsp:useBean id="member" class="com.dto.MemberBean" scope="page"/>
_사용 예시) useBean 액션 태그로 오늘의 날짜 출력
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<jsp:useBean id="date" class="java.util.Date"/>
<p>
<%
out.print("오늘의 날짜 및 시각");
%>
</p>
<%= date %><!-- -->
</body>
</html>
_사용예시2) java 파일 이용해 세제곱
-Java 파일은 src/main/java 폴더에 생성
package test;
public class Calculator {
public int process(int n) {
return n*n*n;
}
}
-jsp 파일 생성 : useBean02.jsp
<%@ 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>
<jsp:useBean id="bean" class="test.Calculator"/><!-- 패키지.클래스이름 -->
<%
int m = bean.process(5);
out.print("5의 3제곱 : "+m);
%>
</body>
</html>
_사용 예제3)
-Java 파일은 src/main/java 폴더에 생성 : Person
package test;
public class Person {
private int id = 20181004;
private String name = "홍길순";
public Person() {} //기본생성자
//접근자, 설정자
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
-jsp 파일 생성 : useBean
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Action Tag</title>
</head>
<body>
<jsp:useBean id="person" class="test.Person" scope="request"/>
<p> ID : <%= person.getId() %>
<p>이름 : <%= person.getName() %>
</body>
</html>
-결과
아이디 : 20181004
이름 : 홍길순
_사용 예제 4) getter로 값 가져오기, setter()로 값 변경하기, <jsp:include > 가져오기
<%@ 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>
<jsp:useBean id="person" class="test.Person" scope="request"/><!-- 요청? -->
<p> 아이디 : <%= person.getId() %>
<p> 이 름 : <%= person.getName() %>
<%
person.setId(20200202);
person.setName("홍홍홍");
%>
<jsp:include page="useBean03.jsp"/> <!-- 경로 설정. 같은 폴더 안이라 파일 이름만 -->
</body>
</html>
-출력 결과
아이디 : 20181004 이 름 : 홍길순 아이디 : 20200202 이 름 : 홍홍홍 |
└person class에서 값을 가져옴. 이후에 값 변경. include로 값을 가져오는 방법 사용.
(4-3) 자바빈즈 종류 : setProperty 액션 태그
useBean 액션 태그와 함께 자바빈즈 setter() 메소드에 접근해 자바빈즈 멤버 변수인 프로퍼티의 값을 저장하는 태그
폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있음.
<jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티 이름" value="값"/>
-name : 자바빈즈 식별하는 이름
-property : 자바빈즈 프로퍼티 이름. *를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 setter() 메소드에 전달
-value : 변경할 자바빈즈의 프로퍼티 값. 값이 null이거나 존재하지 않는 요청 파라미터인 경우 setProperty 액션태그 무시
-param : 자바빈즈의 프로퍼티 값을 전달하는 요청파라미터 이름. param과 value를 동시에 사용할 수 없음.
_예시) 값을 가져와 설정(변경 등)
<%@ 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>
<jsp:useBean id="person" class="test.Person" scope="request"/>
<jsp:setProperty name="person" property="id" value="20182005"/>
<jsp:setProperty name="person" property="name" value="홍길동"/>
<p>아이디 : <% out.println(person.getId()); %>
<p>이 름 : <% out.println(person.getName()); %>
</body>
</html>
(4-4) 자바빈즈 종류 : getProperty 액션 태그
useBean 액션태그와 함께 자바빈즈 getter() 메소드에 접근해 자바빈즈의 멤버 변수인 프로퍼티값을 가져오는 태그
<jsp:getProperty name="자바빈즈 식별이름" property="프로퍼티 이름" />
_예제) 값을 가져오기
<%@ 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>
<jsp:useBean id="person" class="test.Person" scope="request"/>
<p> I D : <jsp:getProperty property="id" name="person"/>
<p> NAME : <jsp:getProperty property="name" name="person"/>
</body>
</html>
_예제) getProperty, setProperty 동시에 사용
<%@ 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>
<jsp:useBean id="person" class="test.Person" scope="request"/>
<jsp:setProperty property="id" name="person" value="20222005"/>
<jsp:setProperty property="name" name="person" value="홍길동"/>
<p> I D : <jsp:getProperty property="id" name="person"/>
<p> NAME : <jsp:getProperty property="name" name="person"/>
</body>
</html>
└setProperty로 값을 변경한 것을 getProperty로 가져옴.
└setProperty와 getProperty의 name은 useBean의 id임.
-결과
I D : 20222005 NAME : 홍길동 |
2. 액션태그 관련 문제
no.4
<%@ 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>
<h4>구구단 출력하기</h4>
<jsp:forward page="forward_data.jsp">
<jsp:param name="num" value="5" />
</jsp:forward>
</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>
<%
int num = Integer.parseInt(request.getParameter("num"));
for(int i=1; i<10; i++){
out.println(num+"*"+i+"="+num*i+"<br>");
}
%>
</body>
</html>
'수업 > └JSP' 카테고리의 다른 글
[CH05]내장객체 (0) | 2022.02.14 |
---|---|
[00]주석 (0) | 2022.02.13 |
[CH03]디렉티브 태그 (0) | 2022.02.11 |
[CH02]스크립트 태그 (0) | 2022.02.11 |
[CH01]JSP웹 프로그래밍 (0) | 2022.02.11 |
- Total
- Today
- Yesterday
- input type 종류
- selcetor
- scanner
- html
- css
- CascadingStyleSheet
- initialized
- html pre
- 변수
- 미디어 태그
- 외부구성요소
- html a tag
- BAEKJOON
- improt
- text formatting
- ScriptTag
- JavaScript
- html layout
- caption-side
- html base tag
- html input type
- 스크립태그
- 입력양식
- border-spacing
- A%B
- 기본선택자
- html atrribute
- empty-cell
- typeof
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 |
27 | 28 | 29 | 30 |