OpenFrameWork

오픈프레임워크_Day43

px 2015. 5. 14. 19:17
### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도 
,,, : 같은 항목 내에 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
DTO 패턴, VO 패턴, DO 패턴
디자인 패턴에서 데이터 보관만 하는 클래스
Data Transfer Object - 데이터를 전송하기 좋게 포장한 객체
Value Object
Data Object
----------------------------------- 
(4) Bean의 사용범위(Context영역에 따른)
          1) page
          2) request
          3) session
          4) application

(5) Bean의 Property 종류
          1) 참-거짓 프로퍼티
                    public boolean isValid(){
                              ...
                              return true or return false;
                    }
          2) 인덱스 프로퍼티

(6) Good Tip!
----------------------------------- 
* <jsp:setProperty 에서 param, value 차이
param은 form태그 안에 request 내용을 받음
form에 사용되는 태그의 name이 <jsp:setProperty property의 이름과 같으면 생략가능
value는 특정 값만 전달해서 제한적임
-----------------------------------
* getProperty 융통성
is로 시작하는 메서드도 가능
-----------------------------------
/BeanApp/WebContent/sessionScope.jsp
에서 restart 메서드로 버튼이 눌렸는지 아닌지 true, false 값이 전달 됨
-----------------------------------
*Custom 태그
JSTL은 custom 태그 라이브러리
----------------------------------- 
###################################
2. 설정 및 그 밖에
-----------------------------------
----------------------------------- 
###################################
3. 소스코드 또는 실습 
-----------------------------------
3-1
Workspace : ~\JSP\EclipseWork 
/BeanApp/WebContent/requestScope.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%request.setCharacterEncoding("euc-kr");%>
<jsp:useBean id="req" class="bean.request.RequestBean" scope="request">
     <jsp:setProperty name="req" property="header" param="header"/>
     <jsp:setProperty name="req" property="footer" param="footer"/>
     <%-- 아래와 같이 생략가능, 생략하면 form태그 안에서 property와 같은 이름을 찾아 매칭 -->
     <%-- <jsp:setProperty name="req" property="header"/> --%>
     <%-- <jsp:setProperty name="req" property="footer"/> --%>
</jsp:useBean>
<jsp:include page="inc/header.jsp"/>
<form method="post" action="requestScope.jsp">
     머릿말에 들어갈 내용 :<br/>
     <textarea rows="2" cols="60" name="header"></textarea>
     <br/><br/>
     꼬릿말에 들어갈 내용 :<br/>
     <textarea rows="2" cols="60" name="footer"></textarea>
     <br/><br/>
     <input type="submit" value="새로고침"/>
</form>
<jsp:include page="inc/footer.jsp"/>
</body>
</html>
-----------------------------------  
3-2
Workspace : ~\JSP\EclipseWork 
/BeanApp/WebContent/inc/footer.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<hr/>
[꼬릿말]<br/>
<jsp:useBean id="req" class="bean.request.RequestBean" scope="request"/>
<jsp:getProperty property="footer" name="req"/>
-----------------------------------  
3-3
Workspace : ~\JSP\EclipseWork 
/BeanApp/WebContent/inc/header.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
[머릿말]<br/>
<jsp:useBean id="req" class="bean.request.RequestBean" scope="request"/>
<jsp:getProperty property="header" name="req"/>
<hr/>
----------------------------------- 
3-4
Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/request/RequestBean.java

package bean.request;

public class RequestBean {
     private String header,footer;
     public String getHeader() {
          return header;
     }
     public void setHeader(String header) {
          this.header = header;
     }
     public String getFooter() {
          return footer;
     }
     public void setFooter(String footer) {
          this.footer = footer;
     }
}
----------------------------------- 
3-5
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/sessionScope.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>세션을 이용한 타이머 예제</h1>
<jsp:useBean id="timer" class="bean.session.TimerBean" scope="session">
세션 시작입니다. 타이머 작동을 시작합니다.
</jsp:useBean>
<br/><br/>

bean의 프로퍼티를 마지막으로 접근한 뒤에 경과한 시간은
<jsp:getProperty property="elapsedTimeAfterLastAccess" name="timer"/>
초입니다.
<br/><br/>

<jsp:setProperty property="restart" name="timer" param="restart"/>
<%-- 아래 처럼 생략가능 --%>
<%--<jsp:setProperty property="restart" name="timer"/> --%>

타이머 리셋한 뒤의 경과된 시간은
<jsp:getProperty property="elaspedTime" name="timer"/>
초입니다.
<br/><br/>

타이머 시작한 뒤의 경과된 시간은
<jsp:getProperty property="elapsedTimeAfterInst" name="timer"/>
초입니다.
<br/><br/>

<form action="sessionScope.jsp" method="post">
     <input type="submit" name="check" value="경과시간 확인"/>&nbsp;&nbsp;
     <input type="submit" name="restart" value="타이머 리셋"/>
</form>
</body>
</html>
<!-- 
name                              r/w          data type          explain
----------------------------------------------------------
elapsedTime                         r          long               타이머 리셋 후 경과시간
restart                              w          boolean               타이머 리셋
elapsedTimeAfterInst          r          long               객체 생성 후 경과시간
elapsedTimeAfterLastAccess     r          long               마지막 접근 후 경과시간
-->
----------------------------------- 
3-6
Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/session/TimerBean.java

package bean.session;

public class TimerBean {
     private long startTime; //타이머를 리셋한 시간
     private long instTime; //전체 시간
     private long lastAccessTime; //프로퍼티에 접근한 이후에 경과된 시간
     
     public TimerBean() {
          startTime = System.currentTimeMillis( );
          lastAccessTime = startTime;
          instTime = startTime;
     }
     // 타이머가 리셋한 뒤에 경과된 시간
     public long getElaspedTime(){
          lastAccessTime = System.currentTimeMillis( );
          return (lastAccessTime - startTime)/1000;
     }
     // 리셋 버튼을 눌렀을 때
     public void setRestart(boolean restart){
          lastAccessTime = System.currentTimeMillis( );
          startTime = lastAccessTime;          
     }
     // 전체시간
     public long getElapsedTimeAfterInst(){
          lastAccessTime = System.currentTimeMillis( );
          return (lastAccessTime - instTime)/1000;
     }
     
     public long getElapsedTimeAfterLastAccess(){
          long current = System.currentTimeMillis( );
          long elapsed = (current-lastAccessTime);
          lastAccessTime = System.currentTimeMillis( );
          return elapsed/1000;
     }
}
----------------------------------- 
3-7 
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/applicationScope.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>전체 방문자 수 확인</h1>
<%-- 새로 고침 누를때마다 방문자 증가 하도록 만들기 --%>
<jsp:useBean id="counter" class="bean.application.CounterBean" scope="application">
     <jsp:setProperty name="counter" property="newVisit" value="1"/> 
</jsp:useBean>
<jsp:setProperty property="restart" name="counter" />
<jsp:setProperty property="refresh" name="counter" />
<h2>전체 방문자 수 : <jsp:getProperty property="visitCount" name="counter"/> </h2>

<form action="applicationScope.jsp" method="post">
     <input type="submit" name="refresh" value="새로 고침"/>&nbsp;&nbsp;
     <input type="submit" name="restart" value="카운터를 0으로 리셋"/>&nbsp;&nbsp;
</form>
</body>
</html>
-----------------------------------  
3-8 
Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/application/CounterBean.java

package bean.application;

public class CounterBean {
     private int count;
     public CounterBean() {
          count = 0;
     }

     public int getVisitCount() {
          return count;
     }

     public void setNewVisit(int count) {
          this.count = count;
     }
     
     public void setRestart(boolean b) {
          this.count = 0;
     }
     
     public void setRefresh(boolean b) {
          this.count++;
     }
}
-----------------------------------  
3-9 
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/parking.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%request.setCharacterEncoding("euc-kr");%>
<jsp:useBean id="car" class="bean.index.CarDto"/>
<jsp:useBean id="parking" class="bean.index.ParkingBean" scope="application"/>
<jsp:setProperty property="enter" name="parking"/>
<jsp:setProperty property="exit" name="parking"/>
<form action="parking.jsp" method="post">
     주차장에 들어온 차 번호 : <input type="text" name="enter"/>&nbsp;&nbsp;
     <input type="submit" value="입차"/>
</form>
<form action="parking.jsp" method="post">
     주차장에 나간 차 번호 : <input type="text" name="exit"/>&nbsp;&nbsp;
     <input type="submit" value="출차"/>
</form>
<hr/>
주차된 차량 목록 : <br/>
<table border="1">
     <tr>
          <th>차량 번호</th><th>입차 시간</th>
          
     </tr>
     <%/*
          if(parking.getCarList().length > 0){
          for(int i=0; i<parking.getCarList().length;i++){
               //car = parking.getCarList()[i];
               pageContext.setAttribute("car", parking.getCarList()[i]);
        */               
          if(parking.getCarList().size() > 0){
               for(int i=0; i<parking.getCarList().size();i++){
                    //car = parking.getCarList()[i];
                    pageContext.setAttribute("car", parking.getCarList().get(i));
     %>
     <tr>
          <%-- 
          <th><%=car.getPlateNumber()%></th>
          <th><%=car.getParkingTime()%></th>     
          --%>     
          <th><jsp:getProperty property="plateNumber" name="car"/></th>
          <th><jsp:getProperty property="parkingTime" name="car"/></th>
     </tr>
     <%}
     }%>
</table>
<br/>
총 주차 대수 : <jsp:getProperty property="total" name="parking"/>
</body>
</html>
<!-- 
     class name : bean.index.CarDto
     name                    r/w               data type                    explain
     ----------------------------------------------------------------------------     
     plateNumber               r               String                         차량 번호
     parkingTime               r               java.util.Date               입차 시간
     
     
     class name : bean.index.ParkingBean
     name                    r/w               data type                    explain
     ----------------------------------------------------------------------------
     enter                    w               String                         입차된 차량 정보
     exit                    w               String                         출차된 차량 정보
     total                    r               int                              주차된 총 차량 대수
     carDto                    r               carDto                         특정 차량 조회
     carList                    r               carDto[]                    전체 차량 조회
-->
-----------------------------------  
3-10 
Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/index/CarDto.java

package bean.index;

public class CarDto {
     private String plateNumber;
     private long parkingTime;
     public CarDto() {}
     public CarDto(String plateNumber, long parkingTime) {
          this.plateNumber = plateNumber;
          this.parkingTime = parkingTime;
     }
     public String getPlateNumber() {
          return plateNumber;
     }
     public java.util.Date getParkingTime() {
          return new java.util.Date(parkingTime);
     }
}
-----------------------------------  
3-11 
Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/index/ParkingBean.java

package bean.index;

import java.util.Vector;

public class ParkingBean {
     private Vector<CarDto> carList = new Vector<CarDto>();     
     public void setEnter(String enter){
          for(int i=0; i<carList.size();i++){
               if(carList.get(i).getPlateNumber().equals(enter)){
                    return;
               }
          }
          CarDto car = new CarDto(enter, System.currentTimeMillis());
          carList.add(car);
     }
     
     public void setExit(String exit){
          for(int i=0; i<carList.size();i++){
               if(carList.get(i).getPlateNumber().equals(exit)){
                    carList.remove(i);
               }
          }
     }
     
     public int getTotal(){
          return carList.size();
     }
     /*
     public CarDto[] getCarList() {
          CarDto[] cars = new CarDto[carList.size()];          
          for(int i=0; i<carList.size();i++){
               cars[i] = carList.get(i);
          }
          return cars;
     }
     */
     public Vector<CarDto> getCarList() {
          return carList;
     }
}
-----------------------------------  
3-12 
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/register.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>회원가입</h1>
<form action="register_proc.jsp" method="post">
     아이디 : <input type="text" name="mem_id"/><br/><br/>
     패스워드 : <input type="password" name="mem_pw"/><br/><br/>
     이름 : <input type="text" name="mem_name"/><br/><br/>
     이메일 : <input type="text" name="mem_email"/><br/><br/>
     전화번호 : <input type="text" name="mem_tel"/><br/><br/>
     주소 : <input type="text" name="mem_addr"/><br/><br/>
     <input type="submit" value="가입신청"/><br/><br/>
</form>
</body>
</html>
-----------------------------------  
3-13 
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/register_proc.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="mem" class="bean.memberDto"/>
<%--
<jsp:setProperty property="mem_id" name="mem"/>
<jsp:setProperty property="mem_pw" name="mem"/>
<jsp:setProperty property="mem_name" name="mem"/>
<jsp:setProperty property="mem_email" name="mem"/>
<jsp:setProperty property="mem_tel" name="mem"/>
<jsp:setProperty property="mem_addr" name="mem"/>
--%>
<%-- 모든 프로퍼티 한번에 저장 --%>
<jsp:setProperty property="*" name="mem"/>
<h1>입력하신 내용은 다음과 같습니다.</h1>
아이디 : <jsp:getProperty property="mem_id" name="mem"/><br/>
패스워드 : <jsp:setProperty property="mem_pw" name="mem"/><br/>
이름 : <jsp:getProperty property="mem_name" name="mem"/><br/>
이메일 : <jsp:getProperty property="mem_email" name="mem"/><br/>
전화번호 : <jsp:getProperty property="mem_tel" name="mem"/><br/>
주소 : <jsp:getProperty property="mem_addr" name="mem"/><br/>
</body>
</html>
----------------------------------- 
###################################
4. 과제
-----------------------------------
4-1
JSP로 게시판 혼자만드는 코딩 시험 볼 예정,JSP끝날 때
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
Workspace : ~\JSP\EclipseWork
/BeanApp/WebContent/applicationScope.jsp
<%@ page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>전체 방문자 수 확인</h1>
<%-- 새로 고침 누를때마다 방문자 증가 하도록 만들기 --%>
<jsp:useBean id="counter" class="bean.application.CounterBean" scope="application"/>
<jsp:setProperty name="counter" property="newVisit" value="1"/> 
<jsp:setProperty property="restart" name="counter" />
<h2>전체 방문자 수 : <jsp:getProperty property="visitCount" name="counter"/> </h2>
<form action="applicationScope.jsp" method="post">
     <input type="submit" name="refresh" value="새로 고침"/>&nbsp;&nbsp;
     <input type="submit" name="restart" value="카운터를 0으로 리셋"/>&nbsp;&nbsp;
</form>
</body>
</html>

Workspace : ~\JSP\EclipseWork
/BeanApp/src/bean/application/CounterBean.java

package bean.application;

public class CounterBean {
     private int count;
     
     public int getVisitCount() {
          return count;
     }

     public void setNewVisit(int count) {
          this.count += count;
     }
     
     public void setRestart(boolean b) {
          this.count = 0;
     }     
}
-----------------------------------
###################################
6. 기타
----------------------------------- 
-----------------------------------