Dev/JSP & Servlet

JSP - 액션태그를 활용하여 페이지 만들기

창문닦이 2019. 2. 19. 23:22

액션태그

JSP 액션 태그는 클라이언트 혹은 서버에게 어떠한 동작을 행하도록 명령을 내리는 태그로 XML 태그와 같은 모양을 가지며,

JSP에서 제공하는 특별한 기능을 사용하기 위한 태그이다. 실행 시 자바 코드로 자동 변환된다.

JSP 페이지 안에서 자바 빈즈(JavaBeans)를 사용할 수 있도록 하는 액션 태그와 페이지를 실행 제어할 수 있도록 하는 액션 태그로 나눌 수 있다.

 

자바빈즈(JavaBeans)의 활용과 관련된 액션 태그

<jsp:useBean> : JSP 페이지 내에서 사용할 자바빈즈 객체를 생성

<jsp:setProperty> : 생성된 자바빈즈 객체의 멤버 변수 값을 지정

<jsp:getProperty> : 생성된 자바빈즈 객체의 특정 멤버 변수 값을 반환

 

JSP의 실행 제어와 관련된 액션 태그

<jsp:forward> : 다른 JSP 페이지로 처리 제어권을 넘기고 다른 사이트로 이동할 때 사용한다.

<jsp:include> : 다른 JSP 페이지를 호출하여 실행한 후 돌아옴

 

<jsp:param> :  다른 JSP 페이지 실행 시 파라미터를 전달하기 위해 사용

액션태그를 활용한 계산기

1. 계산기 입력페이지 - calc.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>

</head>

<body>

<form action="calc_ok.jsp" method="post" name="myForm">

<input type="text" name="su1"/>

<select name="oper" >

<option value="+">더하기</option>

<option value="-">빼기</option>

<option value="*">곱하기</option>

<option value="/">나누기</option>

</select>

<input type="text" name="su2"/>

<input type="submit" value=" = "/>

</form>

</body>

</html>

2. 계산기 출력페이지 - calc_ok.jsp

<%@page import="com.calc.CalcVO"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

 

//JSP

//변수명 java의 class파일과 동일하다면 생략해도 오류 생기지 않음

//int su1 = Integer.parseInt(request.getParameter("su1"));

//int su2 = Integer.parseInt(request.getParameter("su2"));

//String oper = request.getParameter("oper");

 

//DB를 사용하지 않았으므로 vo클래스의 객체 생성

CalcVO vo = new CalcVO();

 

//setter를 이용해서 변수값 할당

vo.setSu1(su1);

vo.setSu2(su2);

vo.setOper(oper);

 

String str = vo.toString();

 

%>

 

<!-- 액션태그 -->

<!-- vo는 해당페이지 안에서만 사용이 되므로 충돌이 일어나지 않는다 -->

<!-- setter의 이름과 변수의 이름이 동일하면 value 입력을 생략해도 실행된다. -->

<!-- 변수의 개수가 몇개가 되든 모든 속성들을 setter를 실행하도록 함 -->

<jsp:useBean id="vo" class="com.calc.CalcVO" scope="page"></jsp:useBean>

<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.toString() %>

</body>

</html>

3. VO 클래스 생성

package com.calc;

public class CalcVO {

 

//변수의이름은 input태그의 이름과 동일하게 사용해야 한다.

private int su1;

private int su2;

private String oper;

 

public int getSu1() {

return su1;

}

public void setSu1(int su1) {

this.su1 = su1;

}

public int getSu2() {

return su2;

}

public void setSu2(int su2) {

this.su2 = su2;

}

public String getOper() {

return oper;

}

public void setOper(String oper) {

this.oper = oper;

}

 

public String toString(){

String str = "";

int result = 0;

 

if(oper!=null){

 

if(oper.equals("+")){

result = su1+su2;

}else if(oper.equals("-")){

result = su1-su2;

}else if(oper.equals("/")){

result = su1/su2;

}else if(oper.equals("*")){

result = su1*su2;

}

str = String.format("%d %s %d = %d",su1,oper,su2,result);

}

return str;

}

}

 

4. 실행 결과

 

 


액션태그 활용한 방명록 

1. 방명록 입력페이지 - guest.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>

</head>

<script type="text/javascript">

function sendIt(){

 

var f = document.myForm;

 

//검증코딩

if(f.userName.value==""){

alert("이름을 입력하세요!");

f.name.focus();

return;

}

if(f.subject.value==""){

alert("제목을 입력하세요!");

f.subject.focus();

return;

}

if(f.content.value==""){

alert("내용을 입력하세요!");

f.content.focus();

return;

}

f.submit();

}

</script>

<body>

<form action="guest_ok.jsp" name="myForm" method="post">

이름 : <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 %>일"/><br/>

<input type="button" value="글올리기" onclick="sendIt()"/><br/>

</form>

</body>

</html>

2. 방명록 출력페이지 - 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:useBean>

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

3. VO 클래스 생성

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;

}

}

 

4. 실행 결과

 

 


액션태그 활용 - 다양한 입력데이터 전송하기

1. 입력페이지 - friend.jsp

input태그의 입력값이 여러개로 배열로 저장하여 출력해야 되는 경우

<%@ 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="여자" checked="checked"/>여자<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>

2. 출력 페이지 - friend_ok.jsp

전달하는 데이터가 배열의 형태로 요소들이 여러개인 경우 반복문을 활용하면 된다.

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

%>

<jsp:useBean id="vo" class="com.friend.FriendVO" scope="page"></jsp:useBean>

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

3. VO 클래스 생성

package com.friend;

public class FriendVO {

private String name;

private String age;

private String gender ;

private String[] type = new String[4];   //체크박스 여러개의 값을 중복체크 가능. 배열로 저장해야 함

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String 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;

}

4. 실행 결과