액션태그
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. 실행 결과
'Dev > JSP & Servlet' 카테고리의 다른 글
JSP - 성적처리 페이지 만들기 (0) | 2019.02.19 |
---|---|
이클립스 플러그인 설치(퀀텀DB) (0) | 2019.02.19 |
JSP - 캐릭터 인코딩, 디코딩 (0) | 2019.02.19 |
JSP - 세션과 input태그를 통한 데이터 전송 비교 (0) | 2019.02.19 |
JSP - scope과 attribute (0) | 2019.02.18 |