1. 액션태그
① JSP 액션 태그는 클라이언트 혹은 서버에게 어떠한 동작을 행하도록 명령을 내리는 태그이다.
② XML 태그와 같은 모양을 가지며, JSP에서 제공하는 특별한 기능을 사용하기 위한 태그이다.
③ 실행 시 자바 코드로 자동 변환된다.
자비빈즈(JavaBeans)의 활용과 관련된 액션 태그 JSP페이지 안에서 자바 빈즈를 사용할 수 있도록 하는 액셔태그 |
|
<jsp:useBean> |
JSP 페이지 내에서 사용할 자바빈즈 객체를 생성 |
<jsp:setProperty> |
생성된 자바빈즈 객체의 멤버 변수 값을 지정 |
<jsp:getProperty |
생성된 자바빈즈 객체의 특정 멤버 변수 값을 반환 |
JSP의 실행 제어와 관련된 액션 태그 페이지를 실행 제어할 수 있도록 하는 액션태그 |
|
<jsp:forward> |
다른 JSP 페이지로 처리 제어권을 넘기고 다른 사이트로 이동할 때 사용 |
<jsp:include> |
다른 JSP 페이지를 호출하여 실행한 후 돌아옴 |
<jsp:param> | 다른 JSP 페이지 실행 시 파라미터를 전달하기 위해 사용 |
◈ 빈이란?
반복적으로 코드를 따로 작성하여 재사용하기 위해 만들어진 클래스이다.
빈은 속성과 메서드로 이루어져 있으며, 데이터의 처리를 담당한다.
(Java - VO(DTO), JSP - JavaBean)
◈ 자바빈 이용의 목적
JSP 페이지가 화면 표출 부분과 로직들이 혼재함으로 인한 복잡한 구성을 가급적 피하고, JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로써 프로그램의 효율을 높이는 것이 자바빈의 이용 목적이다.
④ calc_ok.jsp를 액션태그를 사용하여 작성
<%@page import="com.calc.CalcVO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
String oper = request.getParameter("oper");
%>
<jsp:useBean id="vo" class="com.calc.CalcVO" scope="page" />
<jsp:setProperty property="su1" name="vo" value="<%=su1 %>" />
<jsp:setProperty property="su2" name="vo" value="<%=su2 %>" />
<jsp:setProperty property="oper" name="vo" value="<%=oper %>"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=vo.toString() %>
</body>
</html>
<jsp:useBean id=” ” class=” ” scope=” “/> 사용
○ id : JSP페이지에서 자바빈 객체에 접근할 때 사용할 이름을 지정
○ class : 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력
○ scope : 자바빈 객체를 저장할 영역을 지정한다.
page, request, session, application / default값은 page
▶ <jsp:useBean id="vo" class="com.calc.CalcVO" scope="page" />
scope="page" : vo는 이 페이지를 나가면 인식이 되지 않아 충돌이 일어나지 않는다
vo.setSu1(su1); ▶ property : su1 / name : vo
<jsp:setProperty property="su1" name="vo" value="<%=su1 %>" />
<jsp:setProperty property="su2" name="vo" value="<%=su2 %>" />
<jsp:setProperty property="oper" name="vo" value="<%=oper %>"/>
▶ <jsp:setProperty property="*" name="vo"/>도 가능 → VO의 변수명이랑 input의 name이 값기 때문에
2. VO를 이용한 데이터 전달(1) - 자비 빈즈의 활용과 관련된 액션 태그
① GuestVO
※ VO의 변수명의 input의 name과 같아야 한다.
package com.bguest;
public class GuestVO {
private String userName;
private String subject;
private String content;
private String created;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
}
② bguest.jsp
<%@page import="java.util.Calendar"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
Calendar cal = Calendar.getInstance();
int nowYear = cal.get(Calendar.YEAR);
int nowMonth = cal.get(Calendar.MONTH)+1;
int nowDay = cal.get(Calendar.DAY_OF_MONTH);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function sendIt() {
var f= document.myForm;
f.submit();
}
</script>
</head>
<body>
<form action="guest_ok.jsp" method="post" name="myForm">
이름:<input type="text" name="userName"></br>
제목:<input type="text" name="subject"></br>
내용:<input type="text" name="content"></br>
<input type="hidden" name="created" value="<%=nowYear%>년<%=nowMonth%>월<%=nowDay%>일">
<input type="button" value="글 올리기" onclick="sendIt();">
</form>
</body>
</html>
◈ <input type="hidden" name="created" value="<%=nowYear%>년<%=nowMonth%>월<%=nowDay%>일">
hidden은 화면에 보이지 않는다.
◈ 데이터 전송 방법 3. hidden
getParameter로 넘어온 데이터를 겉모습을 숨겨서 받음
③ guest_ok.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="vo" class="com.bguest.GuestVO" scope="page"/>
<jsp:setProperty property="*" name="vo"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
이름:<%=vo.getUserName() %></br>
제목:<%=vo.getSubject() %></br>
내용:<%=vo.getContent() %></br>
날짜:<%=vo.getCreated() %></br>
</body>
</html>
결과
① guest.jsp
② guest_ok.jsp
날짜는 hidden으로 전달한 값
3. VO를 이용한 데이터 전달(1) - 자비 빈즈의 활용과 관련된 액션 태그
① FriendVO
※ VO의 변수명의 input의 name과 같아야 한다.
package com.friend;
public class FriendVO {
private String name;
private int age;
private String gender;
private String[] type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String[] getType() {
return type;
}
public void setType(String[] type) {
this.type = type;
}
}
② friend.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function sendIt() {
var f = document.myForm;
f.submit();
}
</script>
</head>
<body>
<form action="friend_ok.jsp" method="post" name="myForm">
이름:<input type="text" name="name"></br>
나이:<input type="text" name="age"></br>
성별:<input type="radio" name="gender" value="남자" checked="checked">남자
<input type="radio" name="gender" value="여자">여자</br>
이상형:</br>
<input type="checkbox" name="type" value="청순">청순</br>
<input type="checkbox" name="type" value="가련">가련</br>
<input type="checkbox" name="type" value="근육질">근육질</br>
<input type="checkbox" name="type" value="핸썸">핸썸</br>
<input type="button" value="등록" onclick="sendIt();">
</form>
</body>
</html>
◈radio와 checkbox의 이름은 같아야 한다.
checkbox는 중복값 허용된다. → 값을 받을 때 배열을 이용하여 받아야한다.
③friend_ok.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="vo" class="com.friend.FriendVO" />
<jsp:setProperty property="*" name="vo"/>
<%
String str = "";
if(vo.getType()!=null) {
for(String temp : vo.getType())
str += temp + " ";
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
이름:<%=vo.getName() %></br>
나이:<%=vo.getAge() %></br>
성별:<%=vo.getGender() %></br>
이상형:<%=str %></br>
</body>
</html>
◈ checkbox의 값은 배열을 이용하여 받는다.
String str = "";
if(vo.getType()!=null) {
for(String temp : vo.getType())
str += temp + " ";
}
결과
① friend.jsp
② friend_ok.jsp
4. 포워드 - JSP의 실행 제어와 관련된 액션 태그
① for1.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
String eng = "test";
String kor = "테스트";
String han = URLEncoder.encode(kor, "UTF-8");
%>
<jsp:forward page="for2.jsp">
<jsp:param value="<%=eng %>" name="eng"/>
<jsp:param value="<%=han %>" name="kor"/>
</jsp:forward>
◈ <jsp:forward>
JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용
<jsp:forward page="이동할 페이지" />
◈ 실행 흐름
① 웹 브라우저 요청을 for1.jsp에 전달
② for1.jsp는 <jsp:forward> 액션태그를 실행
③ <jsp:forward> 액션 태그를 실행하면 요청 흐름이 for2.jsp로 이동
④ for2.jsp가 응답 결과를 생성
⑤ for2.jsp가 생성한 결과가 웹 브라우저에 전달
◈ <jsp:param>
<jsp:forward> 액션 태그로 이동할 페이지에 파라미터를 추가로 전달할 수 있음
파라미터를 이용해서 데이터를 추가하기 때문에 String 타입의 값만 전달 할 수 있음
◈ String han = URLEncoder.encode(kor, "UTF-8");
포워드 방식으로 데이터를 전달할 때 한글을 깨져서 전달
한글이 깨지는 상황을 방지
② for2.jsp
<%@page import="java.net.URLDecoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String eng = request.getParameter("eng");
String han = request.getParameter("kor");
String kor = URLDecoder.decode(han, "UTF-8");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
포워딩 된 데이터</br>
eng:<%=eng%></br>
kor:<%=kor%></br>
</body>
</html>
파라미터로 넘어온 값은 request.getParameter를 이용하여 받는다.
◈ String kor = URLDecoder.decode(han, "UTF-8");
포워드 방식으로 데이터를 전달할 때 한글을 깨져서 전달
한글이 깨지는 상황을 방지
'STUDY > JSP' 카테고리의 다른 글
Jsp 6일차 - 간단한 웹을 만드는 방법 (0) | 2019.02.19 |
---|---|
Jsp 6일차 - 포워드 (0) | 2019.02.19 |
Jsp 6일차 - 전송방식 (0) | 2019.02.19 |
Jsp5일차 - Get방식과 Post방식 (0) | 2019.02.15 |
Jsp 4일차 - buffer (0) | 2019.02.15 |
댓글