//forward Actino tag
정의 : RequestDispatcher를 이용 forward방법과 동일(동일한 리퀘스트를 넘겨줌), forward할때 파라미터를 이용하여 요청할수 있다.
<jsp:forward page='forward할 jsp페이지'/>
예제) forward

*hendelt.jsp
<form action='hello.jsp' method='get'>
 <input type='text' name='userName'>
 <input type='submit'>
</form>

*hello.jsp
<%
  String name = request.getParameter('userName');
  if(name.length() == 0){
%>
  <jsp:forward page='handelt.jsp'/>
<% 
}
%>
<%= name %>

a)userName에 값이 입력되어있으면 출력 없으면 다시 hendlt.jsp로

예제) param 파라미터를 이용해서 넘겨줄때
*handelt.jsp
<%
  String mesg = request.getParameter('mesg');
  if(mesg != null){
%>
<%=mesg%>
<%
  }
%>

*hello.jsp
<%
  String mesg = '값없음';
  String name = request.getParameter('userName');
  if(name.length() == 0 {
%>
<jsp:forward page='handelt.jsp'>
  <jsp:param name='mesg' value='<%=mesg%>'/>
</jsp:forward>
<%
  }
%>
<%= name %>

//userBean Action tag
정의 : 자바빈 객체를 생성/사용하기 위한 태그
자바빈 : 특정한 작업을 독립적으로 수행하는 컴포넌트, J2EE에서는 EJB, JSP 자바빈으로 구분

자바빈 작성규칙 :
-attribute(속성=property) 와 set/get메소드를 갖는다.
-attribute와 set/get메소드 이름이 일치한다.
-메소드의 첫글자는 반드시 대문자 setName()~
-인자없는 생성자를 갖는다.
-No public attribute를 갖는다.(property는 private로)
-직렬화 객체 반드시 serializable을 구현해야함

용도 : 폼태그를 가진 html에서 jsp로 폼데이터를 전송할때 자바빈을 이용하면 jsp에서 자바코드가 아닌 태그로 코드작성을 할수있음.

아키텍쳐 :
클라이언트 -> memberForm.html (폼에 값입력)
           -> member.jsp (넘어온 파라미터를 dao에 넘겨줌
           -> dao에서 DB와 접속한후 결과를 member.jsp에 넘겨줌
           -> member.jsp에서 클라이언트에게 response를 보내줌

예) 자바빈 사용전

<form method=post action=member.jsp>
~~~~
</form>

*member.jsp
<%
request.setChracterEncoding('euc-kr');
String name = request.getParameter('name');
String age = request.getParameter('age');
MemberTO m = new MemberTO(name, age);
MemberDAO mDAO = new MemberDAO();
mDAO.insertMember(m);
ArrayList list = mDAO.showMember();
%>
<table>
  <tr>
   <th>이름</th><th>나이</th>
  </tr>
<%
  <tr>
   <td><%=name%></td><td><%=age%></td>
  </tr>
%>

*MemberTO.java
private name, age;
public MemberTO(String name, String age){
  this.name = name;
  this.age = age;
}
set(), get()

*MemberDAO.java
public class MemberDAO{
  private DataSource dataFactory;
  public MemberDAO{
    Context ctx = new InitialContext();
    dataFactory = (DataSource)ctx.lookup('java:comp/env/jdbc/Oracle9i");
  }
  public void insertMember(MemberTO m){
    Connect con =dataFactory.getConnection();
    Statement stmt = con.createStatement();
    String name = m.getName();
    String age = m.getAge();
    String query = 'INSERT INTO member VALUES (";
      query = query + " " + name+ ", ";
      query = query + " " + age;
    stmt.executeUpdate(query);
    stmt.close();
    con.close();
  }
  public ArrayList showMember(){
    ArrayList list = new ArrayList();
  Connection con = dataFactory.getConnection();
  Statement stmt = con.createStatement();
  String query = "SELECT * FROM member";
  ResultSet rs = stmt.executeQuery(query);
  while(rs.next()){
    String name = rs.getString('name');
    String age = rs.getString('age');
  MemberTO domain = new MemberTO(name, age);
    list.add(domain);
  }
  rs.close();
  stmt.close();
  con.close(); 
  return list;
  }
}

예제) 자바빈 사용후
useBean태그로 자바빈 생성
scope는 page, request, session, application 4가지 default=page;
<jsp:useBean id='빈참조변수' class='패키지를 포함한 자바빈' scope='4가지scope중하나'/>

*member.jsp
<%
  request.setChracterEncoding('euc-kr');    //useBean액션태그를 사용하기 전에 인코딩을 결정해야 한글안깨짐
%>
<jsp:useBean id='m' class='test.web.MemberBean'/>
<jsp:setProperty name='m' property='name' param='name'/>                 //<--value='<%=request.getParameter('name')%>
<jsp:setProperty name='m' property='age' param='age'/>    //value='<%=request.getParameter('age')%>
                           //%param생락가능 : HTML의 파라미터 이름과 자바빈의 속성명이 같으면 생략가능하다.
         //HTML과 자바빈이 모두 동일하면 property값을 *로 수정가능
          // --> <jsp:setProperty name='m' property='*'/>
<%
  ~~DB 작업
%>

<table>
 ~~
 <tr>
   <td><jsp:getProperty name='m' property='name'/></td>
   <td><jsp:getProperty name='m' property='age'/></td>
 </tr>
</table>

 

예)useBean Action tag Scope
*ScopeTest.java
public class ScopeTest{
  public ScopeTest(){
    sout('인스턴스생성');
  }
}

*~~.jsp  4개
<jsp:useBean id='scopeTest' class='test.web.ScopeTest' scope='page'/>  
<jsp:useBean id='scopeTest' class='test.web.ScopeTest' scope='request'/>
<jsp:useBean id='scopeTest' class='test.web.ScopeTest' scope='session'/>
<jsp:useBean id='scopeTest' class='test.web.ScopeTest' scope='application'/>

a)브라우저를 2개이상열고 각페이지를 요청하면
page, request의 경우 리프레시 할때마다 인스턴스생성
session의 경우 동일한 브라우저는 맨처음만 인스턴스 생성
application의 경우 처음요청한 브라우저에서만 인스턴스 생성

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 대절님

댓글을 달아 주세요



티스토리 툴바