본문 바로가기
STUDY/JSP

Jsp 6일차 - 액션태그

by Anne of Green Galbes 2019. 2. 19.

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>

<jsp:setProperty property="*" name="vo"/>
com.bguest.GuestVO input에서 넘어온 name과 같은 이름의 변수가 있으니 알아서 넣어라
VO에 넣은 값은 get을 사용하여 화면에 보여줄 수 있다.


결과

① 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

댓글