본문 바로가기
JSP/Java Script

2024_07_15_월

by 알케니브 2024. 7. 15.

오늘의 코딩순서

(폴더: och08)

  • clothing.class + clothing.html + clothing.jsp (현장HW)
  • Emp.class + emp.html + emp.jsp (현장 HW) + emp1.jsp + empResult.jsp  (0712_Product.class~ productInfo.jsp까지 참고해서 복습)
  • forward.html + forward.jsp (현장HW) + forwardResult.jsp (현장HW) /+ forward2.jsp 
  • movie.html + movie1.jsp (현장HW) + movieResult.jsp (현장HW)
  • song.html (현장HW) +  song1.jsp (현장HW) + songResult.jsp (현장HW)
  • ⭐⭐⭐(총 집합판) person.html + +Person.class + person1.jsp + person2.jsp + personResult.jsp 
    + person3.jsp + person4.jsp

(폴더: och09_jstl)  Tip) 자동완성 많이 이용하기

  • num.html + catch.jsp 
  • num2.html + choose.jsp
  • color.jsp + colorResult.jsp

오늘의 코딩 포인트

(폴더: och08)

  • clothing.class

여기까지 쓰고, 중괄호 안의 코드 바로 아래줄에서 source>> getter and setter로 자동완성 시키기

package och08;

public class Clothing extends Product{
	private String color;
	private int size;
    
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}
	

}

 

  • clothing.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>의류정보를 입력하세요</h2>
	<form action="clothing.jsp">
		코드 : <input type="text"	name="code"		required="required"><p>
		이름 : <input type="text" 	name="name"		required="required"><p>
		가격 : <input type="number" name="price"	required="required"><p>
		색깔 : <input type="text" 	name="code"		required="required"><p>
		크기 : <input type="number" name="size"		required="required"><p>
		<input type="submit" value="확인">	
	</form>

</body>
</html>
  • clothing.jsp (현장HW) (0712_book1.jsp 참고)

↓↓↓ 효율적인 코딩을 위해 마지막에 / 치고 ctrl+space해서 </jsp:useBean> 생략하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- // 현장Work01
	// Bean  : pt, class : Clothing
	// 모든 property 저장
	// 이동:  productInfo.jsp		-->
	<jsp:useBean id="pt"	class="och08.Clothing" scope="request"/>
							<!-- class는 java Resources에서 가져오기 -->
							<!-- scope=page의 값을 안 정해주면 현재페이지밖에 되지 않음 -->
	<jsp:setProperty property="*" name="pt"/>
	<jsp:forward page="productInfo.jsp"></jsp:forward>

</body>
</html>

 


  • Emp.class ==> (0712_Product.class~ productInfo.jsp까지 참고해서 복습)
package och08;

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private int sal;
	private String hiredate;
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public String getHiredate() {
		return hiredate;
	}
	public void setHiredate(String hiredate) {
		this.hiredate = hiredate;
	}
	
}
  • emp.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>사원정보 입력</h2>
	<form action="emp.jsp">
		사번 : <input type="number"		name="empno1"	required="required"><p>
		이름 : <input type="text"		name="ename2"	required="required"><p>
		업무 : <input type="text"		name="job"		required="required"><p>
		급여 : <input type="number"		name="sal"		required="required"><p>
		입사일 : <input type="date"		name="hiredate"	required="required"><p>
		<input type="submit" value="입력 완료">	
	</form>

</body>
</html>
  • emp.jsp (현장 HW) (이거 못하면 나머지공부 해야함) (0712_ hunresult2.jsp 참고)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 1.Expresson hiredate Disp
	2.EL hiredate Disp -->

<%
	String hiredate = request.getParameter("hiredate");
%>
Expression	입사일1:<%=hiredate %><p>
EL			입사일2: ${param.hiredate }	<!-- 스크립틀릿이 필요없음 -->


</body>
</html>


  • emp1.jsp (현장HW)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>사원정보 입력</h2>
	<form action="emp1.jsp">
		사번 : <input type="number"		name="empno1"	required="required"><p>
		이름 : <input type="text"		name="ename2"	required="required"><p>
		업무 : <input type="text"		name="job"		required="required"><p>
		급여 : <input type="number"		name="sal"		required="required"><p>
		입사일 : <input type="date"		name="hiredate"	required="required"><p>
		<input type="submit" value="입력 완료">	
	</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- // 현장Work02
	// Bean  : emp, class : Emp
	// 모든 property 저장
	// 이동: empResult.jsp
	//        사번 : 
	//        이름 : 
	//        업무 : 
	//        급여 : 
	//       입사일 :    -->
<%
	int empno1 = Integer.parseInt(request.getParameter("empno1"));	
	/* 이거 안해주면 empno1값을 찾지 못하여 오류가 남 */
	String ename2 = request.getParameter("ename2");	
%>
<%-- Expression	입사일1:<%=empno1 %><p>	 --%>
	
	<jsp:useBean id="emp" class="och08.Emp" scope="request"/>
	<%-- <jsp:setProperty property="*" name="emp"/> 거의 이렇게 하거나--%> 
	<jsp:setProperty property="empno"		name="emp" value="<%=empno1 %>"/>
	<jsp:setProperty property="ename"		name="emp" value="<%=ename2 %>"/>
	<jsp:setProperty property="job"			name="emp"/>
	<jsp:setProperty property="sal"			name="emp"/>
	<jsp:setProperty property="hiredate"	name="emp"/>
	<!-- useBean을 사용하지 않고 setProperty를 사용하면
	  한줄 한줄 다 써야하고, 스크립트릿 값도 하나하나 다 매겨야함-->
	<jsp:forward page="empResult.jsp"></jsp:forward>

</body>
</html>

 

  • empResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="emp" class="och08.Emp" scope="request"/>
	<h2>직원정보</h2>
	사번 : <jsp:getProperty property="empno" name="emp"/><p>
	이름 : <jsp:getProperty property="ename" name="emp"/><p>
	업무 : <jsp:getProperty property="job" name="emp"/><p>
	급여 : <jsp:getProperty property="sal" name="emp"/><p>
	입사일 : <jsp:getProperty property="hiredate" name="emp"/><p>	
	
</body>
</html>


  • forward.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// 1. id idName ==> 이름을 입력하시요
// 2. id idAddr ==> 어디 사는데?
function chk()	{
	var idName = document.getElementById("idName");	//객체 선언
	var idAddr = document.getElementById("idAddr");
	if	(!idName.value)	{	//객체의 value값 매기기
		alert("이름을 입력하시오");
		idName.focus;
		return false;
	}	
	if	(!idAddr.value)	{
		alert("어디 사는데 ?");
		idAddr.focus;
		return false;
	}	
	return true;
}
</script>
</head>
<body>
<h2>이름과 주소를 입력하세요</h2>
	<!-- <form action="forward.jsp" onsubmit="return chk()"> -->
	<form action="forward2.jsp" onsubmit="return chk()">
		이름 : <input type="text" name="name" id="idName"><p>
		주소 : <input type="text" name="addr" id="idAddr"><p>
		<input type = "submit" value="확인">
	</form>
	
</body>
</html>

  • forward.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>처리결과</h2>
<!--   
// 1.  표준Tag                  forwardResult.jsp로 이동 
// 2. forwardResult.jsp        Expression 표기법      
//      XX님 KKK에 사시는 군요 -->
	<jsp:forward page="forwardResult.jsp"></jsp:forward>

</body>
</html>
  • forwardResult.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String name = request.getParameter("name");
	String addr = request.getParameter("addr");
%>
<%=name %>님 <%=addr %>에 사시는군요

</body>
</html>

  • forward2
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="forwardResult.jsp">
	<jsp:param value="누구세요" name="name"/>	<!-- 이름 기본값 정하기 -->
</jsp:forward>

</body>
</html>

  • movie.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>좋아하는 영화는</h2>
	<form action="movie1.jsp" name="frm">
		이름 :	<input type = "text" name="name"><p>
		영화 :	<select name="movie" multiple="multiple">
        		<!-- multiple: 하나 이상의 값을 선택할 수 있게 하는 속성 -->
				<option value="배트맨">배트맨</option>		
				<option value="파묘">파묘</option>		
				<option value="범죄도시4">범죄도시4</option>		
				<option value="하이재킹">하이재킹</option>		
				<option value="원더랜드">원더랜드</option>		
				</select>
				<input type="submit" value="확인">
	</form>

</body>
</html>
  • movie1.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  movieResult.jsp로 이동 
// 2.   movieResult.jsp        Expression 표기법      
//      XX님이 좋아하는 영화는 k1, k2 이군요 -->
	<jsp:forward page="movieResult.jsp"></jsp:forward>
	
</body>
</html>
  • movieResult.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String name = request.getParameter("name");
	String[] movie = request.getParameterValues("movie");
	String movies = "";
	if (movie !=null)	{
		for	(int i = 0; i < movie.length; i++)	{
			if	(i == (movie.length -1)) movies += movie[i];	//2개 미만일때 여기 충족
			else movies += movie[i] + ", ";						//2개 이상일때여기 충족
		}
	}
%>
<%=name %>님이 좋아하는 영화는 <%=movies %>이군요
</body>
</html>


  • song.html (현장HW)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function chk()	{
		if(!frm.name.value)	{
			alert("이름 ?")
			frm.name.focus;
			return false;
		}
		var movieTrue = false;
		// 현장 Work
		// DOM song : check가 하나도 없다면 좋아하는 음악이 하나도 없어, return false
		for (var i = 0; i < frm.song.length; i++)	{
			if (frm.song[i].checked==true)	{
				movieTrue = true;
				break;
			}
		}
		if	(!movieTrue)	{
			alert("좋아하는 음악이 하나도 없어");
			return false;
		}
		return true;
	}

</script>
</head>
<body>
<h2>좋아하는 음악은 </h2>
	<form action="song1.jsp" name="frm" onsubmit="return chk()">
		이름 : <input type="text" name="name"><p>
		음악 : <br>
			<input type="checkbox" name="song" value="레몬">레몬<br>
			<input type="checkbox" name="song" value="염라">염라<br>
			<input type="checkbox" name="song" value="낙하">낙하<br>
			<input type="checkbox" name="song" value="뱃노래">뱃노래<br>
			<input type="checkbox" name="song" value="조깅">조깅<p>
		<input type="submit" value="확인">
	</form>
</body>
</html>
  • song1.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  movieResult.jsp로 이동 
// 2.   songResult.jsp        Expression 표기법      
//      XX님이 좋아하는 음악은 YY 이군요 -->
<jsp:include page="songResult.jsp"></jsp:include>
</body>
</html>
  • songResult.jsp (현장HW)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String name = request.getParameter("name");
	String[] song = request.getParameterValues("song");
	String songs = "";
	if (song != null)	{
		for	(int i = 0; i < song.length; i++)	{
        //<=가 아닌 <, 만약 <=로 하면 0의 값까지 포함시켜 오류가 난다

			songs += song[i] + " ";				
		}
	}	
%>
<%=name %>님이 좋아하는 음악은 <%=songs %> 이군요
</body>
</html>


⭐⭐⭐총 집합

  • person.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function chk()	{
		if	(!frm.name.value)	{
			alert("이름 ?");
			frm.name.focus;
			return false;
		}
		if	(!frm.gender.value)	{
			alert("성별 ?");
			frm.gender.focus;
			return false;
		}
		if	(!frm.age.value)	{
			alert("나이 ?");
			frm.age.focus;
			return false;
		}
		if	(isNaN(frm.age.value))	{
			alert("숫자 ?");
			frm.age.focus;
			frm.age.value = "";
			return false;
		}
		return true;	
	}
</script>
</head>
<body>
<h2>인적사항 입력</h2>
	<form action="person1.jsp" name="frm" onsubmit="return chk()">
		이름 : <input type="text" name="name"><p>
		성별 : <input type="text" name="gender"><p>
		나이 : <input type="text" name="age"><p>
		<input type="submit" value="확인">
	</form>
</body>
</html>

  • Person.class
package och08;

public class Person {
	private String	name;
	private String	gender;
	private int		age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}
  • person1.jsp⭐⭐⭐⭐⭐ (오류 발생 버전)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="person" class="och08.Person" ></jsp:useBean>
	<!-- Java코딩으로 따지면 Person person = new Person();과 같은 뜻이다 -->
	<jsp:setProperty property="name" name="person" param="name"/>
		<%-- person.setName("<%=name %>")과 같은 뜻이다 --%>
	<jsp:setProperty property="gender" name="person" value="남자"/>
		<!-- 무엇을 입력해도 setter로 지정해준 value값이 입력됨 -->
        <!-- age를 set하지 않아서 무엇을 입력해도 값이 0이 나와버린다 -->
	
	<h2>인적 사항</h2>
	이름 : <jsp:getProperty property="name"		name="person"/><p>	<!-- person.getName()과 같은 뜻 -->
	성별 : <jsp:getProperty property="gender"	name="person"/><p>
	나이 : <jsp:getProperty property="age"		name="person"/>
	
</body>
</html>

 

  • person2.jsp (현장HW) (값을 고정하는 버전)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  person Bean 생성
                 1)    name    : 홍길동 , 
                 2)    gender  : 남자
                 3)     age    : 23
// 2. personResult.jsp        jsp:getProperty  표기법      
//     1)  <h2>인적 사항</h2>	
       2) 이름 : 
       3) 성별 : 
       4) 나이 :  -->
	<jsp:useBean id="person" class="och08.Person" scope="request"/>
	<jsp:setProperty property="name"	name="person" value="홍길동"/>
	<jsp:setProperty property="gender"	name="person" value="남자"/>
	<jsp:setProperty property="age"		name="person" value="23"/>
	
	<jsp:forward page="personResult.jsp"></jsp:forward>

</body>
</html>
  • personResult.jsp (현장HW) 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>인적 사항</h2>
	<jsp:useBean id="person" class="och08.Person" scope="request"></jsp:useBean>
	이름 : <jsp:getProperty property="name"		name="person"/><p>
	성별 : <jsp:getProperty property="gender"	name="person"/><p>
	나이 : <jsp:getProperty property="age"		name="person"/>
</body>
</html>

 

 

 

 

↓↓↓ name value 고정 아닌 버전

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  person Bean 생성
                 1)    name    : 홍길동 , 
                 2)    gender  : 남자
                 3)     age    : 23
// 2. personResult.jsp        jsp:getProperty  표기법      
//     1)  <h2>인적 사항</h2>	
       2) 이름 : 
       3) 성별 : 
       4) 나이 :  -->
	<jsp:useBean id="person" class="och08.Person" scope="request"/>
	<jsp:setProperty property="name"	name="person" param="name"/>	<!-- 고정값 아닌 버전 -->
	<jsp:setProperty property="gender"	name="person" value="남자"/>
	<jsp:setProperty property="age"		name="person" value="23"/>
	
	<jsp:forward page="personResult.jsp"></jsp:forward>

</body>
</html>
  • person3.jsp (현장HW) (expression 버전)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 1.  표준Tag                  person Bean 생성
         setProperty
                 1)    name    :  <%=name %>
                 2)    gender  :  <%=gender %>
                 3)     age    :  <%=age %>
2. personResult.jsp        jsp:getProperty  표기법     --%> 
<%
	String name 	= request.getParameter("name");
	String gender	= request.getParameter("gender");
	int age			= Integer.parseInt(request.getParameter("age"));
%>
	<%-- 내가 한 버전
	이름 : <%=name %><br>
	성별 : <%=gender %><br>
	나이 : <%=age %><br> --%>
	<jsp:useBean id="person" class="och08.Person" scope="request"></jsp:useBean>
    
    <jsp:setProperty property="name"	name="person" value="<%=name %>"/>
    <jsp:setProperty property="gender"	name="person" value="<%=gender %>"/>
    <jsp:setProperty property="age"		name="person" value="<%=age %>"/>
    
	<jsp:forward page="personResult.jsp"></jsp:forward>
</body>
</html>

  • person4.jsp (현장HW) (param 버전)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  person Bean 생성
         setProperty param
                 1)    name    :  name
                 2)    gender  :  gender  
                 3)     age    :  age 
// 2. personResult.jsp        jsp:getProperty  표기법 -->
<%
	String name 	= request.getParameter("name");
	String gender	= request.getParameter("gender");
	int age			= Integer.parseInt(request.getParameter("age"));
%>
	<%-- 이름 : <%=name %><br>
	성별 : <%=gender %><br>
	나이 : <%=age %><br> --%>
	<jsp:useBean id="person" class="och08.Person" scope="request"></jsp:useBean>
    
<%--	내가 한 버전
     <jsp:setProperty property="name"	name="person" value="${param.name}"/>
    <jsp:setProperty property="gender"	name="person" value="${param.gender }"/>
    <jsp:setProperty property="age"		name="person" value="${param.age }"/> --%>
    
    <jsp:setProperty property="name"	name="person" param="name"/>
    <jsp:setProperty property="gender"	name="person" param="gender"/>
    <jsp:setProperty property="age"		name="person" param="age"/>
    
	<jsp:forward page="personResult.jsp"></jsp:forward>
</body>
</html>

  • person5.jsp (현장HW) ( 전체 한 번에 넘기는 버전)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--   
// 1.  표준Tag                  person Bean 생성
         setProperty : 전체설정 
// 2. personResult.jsp        jsp:getProperty  표기법 -->
	<jsp:useBean id="person" class="och08.Person" scope="request"></jsp:useBean>

	<jsp:setProperty property="*" name="person"/>

	<jsp:forward page="personResult.jsp"></jsp:forward>
</body>
</html>


(폴더: och09_jstl)   Tip) 자동완성 많이 이용하기

>>lib에 jakarta파일(꼭 최신버전!) 두개 추가하고, webapp에 cstl과 jstl 폴더 추가함

jakarta.servlet.jsp.jstl-api-2.0.0.jar
0.04MB
jakarta.servlet.jsp.jstl-2.0.0.jar
3.53MB

  • num.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>두 숫자입력</h2>
	<form action="catch.jsp">
		첫 번째 숫자 : <input type="text" name="num1"><p>
		두 번째 숫자 : <input type="text" name="num2"><p>
		<input type="submit" value="확인">
	</form>
</body>
</html>
  • catch.jsp
    Tip)
    • Java의 try-catch문 참고하기
    • <c:  :  core library
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>두 숫자입력</h2>
	<form action="catch.jsp">
		첫 번째 숫자 : <input type="text" name="num1"><p>
		두 번째 숫자 : <input type="text" name="num2"><p>
		<input type="submit" value="확인">
	</form>
</body>
</html>

  • ↓↓↓ArithmeticException: 정수를 0으로 나누기하면 발생하는 에러

  • ↓↓↓ NumberFormatException 오류: 숫자형 포맷 오류 발생, 문자를 숫자로 변경을 시도하다가 에러가 발생하는 경우


  • num2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>숫자 입력</h2>
	<form action="choose.jsp">
		숫자 : <input type="text" name="num1"><p>
		<input type="submit" value="확인">	
	</form>
</body>
</html>
  • choose.jsp
    Tip)
    • choose: Java의 switch와 유사함
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- num2에서 호출 -->
	<h2>인사말 Switch 유사</h2>
	<c:choose>
		<c:when test="${param.num1==0 }">안녕하세요</c:when>
		<c:when test="${param.num1==1 }">Hi Hi</c:when>
		<c:when test="${param.num1==2 }">아리가또</c:when>
		<c:otherwise>헐! 누구</c:otherwise>
	</c:choose>
	
</body>
</html>


  • color.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String[] color={"red","orange","yellow","green","blue","navy","violet"};
		request.setAttribute("color", color);
	%>
	<jsp:forward page="colorResult.jsp"></jsp:forward>
    <!-- 위의 request.set을 받아서 colorResult로 이동함 -->
</body>
</html>
  • colorResult.jsp
    Tip)
    • <c:forEach>: Java의 for문과 비슷한 기능을 함
      <c:forEachitems="${리스트가 받아올 배열이름}"
    • var="for문 내부에서 사용할 변수"
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 내가 "c"로 선언해두고 사용하겠다, 따라서 아래도 다 c:로 시작할 것 + c로 하기를 권장함 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:forEach var="col" items="${color }">
				<!-- color라는 객체가 {"red","orange","yellow","green","blue","navy","violet"}를 받겠다는 뜻 -->
		<font color="${col }">야호</font>	<!-- Java의 향상형 for문과 같음 -->
	</c:forEach>
</body>
</html>


수업교재

8. Java Bean 표준액션

1. 정의 및 개요

JavaBean이란?

  • JSP에서 객체를 가져오기 위한 기법, 관련 있는 데이터를 저장하는 클래스, DTO(Data Transfer Object) 라고도 함
  • 자바로 작성된 컴포턴트들, 일반적으로 Class를 말함
    JSP 프로그래밍에는 DTO나 DAO(Data Access Object)클래스의 객체를 JSP 페이지에서 사용하기 위해 사용함
  • 클래스이므로 기존의 자바 클래스를 작성하는 방법과 규칙이 동일함
    JavaBean의 경우 데이터를 담을 property(멤버변수)와 데이터를 가져오거나 세팅하는 기능을 하는 메서드로 구성됨
항목 DTO VO
개념 데이터 전송 객체로, 주로 데이터베이스와 애플리케이션 간의 데이터 전송을 위해 사용됨
데이터 전송을 목적으로 하여 데이터베이스의 엔터티와 유사한 구조를 가짐

VO는 값 객체로, 불변성(값이 변경되지 X )을 가지며 주로 비즈니스 로직에서 사용됨
불변성의 보장을 위해 생성자를 사용
사용예시   주로 비즈니스 로직에서 사용되며, 값을 객체로 사용함
목적 Data 전달 값 자체를 표현함
동등성 필드값이 같아도 같은 객체가 아님 필드값이 같으면 같은 객체로 취급함
가변성 있음 없음
Logic getter/setterd 외 로직이 필요하지 않음 getter 외 로직 적용을 해도 무방함

2. 종류

1. 표준 액션 standard Action

  • JSP 페이지에서 바로 사용할 수 있음
  • 태그 이름 앞에 jsp가 붙음
  • 표준 액션을 사용하면 자바 코드를 작성하지 않고도 자바빈 객체를 만들수 있음
  • 기본적으로 class와 id라는 두 개의 Attribute를 써야함
  • 종류
    1. <jsp:include>
      • JSP 페이지에서 다른 웹 자원(JSP 페이지, HTML 문서 등)을 포함시키고자 할 때 사용하는 표준 액션
        이 표준 액션에는 포함할 웹 자원의 URL을 지정하는 page Attribute를 써야함
      • 사용법: <jsp:include page="aaa.html"/> ==> aaa.html을 include하는 표준액션
        JSP 페이지 안에 이 표준 액션이 있으면, 웹 컨테이너는 JSP 페이지를 처리할 떄 이 태그의 위치에 aaa의 내용을 대신 출력함
    2. < jsp:forward>
      • JSP 페이지에서 다른 JSP 페이지로 제어를 넘기고자 할 때 사용하는 표준 액션
        이 표준 액션도 include와 마찬가지로  page Attribute를 이용해서 해당 JSP 페이지의 URL을 지정해야 함
      • 사용법: <jsp:forward page="aaa.jsp"/> ===> aaa.jsp로 실행의 제어를 넘기는 표준 액션
    3. <jsp:useBean>
      • JavaBean 객체를 생성하기 위한 태그
      • 사용법: <jsp:useBean id="Bean이름" class="JavaBean 클래스 이름" scope="범위"/>
      • 태그의 속성
        • id: JSP 페이지에서 JavaBean 객체에 접근할 떄 사용하는 이름
        • class: 패키지 이름을 포함한 JavaBean 클래스의 완전한 이름을 입력해야 함
        • scope: JavaBean 객체가 저장될 영역을 지정함
          • scope 속성을 사용할 경우 속성의 값에 따라 서로 다른 기본 객체 종류
            • page: pageContext(JSP 페이지의 정보를 저장함, 모든 영역의 속성에 대한 접근이 가능함)기본 객체
            • request: request(웹 브라우저의 HTTP 요청 정보를 저장함)기본 객체
            • session: session(웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장함)기본 객체
            • application: application(웹 어플리케이션이 실행되고 있는 동안 속성을 사용할 수 있음
              모든 이가 공유할 수 있는 가장 큰 영역의 데이터)기본 객체
    4. <jsp:setProperty>
      • JavaBean 객체의 property 값을 저장하기 위해 사용되는 태그
      • JavaBean 객체를 만든 다음에는 set 메서드를 이용해서 객체의 프로퍼티 값을 설정할 수 있음
      • <jsp:setProperty> 표준 액션을 이용하면 set 메서드를 직접 호출하지 않고도 property 값을 설정할 수 있음
      • 사용법: <jsp:setProperty name="Bean이름" property="프로퍼티 이름" value="프로퍼티에 저장할 값"/>
        name 속성은 JavaBean 객체의 이름을 명시하는 곳으로 필수 속성이라 생략이 불가능함
    5. <jsp:getProperty>
      • 생성된 JavaBean 객체에서 저장된 property 값을 사용하기 위해 사용되는 태그
      • JavaBean 객체의 property 값을 가져오려면 get 메서드를 이용하면 됨
      • <jsp:getProperty> 표준 액션을 사용하면 get 메서드를 직접 호출하지 않고도 프로퍼티 값을 가져올 수 있음 
      • 사용법: <jsp:getProperty name="Bean 이름" property="프로퍼티 이름"/>
        name 속성은 JavaBean 객체의 이름을 명시하는 곳으로 필수 속성이라 생략이 불가능함
        property 속성은 프로퍼티 명을 기술하는 곳으로 필수 속성이라 생략이 불가능함

2. 커스텀 액션 custom action: 별도의 라이브러리를 설치해야만 사용할 수 있음, 태그 이름 앞에 jsp 이외의 접두어가 붙음

 

3. 사용 목적

1. JSP 페이지의 로직 부분을 분리해서 코드를 재사용(reuse)함으로 프로그램의 효율을 높이는 것

  • 3R: 완성된 소프트웨어 프로그램을 기반으로 소프트웨어의 생산성을 극대화하는 기법
    • Reverse-Engineering역공학:
      기존 개발된 시스템의 CASE를 이용하여 사양서, 설계서 등의 문서로 추출하는 작업, 
      개발 단계를 역으로 올라가 기존 개발된 시스템의 코드나 데이터로부터 설계 명세서나 요구 분석서 등을 도출하는 작업
    • Re-Engineering재공학: 기존 시스템을 널리 사용되는 프로그래밍 표준에 맞추거나, 고수준의 언어로 재구성하거나, 타 하드웨어에서 사용할 수 있도록 변환하는 작업
    • Re-use:
      이미 개발되어 기능, 성능, 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용
      다른 시스템에 이용되고 있는 소프트웨어를 파악하고 재구성하여 새로운 시스템에 적용하기 위한 작업

2. 현재 모든 프로그래밍에서 모듈화(componenet화)가 대세
이유: 프로그램의 모듈화는 한 번 잘 작성해놓은 코드를 재사용하므로 프로그램의 작성기간이 단축되고, 이미 실시스템에 올렸던 코드를 사용하므로 코드의 안정성이 보장되어 유지 보수에도 좋음

 

4. 사용 방법 및 설계 규약

JavaBean은 다른 클래스와 달리 규정되어 있는 규약에 따라 작성해야 하며, 이에 맞지 않을 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴 수 있음

public class 클래스명	{	//클래스명 대문자로 시작함!!
private String 변수이름;
private int 변수이름;

public String get변수이름() {
		return 변수이름;
	}
	public void set변수이름(String 변수이름) {
		this.변수이름 = 변수이름;
	}
  • 멤버 변수마다 별도의 get/set 메서드가 존재해야함
    get 메서드는 파라미터가 존재하지 않아야하며, set 메서드는 반드시 하나 이상의 파라미터가 존재해야 함
  • beans 컴포넌트의 속성은 반드시 읽기 또는 쓰기가 가능해야 함
    즉 get 메서드와 set 메서드를 구현해야 함 ==> 단, 읽기 전용인 경우 get 메서드만 정의 가능
  • 생성자는 파라미터가 존재하지 않아야 하며 인자 없는 생성자가 반드시 있어야 함
  • property(멤버 변수)는 값을 저장하기 위한 필드로 접근 제어자는 private로 선언해서 작성
     get/set 메서드의 접근 제어자는 public으로 정의되어야 하고, 클래스의 접근 제어자는 public으로 정의함
  • get 메서드 작성방법:
    저장된 property명을 사용하는 메서드이므로 getId()와 같은 파라미터는 필요없음
    저장된 값을 사용해야 하기 때문에 반드시 return 타입을 기술해야함, 또한 void이외의 return이 기술되면 해당 메소드의 마지막에 return 문을 반드시 기술해야하며 하지 않으면 에러가 발생함
  • set 메서드 작성방법:
    property에 값을 저장해야 하므로 파라미터로부터 값을 받아오는 setId와 같은 형태
    값을 저장만하는 메서드이므로 return 타입이 void임
  • this는 자기 자신의 클래스를 가리키는 reference임
    property명과 파라미터명이 같으면 프로그램에 혼란을 주기 때문에 property명 앞에는 this가 붙음
    넘어온 id 파라미터의 값을 id property에 저장하는 부분인 this.id가 property임

5. 문제점

  1. JSP 페이지에 화면 표출 부분과 로직들이 혼재함으로서 JSP 페이지를 이해하기 어려워짐, 이로 인해 디자이너와의 협업이 어려워질 수 있음
  2. JSP 페이지에 화면 표출 부분과 로직들이 혼재한 형태의 코드는 재사용하기가 어려움, 이러한 문제점을 해결하기 위해 반복적인 일을 피하기 위해서는 JSP 페이지 내에 있는 반복적인 코드를 따로 작성하여 재사용할 필요가 있음
  3. JSP 페이지와 로직을 분리해서 로직을 모듈화하는 작업이 필요함, 이를 위해서 JavaBean의 사용이 필요함
  4. JSP 페이지의 주요 기능 중 하나는 데이터를 보여주는 기능, 그러나 데이터를 보여주는 기능과 단순하게 화면을 출력하는 부분이 하나의 JSP에 뒤섞여 있으면 기능을 확장하거나 코드를 재사용하기가 매우 어려워짐
    => 때문에 JSP에서는 데이터를 JavaBean이라는 클래스에 담아서 값을 보여줌

 

'JSP > Java Script' 카테고리의 다른 글

2024_07_17_수  (0) 2024.07.17
2024_07_16_화  (0) 2024.07.16
2024_07_12_금  (0) 2024.07.12
2024_07_11_목  (0) 2024.07.11
2024_07_10_수  (0) 2024.07.10