JSP & Servlet :: JSP 액션 태그 실습

2023. 12. 18. 23:24· 📚 Study/JSP & Servlet
목차
  1. ✔ 첫 번째 실습 (연산 결과 확인)
  2. 1) 첫 번째 방법 - 기존에 하던 대로 request.getParameter("");
  3. 2) 두 번째 방법 - jsp 액션 태그 사용
  4. 2) 세 번째 방법 - jsp 액션 태그 사용 ("*")
  5. ✔ 두 번째 실습 (간단한 기본 방명록 작성)
  6. ✔ 세 번째 실습 (기본 정보 및 이상형 출력)

✔ 첫 번째 실습 (연산 결과 확인)

📃 Calc.jsp 에서 Calc_ok.jsp 페이지로 이동하여 결과 출력

 

# Calc.java

package com.test;
public class Calc
{
// 주요 속성 구성
private int su1; //-- 피연산자1 (정수 형태)
private String op; //-- 연산자 (문자열 형태)
private int su2; //-- 피연산자2 (정수 형태)
// 생성자 정의하지 않음 (사용자 정의 생성자 없음)
// → default 생성자 자동 삽입
// getter / setter 구성
public int getSu1()
{
return su1;
}
public void setSu1(int su1)
{
this.su1 = su1;
}
public String getOp()
{
return op;
}
public void setOp(String op)
{
this.op = op;
}
public int getSu2()
{
return su2;
}
public void setSu2(int su2)
{
this.su2 = su2;
}
// 메소드 추가
public String result()
{
String result = "";
int s = 0;
if (op != null)
{
if (op.equals("+"))
s = su1 + su2;
else if (op.equals("-"))
s = su1 - su2;
else if (op.equals("*"))
s = su1 * su2;
else if (op.equals("/"))
s = su1 / su2;
result = String.format("%d %s %d = %d", su1, op, su2, s);
}
return result;
}
}

 

# Calc.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calc.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSP 액션 태그 실습</h1>
<hr>
</div>
<div>
<!-- 첫 번째 방법 -->
<!-- <form action="Calc_ok1.jsp" method="post" name="myForm"> -->
<!-- 두 번째 방법 -->
<!-- <form action="Calc_ok2.jsp" method="post" name="myForm"> -->
<!-- 세 번째 방법 -->
<form action="Calc_ok3.jsp" method="post" name="myForm">
<table class="table">
<tr>
<th>첫 번째 정수</th>
<td>
<input type="text" name="su1" class="txt">
</td>
</tr>
<tr>
<th>연산자</th>
<td>
<select name="op">
<option value="+">더하기</option>
<option value="-">빼기</option>
<option value="*">곱하기</option>
<option value="/">나누기</option>
</select>
</td>
</tr>
<tr>
<th>두 번째 정수</th>
<td>
<input type="text" name="su2" class="txt">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn" style="width: 100%;">=</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

 

1) 첫 번째 방법 - 기존에 하던 대로 request.getParameter("");

 

Calc.jsp 에서 form 태그는 아래와 같이 구성!

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

 

# Calc_ok1.jsp

<%@page import="com.test.Calc"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
// 이전 페이지(Calc.jsp)로부터 넘어온 데이터 수신
// → su1, su2, op
String strSu1 = request.getParameter("su1");
String strSu2 = request.getParameter("su2");
String op = request.getParameter("op");
int su1, su2;
su1 = su2 = 0;
String str = "";
if (strSu1.equals("") || strSu2.equals("") || strSu1==null || strSu2==null)
{
response.sendRedirect("Calc.jsp");
}
else
{
su1 = Integer.parseInt(strSu1);
su2 = Integer.parseInt(strSu2);
Calc ob = new Calc();
ob.setSu1(su1);
ob.setSu2(su2);
ob.setOp(op);
str = ob.result();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calc_ok1.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>첫 번째 방법 처리결과</h1>
<hr>
</div>
<div>
<!-- 결과 -->
<h2><%=str %></h2>
</div>
</body>
</html>

➰ 체크할 내용 ➰

1) Calc ob = new Calc();

  - 자바에서 우리가 설계한 클래스를 사용하기 위해 객체 생성이 필요하다. 

    이클립스 자동완성 기능을 사용하여 구문을 작성할 경우에는 import 구문이 자동으로 생성되지만, 

    자동 완성 기능을 사용하지 않을 경우, import 구문(@page import="cohttp://m.test.Calc")을 직접 작성하거나

    생성 구문에 직접 (cohttp://m.test.Calc ob = new cohttp://m.test.Calc()) 작성하는 것도 가능하다!

 

2) 두 번째 방법 - jsp 액션 태그 사용

Calc.jsp 에서 form 태그는 아래와 같이 구성!

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

 

# Calc_ok2.jsp

<%@page import="com.test.Calc"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="ob" class="com.test.Calc"></jsp:useBean>
<jsp:setProperty property="su1" name="ob"/>
<jsp:setProperty property="su2" name="ob"/>
<jsp:setProperty property="op" name="ob"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calc_ok2.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>두 번째 방법 처리결과</h1>
<hr>
</div>
<div>
<!-- 결과 -->
<h2><%=ob.result() %></h2>
</div>
</body>
</html>

➰체크할 내용➰

1) <jsp:useBean> : 해당 구문은 인스턴스 생성하여 import 구문을 자동으로 처리한 것과 동일한 효과를 적용하게 된다.

 

2) <jsp:setProperty>

    <jsp:setProperty property="su1" name="ob" value="<%=su1 %>"/> 해당 구문은

     request.getParameter() 메소드를 통해 넘겨받은 데이터를 Calc 클래스를 기반으로 만들어진 ob 객체에

     넘겨주기 위한 속성 지정 코드이다. 즉, ok1.jsp 의 ob.setSu1(su1); 와 같은 구문이다.

     단,!!!!

     만약, 속성 이름과 동일한 파라미터인 경우 getParameter 메소드 없이 바로 받을 수 있다. 생략 가능!

      → <jsp:setProperty property="su1" name="ob"/> 이렇게 value 값 없이 사용 가능! 동일한 경우에만!!!

 

3) <jsp:setProperty property="su1" name="ob"/> 

  ① request.getParameter() 처리(서블릿 컨테이너가,,,) → 매개변수로 전달하기 위해 데이터 수신 처리

  ② Integer.parseInt() 처리 → 매개변수를 전달하기 위한 형 변환 처리

  ③ ob.su1 → ob.setSu1() 호출 처리

      => 최종적으로 ob → Calc 기반의 ob 객체의 su1 속성에 이전페이지로부터 넘겨받은 데이터를

           적절한 타입(형) 으로 전달

 

2) 세 번째 방법 - jsp 액션 태그 사용 ("*")

Calc.jsp 에서 form 태그는 아래와 같이 구성!

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

 

# Calc_ok3.jsp

<%@page import="com.test.Calc"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="ob" class="com.test.Calc"></jsp:useBean>
<jsp:setProperty property="*" name="ob"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calc_ok3.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>세 번째 방법 처리결과</h1>
<hr>
</div>
<div>
<!-- 결과 -->
<h2><%=ob.result() %></h2>
</div>
</body>
</html>

➰체크할 내용➰

1) <jsp:setProperty property="*" name="ob"/>

    : 자바에서 선언한 변수명과 name 속성명이 동일하다면 

      <jsp:setProperty property="su1" name="ob"/>

     <jsp:setProperty property="su2" name="ob"/>
     <jsp:setProperty property="op" name="ob"/>

     위 세 줄의 코드를

     <jsp:setProperty property="*" name="ob"/> 단 한 줄의 코드로 대체할 수 있다!


✔ 두 번째 실습 (간단한 기본 방명록 작성)

📃 Guest.jsp 에서 Guest_ok.jsp 페이지로 이동하여 결과 출력

 

# GuestDTO.java

package com.test;
public class GuestDTO
{
// 주요 속성 구성
private String userName; //-- 게시물 작성자
private String subject; //-- 게시물 제목
private String content; //-- 게시물 내용
// ※ 여기에서 사용하는 변수명(속성명)의 앞 두 글자는 소문자로 작성할 것~!!! check~!!
// numScore → getNumScore() / setNumScore()
// nScore → getNScore() / setNScore()
// getnScoer() / setnScore()
// getNscore() / setNscore()
// 와 같이 setter 가 속성명을 불러오는 과정에서
// 인식이 어긋나는 경우가 발생할 수 있기 때문...
// ※ 여기에서 사용하는 변수명(속성명)은
// HTML 의 form 태그에서 name 속성으로 지정하여 사용할 것.
// 그래야 속성 데이터 수신 및 속성 매핑을
// 액션 태그를 활용하여 자동으로 처리해줄 수 있기 때문...
// getter / setter 구성
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;
}
}

 

# Guest.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Guest.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript">
function sendIt()
{
//var f = document.forms[0]; 이건 내가 한거!
var f = document.myForm;
// :
// 체크 및 검증할 내용의 코드 작성 가능...
// :
f.submit();
}
</script>
</head>
<body>
<div>
<h1>간단한 기본 방명록 작성 실습</h1>
<hr>
</div>
<div>
<form action="Guest_ok.jsp" method="post" name="myForm">
<table class="table">
<tr>
<th>이름</th>
<td>
<!-- <input type="text" name="guestName" class="txt"> -->
<input type="text" class="txt" name="userName">
</td>
</tr>
<tr>
<th>제목</th>
<td>
<!-- <input type="text" name="guestTitle" class="txt"> -->
<input type="text" class="txt" name="subject">
</td>
</tr>
<tr>
<th>내용</th>
<td>
<!-- <textarea rows="5" cols="32" name="guestContents"></textarea> -->
<textarea rows="5" cols="32" name="content"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn" style="width: 100%;" onclick="sendIt()">방명록 작성</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

➰ 체크할 내용 ➰

1) form 에 접근하는 방법

 - var f = document.forms[0]; : 문서 내의 첫 번째 form 에 접근하겠다!

 - var f = document.myForm; : 이름이 'myForm'인 form 에 접근하겠다!

 

# Guest_ok.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="ob" class="com.test.GuestDTO" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="ob"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Guest_ok.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>간단한 기본 방명록 작성 실습</h1>
<hr>
</div>
<div>
<h2>작성된 내용</h2>
<h3>이름 : <%=ob.getUserName() %></h3>
<h3>제목 : <%=ob.getSubject() %></h3>
<h3>내용 : <%=ob.getContent().replaceAll("\n", "<br>") %></h3>
</div>
</body>
</html>

 


✔ 세 번째 실습 (기본 정보 및 이상형 출력)

📃 Friend.jsp 에서 Friend _ok.jsp 페이지로 이동하여 결과 출력

 

# FriendDTO.java

package com.test;
public class FriendDTO
{
// 주요 속성 구성
private String name; //-- 이름
private String age; //-- 나이
private String gender; //-- 성별
private String[] idleType; //-- 이상형
// getter / setter 구성
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[] getIdleType() //-- check~!!!
{
return idleType;
}
public void setIdleType(String[] idleType) //-- check~!!!
{
this.idleType = idleType;
}
}

➰체크할 내용➰

1) 이상형 항목은 체크박스로 다중 선택이 가능하도록 구성하였기 때문에 여러개의 데이터가 동시에 전달된다.

     따라서 String이 아닌 String  배열로 처리해야 한다! 배열로 getter / setter 구성~!!

 

# Friend.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Friend.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<style type="text/css">
.errMsg {color: red; display: none;}
</style>
<script>
function sendIt()
{
var f = document.myForm;
if (!f.name.value)
{
alert("이름 좀 입력해주세요,,,");
f.name.focus();
return;
}
f.submit();
}
</script>
</head>
<body>
<div>
<h1>데이터 입력</h1>
<hr>
</div>
<div>
<form action="Friend_ok.jsp" method="post" name="myForm">
<table class='table'>
<tr>
<th>이름(*)</th>
<td>
<input type="text" class="txt" name="name" id="name">
<span id="nameMsg" class="errMsg">이름을 입력해주세요.</span>
</td>
</tr>
<tr>
<th>나이</th>
<td>
<input type="text" class="txt" name="age">
</td>
</tr>
<tr>
<th>성별</th>
<td>
<label>
<input type="radio" name="gender" value="남자"> 남자
</label>
<label>
<input type="radio" name="gender" value="여자"> 여자
</label>
</td>
</tr>
<tr>
<th>이상형</th>
<td>
<label>
<input type="checkBox" name="idleType" value="원빈"> 원빈
</label>
<label>
<input type="checkBox" name="idleType" value="천우희"> 천우희
</label>
<label>
<input type="checkBox" name="idleType" value="카리나"> 카리나
</label>
<label>
<input type="checkBox" name="idleType" value="정우성"> 정우성
</label>
<label>
<input type="checkBox" name="idleType" value="이동욱"> 이동욱
</label>
<label>
<input type="checkBox" name="idleType" value="한소희"> 한소희
</label>
<label>
<input type="checkBox" name="idleType" value="정해인"> 정해인
</label>
<label>
<input type="checkBox" name="idleType" value="수지"> 수지
</label>
</td>
</tr>
<tr>
<td colspan="2">
<button type="button" class="btn" style="width: 100%;" onclick="sendIt()">등록</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

➰체크할 내용➰

1) 나는 입력한 name 을 받아올 때,

    var userName = document.getElementById("name");

    userName.value 이런 식으로 사용했는데,,,!!

    var f = document.myForm;

    f.name.value  이렇게도 사용 가능!! 왜 이런 생각을 못했을까~~~ → form 태그 안에 있는 name 값을 가져와라!

 

# Friend_ok.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="ob" class="com.test.FriendDTO"></jsp:useBean>
<jsp:setProperty property="*" name="ob"/>
<%
String str= "";
if (ob.getIdleType() != null)
{
for (String temp : ob.getIdleType())
str += temp + " ";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>등록 수신결과 확인</h1>
<hr>
</div>
<div>
<h2>이름 : <%=ob.getName() %></h2>
<h2>나이 : <%=ob.getAge() %></h2>
<h2>성별 : <%=ob.getGender() %></h2>
<h2>이상형 : <%=str %></h2>
</div>
</body>
</html>

➰체크할 내용➰

1) 반복문 구성 시, body 영역에서 스크립릿 사용해서 출력할 수도 있고

    DTO에서 메소드 정의 후, 메소드만 가져와서 출력할 수도 있고

    jsp:setProperty 사용할 때, 이상형 출력 형태로 다시 덮어쓴 후 ob.getIdleType() 이렇게 출력할 수도 있고

    방법은 매우 다양했다!

 

저작자표시 (새창열림)
  1. ✔ 첫 번째 실습 (연산 결과 확인)
  2. 1) 첫 번째 방법 - 기존에 하던 대로 request.getParameter("");
  3. 2) 두 번째 방법 - jsp 액션 태그 사용
  4. 2) 세 번째 방법 - jsp 액션 태그 사용 ("*")
  5. ✔ 두 번째 실습 (간단한 기본 방명록 작성)
  6. ✔ 세 번째 실습 (기본 정보 및 이상형 출력)
'📚 Study/JSP & Servlet' 카테고리의 다른 글
  • JSP & Servlet :: EL과 JSTL 개념정리
  • JSP & Servlet :: Servlet(서블릿) 개념과 실습(ServletConfig, ServletContext)
  • JSP & Servlet :: JSP 액션 태그와 자바 빈즈(JAVA Bean)
  • JSP & Servlet :: DAO와 DTO를 활용한 데이터베이스 연결 실습 (성적 처리 프로그램)
bono-hye
bono-hye
공부를 합시다👩🏻‍💻bono-hye 님의 블로그입니다.
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JSP & Servlet :: JSP 액션 태그 실습
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.