Struts2에서 validator을 사용하는 3가지 방법.

1) Developer logic에 의한 검증방식
2) Annotation 방식으로 검증하는 방법
3) xml 방식으로 검증하는 방법

 Developer logic에 의한 방식은 개발자가 직접 business logic을 작성하여 사용하는 방법이다. 그러나 직접 작성한 방법은 검증받지 않았기 위험하다. 그래서 주로 api를 이용하는 방법인 Annotation이나 xml 방식으로 검증하는 방법을 사용한다.

1. Developer Logic에 의한 검증방식

Client(id, pw 를 보낸다) - 생략... -> Action --> Error --> <actionError>, <fieldError> --> Client


 action class에서 에러가 발생하게 되면 actionerror나 fielderror을 선택해서 에러를 보내준다. 그림에서 보듯이 success 들어오면 result.jsp 페이지로 이동하고 input 이나 error가 들어오면 다시 register.jsp 페이지로 돌아가는것을 확인 할 수 있다.

■ 작업 순서

jsp 페이지 만들기 -> Action.java 만들기 -> 랩퍼문서(validator.xml)만들기 -> struts.xml  만들기

이런 작업 순서로 하였고, WebContent의 index.jsp에서 접근하기 위한 경로를 입력한다.

1) jsp 페이지 만들기

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ taglib prefix="s" uri="/struts-tags"%><!-- struts-tags를 사용한다 -->
<html>
  <body>
    <center><br><br>
    <h3><b>Struts2 Validator (register)</b></h3>
    <!-- 
              액션이름을  다음과 같이 설정한다.
              개발자 검증 : register.action
              어노테이션 검증 : annotation.action
    XML 검증 : xml.action 
    -->
    <form method="post" name="regform" action="register.action">
     <table border=0 cellpadding=0 cellspacing=1 bgcolor="#000000">
       <tr height=30 bgcolor="#ffffff">
         <td align="left" colspan=2>
           <span style="font-size:10pt; color:red">
              <s:fielderror/><!-- 원하는 곳에다 지정해서 에러를 보여 줄 수 있다 -->
           </span> 
         </td>
       </tr>
       <tr height=30 bgcolor="#ffffff">
         <td width=100 align="right"><b>성명</b>&nbsp;</td>
         <td width=300 align="left">&nbsp;
            <input type="text" name="name" value="${name }">
<!--            <s:fielderror name="name"/>-->
         </td>
       </tr>
 ................. 생략 ............................................................

<s:fielderror/> : 에러 태그를 한번에 다 보여준다.
<s:fielderror name="name"/> : name으로 설정된 property 에러만 출력한다.
 
두 태그를 원하는 곳에다가 입력하면 그 곳에 에러가 표시된다.

2) action class 만들기

/**
 * 개발자가 직접 작성한 로직에 의해 폼 검증을 수행하는 방식
 * 수행방법)
 *  1) 각  프로퍼티를 이용하여 유효한 값 인지 로직을 구현한다.
 *  2) 유효하지 않는 프로퍼티가 존재하면 다음과 같이 메소드를 호출한다.
 *   this.addFieldError("필드명", "전달할 메시지")
 *  3) execute() 메소드에서 다음과 같이 리절트 값을 리턴한다.
 *   . success : 성공시
 *   . input & error : 실패시
 */

package com.myhome.validator.actions;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class DeveloperRegisterAction extends ActionSupport{//action 인터페이스를 사용해야 인터셉터 설정 할  수 있다.!!!! 우선 ActionSupport로..

 private String name;
 private int age;
 private String email;
 
 
 @Override
 public String execute() throws Exception{
  if(!this.isValidators()) return ERROR;
  return SUCCESS;
 }
 
 //검증코드 : 재사용성을 위해 이렇게 만든다.
 //로직을 만들고 메세지 주입 그리고  위(if(!this.isValidators()) return ERROR;)에서 수행
 protected boolean isValidators(){
  boolean flag = true;
  if(!this.isNameInvalid()){
   this.addFieldError("name", "이름을 다시 입력하세요");
   flag = false;
  }
  if(!this.isAgeInvalid()){
   this.addFieldError("age", "등록할 수 없는 나이입니다.");
   flag = false;
  }
  if(!this.isEmailInvalid()){
   this.addFieldError("email", "메일형식이 맞지 않습니다.");
   flag = false;
  }
  return flag;
 }

 //이름 검증부분
 //2자 이상인지 검증한다.
 protected boolean isNameInvalid(){
  if(name == null) return false;
  if(name.length() < 2) return false;
  return true;
 }
 
 //나이를 검증한다.
 //나이는 20~80세 까지만 허용한다.
 protected boolean isAgeInvalid(){
  if(age < 20 || age > 80) return false;
  return true;
 }
 
 //이메일을 검증한다.
 protected boolean isEmailInvalid(){
  if(email == null) return false;
  int idx = email.indexOf('@');
  if(idx == -1) return false;
  return true;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }
}

3) 랩퍼문서 만들기(validator.xml)

<?xml version="1.0" encoding="euc-kr"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 <!-- name 이 중복되면 안된다.  -->
    <package name="validator" namespace="/validator" extends="struts-default">
     <action name="index">
      <result>/WEB-INF/validator/register.jsp</result>
     </action>
     
     <action name="xml"
       class="com.myhome.validator.actions.XMLRegisterAction"
       method="execute">
     
<!--  반드시 name이 있어야 하며, action에서 설정한 세개가 와야한다.-->
    
<result name="success">/WEB-INF/validator/result.jsp</result>      
     <result name="input">/WEB-INF/validator/register.jsp</result>
     <result name="error">/WEB-INF/validator/register.jsp</result>
     </action>
 
    </package>
   
</struts>

<result name="" 에서 input이 있으면 error 가 없어도 된다. 여기서는 action class에서 error를 설정해 놓아기 때문에 여기서는 꼭 설정한 세개가 다 와야 한다.

4) struts.xml 추가 한다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <!-- include files -->
   <include file="validator.xml"/>
</struts>

2. Annotation 방식으로 검증하는 방법

(Developer Logic 설정에서)Action Class 만들기 --> validator.xml 수정 --> jsp 페이지 에서 action 설정

1) actino class 만들기

/**
 *  어노테이션 방식으로 폼 검증 방식
 *  사용방식)
 *  1) 현재 액션 클래스에서 어노테이션을 수행한다고 주석달기를 선언한다.
 *   @Validtion
 *   public class ...{}
 *  
 *  2) 검증할 getter 메소드 위에서 해당된 어노테이션을 설정한다. //getter에서만 사용.
 *   @RequiredFieldValidator(message="메세지")
 *   public String getName(){..."
 */

package com.myhome.validator.actions;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.Validation;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.EmailValidator;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

@SuppressWarnings("serial")
@Validation
public class AnnotationRegisterAction extends ActionSupport{

 private String name;
 private int age;
 private String email;
 
 @Override
 public String execute() throws Exception{
  
  return SUCCESS;
 }
 
 @RequiredFieldValidator(message="이름은 필수 항목입니다.", type=ValidatorType.FIELD)//ValidatorType 정의. 이 type은 field 검색.
 @StringLengthFieldValidator(trim=true, minLength="2", message="존재하지 않는 이름입니다.")
 //@ExpressionValidator(expression="", message="한글만 가능합니다.")
public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @IntRangeFieldValidator(min="20", max="80", message="등록할 수 없는 나이입니다.")
 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 @RequiredFieldValidator(message="메일을 입력하세요!!!")
 @EmailValidator(message="메일 형식이 맞지 않습니다.")//
여기다가 메세지를 주기 싫으면 메세지번들을 쓸 수 있는데 키를 가져다 쓴다.
 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }
 
}

2) validator.xml 수정

     
<action name="annotation"
                 class="com.myhome.validator.actions.AnnotationRegisterAction" 
                  method="execute">
      <result name="success">/WEB-INF/validator/result.jsp</result>
      <result name="input">/WEB-INF/validator/register.jsp</result>
      <result name="error">/WEB-INF/validator/register.jsp</result>
     </action>

3) jsp 페이지에서

 <form method="post" name="regform" action="annotation.action">
<!-- action 만 annotation.action을 지정하면 된다 -->

여러가지 기능을 지원하는 validation이 많기 때문에 api를 참조 한다.
com.opensymphoney.xwork2.validator.annotations

3. xml 방식으로 검증하는 방법

 
Container 들은 struts2가 가지고 이는 ActionSupport 에 의해서 액션을 호출하기 전에 먼저 xml 을 찾는다. 만약 xml 문서가 class 와 동일한 문서가 있으면, 먼저 xml 문서를 파라미터로 로딩하여 각각의 필드에 맞도록 수행하고 검증을 끝내면, exectue를 통해 다음 위치로 이동한다. 가장 중요한 것은 xml 문서를 만들 때, 클래스 명과 동일하게 명시해야 한다. 

 XMLRegisterAction.java 클래스를 만들었다면, 같은 위치에 XMLegisterAction-validation.xml 을 만들어야 한다. ex) 클래스이름-validation.xml 

이렇게 이름을 설정해야 Interceptor 들은 액션을 호출할 때 먼저 이 문서가 있는지 찾는다.

1) XMLRegisterAction.java 만들기

public class XMLRegisterAction extends ActionSupport{

 private String name;
 private int age;
 private String email;
 
............... 생략.....

class에서 설정한 property 들이 xml 에서 설정한 field-name과 일치해야 한다.

2) XMLRegisterAction-validation.xml 만들기

<?xml version="1.0" encoding="EUC-KR"?>
  <!DOCTYPE validators PUBLIC
     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

   <validators>
        <field name="name">
          <!--문자가 널일 경우만 체크해준다.-->
    <field-validator type="requiredstring"><!-- requiredstring 정해져있는 타입 -->
        <param name="trim">true</param><!-- trim 공백 제거 -->
        <message>이름 입력오류!!!</message><!-- 보여줄 오류 메세지 -->
    </field-validator>
    <field-validator type="stringlength"><!-- 문자 길이 제한 -->
        <param name="minLength">2</param>
              <param name="trim">true</param>
              <message>이름은 최소 2자 이상 입력해야 합니다.</message>
          </field-validator>   
    </field>

       <field name="age">
            <field-validator type="int">  <!--정수를 체크할 때 사용된다.-->
        <param name="min">20</param>
        <param name="max">80</param>
        <message>금지된 나이오류!!!</message>
    </field-validator>
       </field>
        
       <field name="email">
          <field-validator type="email"><!--메일형식에 맞지 않을 때 체크한다.-->
          <message>메일형식에 맞지 않습니다.!!!</message>
          </field-validator>
          <field-validator type="requiredstring">
             <param name="trim">true</param>
             <message>메일을 입력하세요!</message>
          </field-validator>
   </field>
</validators>


requiredstring, stringlength, email 등은 정의되어 있는 것을 쓰는 것이기 때문에 자세한 내용은 api를 참고한다.
http://struts.apache.org/2.0.14/docs/validation.html

3) validator.xml 수정

<action name="xml"
       class="com.myhome.validator.actions.XMLRegisterAction"
       method="execute">

4) jsp 수정

 <form method="post" name="regform" action="xml.action">

파일 참조 

Struts2에서 validator 해보기 끝!

 Struts2에서는 Annotation(Java1.5 부터 추가된 클래스나 메서드 위에 @기호와 함께 기재된 문자열로, 메타데이터 기능이다.)을 사용하여 struts.xml 파일이 없이 직접 mapping하는 방식을 지원한다. 만약 struts.xml에 수행할 action이 없을 경우에 자체적으로 Annotation을 수행하게 된다. 
 예를 들어 
http://localhost:8989/info/list.action
 으로 들어온다면 struts.xml에서 먼저 검사를 한다음 수행할 액션이 없을 경우, web.xml의 init-param으로 이동하여 Annotation을 수행하게 된다.
 struts.xml을 사용하지 않는다는것은 struts.xml의 actino mapping의 설정을 사용하지 않는 다는 것이고,(struts.xml 있어도 되고, 없어도 되는 옵션이된다는 뜻!)


<struts>
   <!-- include files -->
   <include file="info.xml"/><!-- 사용하지 못한다. -->
</struts>
 
그렇기 때문에 Annotation을 사용한다는 것을 알려줘한다. 그러기 위해서 web.xml에 반드시 설정해줘야 된다. 그리고 Annotation을 사용하면 무조건 default인 ***.action 만 가지고 들어와야 한다.(properties에 설정한 *.do, *.etc등은 안된다.)
 또한, action class의 이름은 list.action을 호출하면 ListAction이 되어야 한다.

list.action => list + action = ListAction 이 되야한다.

이렇게 설정해 주어야만 struts2에서 자동으로 mapping을 해준다.

■ 설정

1. web.xml에서 FilterDispatcher의 파라메터를 설정한다.

 <init-param>
        <param-name>actionPackages</param-name>
        <param-value>info.action</param-value>
<!-- <param-value>com.myhome.anno</param-value> -->
 </init-param>


- actionPackages
은 예약어이므로 변경 할 수 없다.
- info.action 사용할 액션 패키지이다. 콤마(,)로 분류하여 원하는 액션 추가 설정 할 수 있다.(ex. info.action, board.action)
- com.myhome.anno 패키지 이름으로 설정 하면 그 아래 실행될 action class들을 모두 포함한다.

2. Action Class에서 Annotation을 적용한다.

package com.myhome.anno;

import java.util.List;

import com.myhome.info.dao.InfoDAO;
import com.myhome.info.vo.InfoVO;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@Results({
            @Result(name="success", value="/WEB-INF/anno/list.jsp"), //(여긴 소문자!)
            @Result(name="input", value="/WEB-INF/anno/fail.jsp") //(여긴 소문자!)
})
public class ListAction extends ActionSupport{

 private List<InfoVO> list;

 @Override
 public String execute() throws Exception {
  list = new InfoDAO().getAllQuery();
  if(list.size() < 1) return INPUT; //대문자, 소문자 구별이 확실해야 한다.(여긴 대문자!)
  return SUCCESS; //대문자, 소문자 구별이 확실해야 한다.(여긴 대문자!)
 }
 
 public List<InfoVO> getList(){
  return list;
 }
 
}

* @Results({})을 사용하기 위해 import org.apache.struts2.config.Results; import 해야한다.
 
 @Result는  ,  로 구분하여 여러값을 설정할 수 있다.

 execute()에서 return 값과 Result의 name 값이 같은 곳이 실행되며 value="/WEB-INF/anno/list.jsp" 로 데이타를 보낸다. 

 위에서도 설명 했지만 return SUCCESS; 여기는 대문자, @Result(name="success", 여기는 소문자로 꼭 써줘야 한다.

3. 실행방법

ListAction을 호출하는 경우, List가 Action이름이 되며 Action은 action이 된다.
                              http://localhost:8989/anno/list.action
그리고 호출시 각 단어는 반드시 소문자로 명시해야 된다.

Annotation 기본 설정 끝!

1. iBatis 사이트에서 library 다운.

 WEB-INF/lib 폴더에 library 를 추가한다.

2. sql을 관리할 sql 폴더를 만든다.

이클립스에서 맨 왼쪽 아래 아이콘 클릭 하여 Navigator 클릭.
src/com/myhome/info/ 에서 sql 폴더를 하나 만든다.
sql폴더 안에 SqlMap.xml, SqlMapConfig.xml 을 만든다.
SqlMapConfig.xml 안에서 JNDI에 관한 내용 구현.

3. SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
 PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0 //EN"
 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
    <settings
  cacheModelsEnabled="true"
  enhancementEnabled="true"
  lazyLoadingEnabled="true"
  maxRequests="32"
  maxSessions="10"
  maxTransactions="5"
  useStatementNamespaces="false"
 />

<!-- JNDI resource type-->
   <transactionManager type="JDBC" >
 <dataSource type="JNDI">
   <property name="DataSource"
      value="java:comp/env/jdbc/XE"/>
 </dataSource>
   </transactionManager>
 <sqlMap resource="com/myhome/info/sql/SqlMap.xml" />
</sqlMapConfig>

JNDI를 사용하기 때문에 server.xml에 JNDI 설정을 추가한다.

4. Server의 server.xml

이 부분은 이미 서버 설정하는 글에서 해주었다.

<GlobalNamingResources> 여기 사이에 추가한다.</GlobalNamingResources>


<Resource name="jdbc/XE"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              factory="org.apache.commons.dbcp.BasicDataSourceFactory"
              url="jdbc:oracle:thin:@localhost:1521:XE"
              username="user01"
              password="user01"
              maxActive="20"
              maxIdle="10"
              maxWait="-1" />

5. Server의 context.xml 가장 하단에 추가한다.

<ResourceLink global="jdbc/XE"
                  name="jdbc/XE"
                  type="javax.sql.DataSource"/>

※ JNDI말고 다른 방법을 사용하는 경우.

SqlMapConfig.xml에 다음에 같이 추가한다.

1) simple datasource type  사용

<transactionManager type="JDBC" commitRequired="false">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver"
                      value="oracle.jdbc.driver.OracleDriver"/>
            <property name="JDBC.ConnectionURL"
                      value="jdbc:oracle:thin:@localhost:1521:XE"/>
            <property name="JDBC.Username" value="user01"/>
            <property name="JDBC.Password" value="user01"/>
        </dataSource>
    </transactionManager>

2) DBCP datasource type 사용

<properties resource=" info/model/dao/db.properties " />
   <transactionManager type="JDBC" >
  <dataSource type="SIMPLE">
  <property name="JDBC.Driver" value="${driver}"/>
  <property name="JDBC.ConnectionURL" value="${url}"/>
  <property name="JDBC.Username" value="${username}"/>
  <property name="JDBC.Password" value="${password}"/>
  <property name="JDBC.DefaultAutoCommit" value="true" />
  <property name="Pool.MaximumActiveConnections" value="10"/>
  <property name="Pool.MaximumIdleConnections" value="5"/>
  <property name="Pool.MaximumCheckoutTime" value="120000"/>
  <property name="Pool.TimeToWait" value="500"/>
  </dataSource>
  </transactionManager>

6. SqlMap.xml 설정.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
 "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
  <typeAlias alias="Info" type="com.myhome.info.dto.InfoDTO"/> <!-- alias : 별칭을 잡겠다는 의미 -->
 
  <insert id="infoInsert" parameterClass="Info"> <!-- typeAlias한 Info를 넣는다 없으면 com.. 그대로 넣어도 된다. -->
   INSERT INTO INFO
    (NUM, NAME, SEX, TEL, WDATE)
   VALUES
    (NUMSEQ.NEXTVAL, #name#, #sex#, #tel#, #wdate#) <!-- ## Info 안에 가지는 프로퍼티 대소문자가 정확하게 맞아야 한다. -->
  </insert>
 
  <select id="infoList" resultClass="info">
   SELECT
    NUM, NAME, SEX, TEL, WDATE
   FROM
    INFO
   Order by
    NUM desc
  </select>
   
</sqlMap>

7. SQLManager.java 만들기.

package com.myhome.manager;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public abstract class SQLManager {
 
 private SqlMapClient sc = null;
 
 public SQLManager(){
  try{
   sc = SqlMapClientBuilder.buildSqlMapClient(
            Resources.getResourceAsReader(
              "com/myhome/info/sql/SqlMapConfig.xml"));
  }catch(java.io.IOException ie){
   ie.printStackTrace();
  }
 }
 
 public SqlMapClient getSqlMap(){
      return sc; 
    
 }
}

8. InfoDAO.java 만들기.

package com.myhome.info.dao;

import com.myhome.info.dto.InfoDTO;
import com.myhome.manager.SQLManager;
import java.sql.SQLException;
import java.util.List;

public class InfoDAO extends SQLManager{

 /*등록부분*/
 public void register(InfoDTO dto) throws SQLException{
  this.getSqlMap().insert("infoInsert", dto);
 }

 /*회원 리스트 부분*/
 public List<InfoDTO> getAllQuery() throws SQLException{
  List<InfoDTO> list = null;
  list = this.getSqlMap(). queryForList("infoList");
  return list;
 }
 
}

'FrameWork > Struts1' 카테고리의 다른 글

Struts1 FileDownload  (0) 2009.08.18
Struts1 fileUpload  (0) 2009.08.18
Struts1의 Action 4  (0) 2009.08.16
Struts1의 Action 3  (0) 2009.08.16
Struts1의 Action 2  (0) 2009.08.12
Struts1의 Action 1  (0) 2009.07.27
Struts1에서 ActionForm 사용하기.  (0) 2009.07.25
Struts 1 을 사용하여 간단한 회원가입, 리스트 불러오기.  (0) 2009.07.05
Struts1 개발환경 설정.  (0) 2009.07.05
Struts(스트럿츠) 란?  (0) 2009.06.27




순서 : 기본 설정 - 비즈니스 로직 작성 - DB 테이블 생성(퀀텀DB 사용) - Bean - DTO - struts-config.xml 설정 - RequestProcessor 설정 - iBatis 설정(SqlMapConfig.xml) - DAOmanager - SqlMap.xml - DAO -비즈니스로직에서 DAO와 연동


1. 기본 설정

web.xml

   <servlet>
      <servlet-name>action</servlet-name> <!-- 다른 이름으로 해도 된다.. -->
      <servlet-class>  <!-- 클래스 지정 -->
       org.apache.struts.action.ActionServlet
   </servlet-class> 

<!-- groupping module -->
 <init-param>  <!--struct-config.xml 설정 -->
  <param-name>config</param-name>  <!-- config 는 예약어다 파라미터 키를 잡기위해-->
  <param-value>
   /WEB-INF/struts-config.xml
  </param-value>   <!-- /WEB-INF/(기본베이스 - 다른폴더일때는 경로를 설정해주어야 함)폴더 안에 struts-config.xml파일 위치 지정  - 여기까지 작성후 struts-config.xml파일을 생성 -->
 </init-param>

<!-- url 패턴 설정 -->
<servlet-mapping>    
<servlet-name>action</servlet-name> <!-- *.do로 들어오면 servlet-name이 action 실행 -->
   <url-pattern>*.do</url-pattern>
  </servlet-mapping>


2. 비즈니스 로직을 수행하기 위한 준비.

 servlet 을 사용하기 위해서는 자신이 만든 프로젝트이름에서 오른쪽 마우스를 클릭하고 Built Path - Configure Build Path를 클릭해서 새창이 나오면 Libraries 탭으로 이동한다.
 오른쪽에 Add Library 를 클릭 - Server Runtime 클릭 자신이 설치한 Apache Tomcat vX.X 가 보인다. 선택하고 finish 하면 끝. F5키를 눌러 Refresh 한다.


3. Quantum DB 을 이용해 테이블 생성(이전 글에서 방법 작성)

4. Bean 만들기

5. DTO((Data Transfer Object: 데이터 전송 객체, Value Object) 빈즈) 만들기
 
 데이타 , 객체 자체가 움직이기 때문에 직렬화가 필요하다.
객체 직렬화를 하기 위해 implements java.io.Serializable 구현한다.

6. struts-config.xml 설정

<!-- config.xml에서 액션 서블릿으로 넘어온걸 처리, 가장 중요하다-->
 <action-mappings>
<action path="/index"
       forward="/info/register.jsp"/>
     <action path="/register"
       type="com.myhome.info.actions.InfoRegisterAction">
      <forward name="success" path="/info/result.jsp"/> <!-- success 가 오면 result.jsp로 보내줘라 -->  
     </action>
     <action path="/list"
       type="com.myhome.info.actions.InfoListAction">
      <forward name="success" path="/info/list.jsp"/>
     </action>
</action-mappings>

<!-- controller processor Definition -->
 <controller processorClass="com.myhome.info.processor.InfoRequestProcessor"/>

7. RequestProcessor 설정 

- Action으로 호출하기 전 처리할 내용을 기술.
- processPreprocess 오바라이드 구현.
- form parameter에 대한 엔코딩을 수행한다.
- struts-config.xml 에서
<!-- controller processor Definition -->
 <controller processorClass="com.myhome.info.processor.InfoRequestProcessor"/>
내용을 입력한다.

8. iBatis 설정(퍼시스턴트 모델을 구현)
 
http://thinkingblog.tistory.com/6  참조.

iBatis 사이트에서 api 다운. - 우선 JNDI 사용해서 구현.

 이클립스에서 맨 왼쪽 아래 아이콘 클릭 하여 Navigator 클릭.
src/com/myhome/info/ 에서 sql 폴더를 하나 만든다.
sql폴더 안에 info.sql, SqlMap.xml, SqlMapConfig.xml 을 만든다.
SqlMapConfigl.xml 안에서 JNDI에 관한 내용 구현.

9. DAOmanager를 만든다

 SqlMapConfigl을 읽어오는데 목적이 있다.
 SQLManager.java 를 만든다.(추상클래스로 만든다.)

10. SqlMap.xml 설정

11. DAO 를 만든다.

 SQLManager.java를 구현한다.

12. 비즈니스로직(InfoRegisterAction.java)에서 DAO와 연동.

자세한 내용은 Struts1.war 프로젝트를 참조 하면서 본다.

'FrameWork > Struts1' 카테고리의 다른 글

Struts1 FileDownload  (0) 2009.08.18
Struts1 fileUpload  (0) 2009.08.18
Struts1의 Action 4  (0) 2009.08.16
Struts1의 Action 3  (0) 2009.08.16
Struts1의 Action 2  (0) 2009.08.12
Struts1의 Action 1  (0) 2009.07.27
Struts1에서 ActionForm 사용하기.  (0) 2009.07.25
Struts1 에서 iBatis 사용하기  (0) 2009.07.05
Struts1 개발환경 설정.  (0) 2009.07.05
Struts(스트럿츠) 란?  (0) 2009.06.27


http://thinkingblog.tistory.com/2

위 글에서 작성한 설정을 다 하고 마지막으로 아래 설정을 하면 struts1을 개발 할 수 있는 환경 설정 완료.

■ struts-config.xml 설정

 
 스트럿츠 사이트에서 struts-1.3.10-all 파일을 다운로드 받는다.

http://struts.apache.org/download.cgi#struts1310

 struts-config.xml은 sturts에서 제공하는 xml을 사용한다.
struts-blank-1.3.10 파일안에 존재하는 struts-config.xml 파일을 이클립스에서 생성한 프로젝트의 WEB-INF에 복사해 넣는다.

struts-1.3.10-all\struts-1.3.10\apps 안에 있는 struts-blank-1.3.10 압축 파일을 풀고 WEB-INF에 있는 struts-config.xml 파일을 복사해 사용한다.

Struts1 환결 설정 끝.

'FrameWork > Struts1' 카테고리의 다른 글

Struts1 FileDownload  (0) 2009.08.18
Struts1 fileUpload  (0) 2009.08.18
Struts1의 Action 4  (0) 2009.08.16
Struts1의 Action 3  (0) 2009.08.16
Struts1의 Action 2  (0) 2009.08.12
Struts1의 Action 1  (0) 2009.07.27
Struts1에서 ActionForm 사용하기.  (0) 2009.07.25
Struts1 에서 iBatis 사용하기  (0) 2009.07.05
Struts 1 을 사용하여 간단한 회원가입, 리스트 불러오기.  (0) 2009.07.05
Struts(스트럿츠) 란?  (0) 2009.06.27

■ 기본 환경 설정.

1. library 파일 추가.

 
apache 사이트의 struts에서 다운로드. 여기서는 2.0.14 버전을 사용한다. 공부용으로 사용하기 위해 Full Distribution을 다운로드 한다.

 다운로드한 파일에서 struts-2.0.14\apps\ 들어가면 struts2-blank-2.0.14.war 파일이 존재 한다. 이 파일은 예제파일로 이것을 기본으로 작업을 수행 할 수 있도록 제동된 파일이다. 이것을 압출해제 하면 struts2-blank-2.0.14\WEB-INF\lib 안에 들어있는 파일 들을 eclipse에서 생성한 프로젝트의 lib 폴더에 복사해서 사용한다.

2. web.xml 파일 설정

 <filter>
   <filter-name>struts2</filter-name>
   <filter-class>
 org.apache.struts2.dispatcher.FilterDispatcher
   </filter-class>
</filter>

<filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>//여기서는 확장자를 기록할 수 없다. 인터센터로부터 사전에 알려줄 수 있다.
</filter-mapping>


* filter-name은 위에서 설정한 filter-name과 같아야 한다. url-pattern에는 다른 확장자를 사용할 수 없으면 /*가 default다. 다른 확장자는 struts.properties에서 설정 할 수 있다.

3. struts.properites 파일 생성

 메모장을 사용하여 struts.properites 파일을 만들고 eclipse의 navigator 탭에서 src 폴더로 복사하면 자동적으로 build의 classes 폴더에 생긴다.
 설정파일들을 classes 폴더에서 찾기 때문에 확인해야 한다. 작업을 하다면 많은 xml 설정 파일들을 src 폴더에 만드는데, src 폴더에 만들면 자동적으로 들어가므로 확인만 하면 된다.

 struts.properites은 Interceptor로 부터 적용할 각각의 constant(상수)만 정의한다.

struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true //개발자 디버그 모드 설정
struts.devMode=true
struts.configuration.xml.reload=true // configuration에서 설정된 모든 xml 다시 로딩해해서 무조건 처리해라. 실무에서는 사용 금지!!
struts.custom.i18n.resources=globalMessages
struts.url.http.port=8989 //was의 포트 번호, default는 80
struts.serve.static=true
struts.serve.static.browserCache=false
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
// 여기 설정한 파일들을 로딩
struts.action.extension=do,action,bit // do, action, bit 확장자로 올때 접근 허용, default는 action
struts.i18n.encoding=euc-kr //ednoding 타입이 들어올때 euc-kr로 들어온다


4. struts.xml 파일 생성.

 struts.xml은 맵핑 역할을 한다. 각각의 모듈에서 작업했던 xml을 연결하는 역할만 한다. 설정을 include 시키기만 하면 된다.
 
※ struts.xml 에다가 Interceptor를 적용해도 된다. 여기다가 적용하려면 tag로, struts.properites로 적용하려면 상수로. 둘중에 아무곳에 한군데만 적용해주면 된다. 그러나 struts.xml 에다가 모두 적용을 하면 복잡하기 때문에 Interceptor 적용할 상수 정의는 struts.properites로 빼고 struts.xml에는 include만 한다.

<struts>
   <!-- include files -->
   <include file="info.xml"/>
   <include file="validator.xml"/>
   <include file="login.xml"/>
   <include file="upload.xml"/>
</struts>

5. struts.xml에 include 할 mapping 문서 만들기.(ex. info.xml)

  <package name="info" namespace="/" extends="struts-default">
     <action name="index">
      <result>/WEB-INF/info/register.jsp</result>
     </action>
     
     <action name="register"
                 class="com.myhome.info.actions.InfoRegisterAction"
                 method="execute">
<!-- execute가 default이며 다른 method라면 무조건 써야된다-->
      <result>/WEB-INF/info/result.jsp</result>
     </action>
     
     <action name="list"
       class="com.myhome.info.actions.InfoListAction">
      <result name="success">/WEB-INF/info/list.jsp</result> 
<!-- success 대문자 쓰면 에러 난다. -->
     </action>

    <action name="update"
           class="com.myhome.info.actions.InfoUpdateAction">
      <result name="success" type="redirect">list.action</result>
    </action> 
    
    </package>
   
</struts>

* 여기서 패키지를 직접 잡는다. spring에서 ViewResolver라고하고, 여기서 prefix와 suffix를 잡는다. 패키지 네임을 유일한 값을 설정해야 한다.

 namespace는 프로젝트 이름이 struts2이면 http:localhost:8989/struts2/ 여기 다음부터 나오는게 namespace 다. 현재 context에서 바로 파일로 들어가면 그냥 namespace="/" 하면되고, http:localhost:8989/struts2/info/index.action 으로 들어가고 싶으면 namespace="/info" 로 설정하면 index.action 으로 들어온다. index.action으로 들어오면 action name 과 같은 곳을 실행한다.

 action name은 한 xml 문서 내에서 중복되면 안되며, url pattern과 같은 이름이 들어오면 class="" 에 지정된 action이 실행된다. method="execute"는 class에서 지정된 파일안에 execute method를 실행시킨다.

 result name은 action class에서 return 값으로 설정해 놓은 값고 일치하면 result 에 지정해 놓은 jsp 파일로 값들을 전달하며, 페이지 이동을 한다. class 팔에서 return SUCCESS;은 대문자이지만 여기서는 꼭!! 소문자 success로 써야 한다.

 result type에서
<result type="chain">list<result>
//action의 name이 list인 곳으로 가라 - 또 다른 액션으로 데이타와 같이 보낸다. 기존에 있는 액션 이름을 찾아 간다.
<result type="redirect">list.action<result>
//다른 액션으로 데이타 없이 보낼 때
<result type="dispatcher">/WEB-INF/info/list.action<result>
//type의 default 값이다. 전체 경로를 써줘야 한다.

+ 추가 설명 : Action process model


- 액션은 하나의 작업 단위이며 URL이다.
- 액션은 하나의 클래스 또는 메소드이다.
- 액션은 한 종류의 비즈니스 로직을 수행하기 위한 통로이다.
- 액션은 struts.xml 에서 정의된다.
- 액션 메소드는 하나의 토큰 스트링을 반환한다.
- 액션체인 : 액션을 수행한 결과로서 다른 액션을 호출할 수 있다.
- 액션의 프로퍼티는 태그와 매핑할 수 있다.



■ 구현하기(환경설정 작업에 이어서)

구현순서(절대적인 방법은 아님!) : 위에 환경설정 ->  JSP파일 만들기 -> Class 생성(**Actions 패키지와 **action.java 파일 만들기) -> mapping 문서 만들기(struts-2.0.14\apps\struts2-blank-2.0.14\WEB-INF\classes 안에 있는 example.xml 파일에서 복사 해서 사용) -> struts.xml 파일에 include. -> iBaits 설정을 위한 Package, Class와 xml 만들기 SQLManager.java, SqlMapConfig.xml, SqlMap.xml 파일 만들기 -> **VO.java 만들기(VO에서 바로 DB로 넣는다) -> **DAO.java 만들기 -> **.jsp 에서 데이터 주고, 받기 설정하기.

▶ 구현하기 위한 추가 설명

import com.myhome.info.vo.InfoVO;
import com.myhome.info.dao.InfoDAO;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class InfoRegisterAction extends ActionSupport{
 
 /*form property fields*/
 private InfoVO bean;

 @Override
 public String execute() throws Exception {
  bean.setWdate(this.getToday());
  
  new InfoDAO().register(bean);
  
  return SUCCESS;//대문자
 }
 
 protected String getToday(){
  return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
 }
 
 public InfoVO getBean() {
  return bean;
 }

 public void setBean(InfoVO bean) {
  this.bean = bean;
 }
}

2. jsp 페이지 만들기.(register.jsp)
<%@ page contentType="text/html;charset=euc-kr"%>
<!--  모든 파라미터를 하나의 객체로 받기 위해 선언한다. 데이터를 객체로 받기 위해 bean 생성-->
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:bean id="bean" name="com.myhome.info.vo.InfoVO"/>
<html>
  <head>
... 생략 ....
    <h3><b>Struts2 Action (register)</b></h3>
    <form method="post" action="register.do">
     <table border=0 cellpadding=1 cellspacing=1 bgcolor="#000000">
       <tr height=30 bgcolor="#ffffff">
         <td width=100 align="right"><b>성명</b>&nbsp;
         </td>
         <td width=300 align="left">&nbsp;
            <input type="text" name="bean.name">
         </td>
       </tr>
    <tr height=30 bgcolor="#ffffff">
   <td width=100 align="right"><b>성별</b>&nbsp;
         </td>
   <td width=300 align="left">&nbsp;
   <input type="radio" name="bean.sex" value="남" checked>남
            <input type="radio" name="bean.sex" value="여">여
   </td>
    </tr>     
    <tr height=30 bgcolor="#ffffff">
      <td width=100 align="right"><b>연락처</b>&nbsp;
         </td>
   <td width=300 align="left">&nbsp;
   <input type="text" name="bean.tel">
   </td>
    </tr>
    <tr height=30 bgcolor="#ffffff">
    <td align="center" colspan=2>
   <input type="submit" value="전송하기">
            <input type="button" value="리스트"
              onClick="javascript:location.href='list.do'">
    </td>
   </tr>
    </table>
  </form>
 </center>
 </body>
</html> 

 *  <%@ taglib prefix="s" uri="/struts-tags" %>에서 struts2에서 prefix는 s 만 받는다.
 
 <s:bean id="bean" name="com.myhome.info.vo.InfoVO"/> s:bean 태그로 bean객체를 설정해 놓고, name을 그에 맞는 property로 지정해 놓으면 자동적으로 bean에 데이터들이 들어가게 된다. 

 이렇게 입력된 데이터는 ActionSupport를 상속한 Action Class로 이동하고, Class 에서 private InfoVO bean; 을 설정하고, setter, getter를 설정해 놓으면, setter를 통해 데이터를 저장하고, getter를 통해 데이터를 jsp 페이지로 보낸다.

여기서 중요한 것은 Action Class에서
private InfoVO bean; 설정한 이름 bean과 jsp 에서 설정한 <s:bean id="bean" name="com.myhome.info.vo.InfoVO"/> bean의 id이름인 bean과 결과페이지인 jsp 페이지에서의
<s:bean id="bean" name="com.myhome.info.vo.InfoVO"/> bean의 id이름인 bean 이름이 같아야 한다.

3. struts2 태그.(list.jsp)

<s:iterator value="list">  
      <tr bgcolor="#ffffff">
       <td align="center">
        <s:property value="num"/>
       </td>
       <td align="center"><a href="javascript:query('${num }')">${name }</a></td>
       <td align="center">${sex }</td>
       <td align="center">${tel }</td>
       <td align="center">${wdate }</td> 
      </tr>
   </s:iterator>  

 Action Class에서 return 값으로 list가 넘어왔을 경우에 foreach 태그 대신에 iterator 을 사용할 수 있다.

 <s:property value="num"/> property 이름으로 바로 접근 할 수 있는 태그.

Struts2 기본 환경 설정 및 구현 끝!

 Struts2의 작동 원리

Struts2 Framework Architecture Diagram


 1. Client가 HttpServletRequest를 요청하면 FrontController인 FilterDispatcher가 받는다.

 2. ActionMapper부터 ActionProxy 등을 거쳐 와서 Config 문서인 struts.xml 문서와 추가로 struts.properties 파일을 요구한다. struts.properties는 있으면 로딩하고 없으면 하지 않는다.(없어도 된다)

 3. struts.xml과 strtus.properties문서를  Interceptor가 받아온다. 그리고 Client의 모든 Parameter를 가로챈다.

 4. Interceptor 은 3단계로 나누어져 있다.
1단계에서는 Client의 모든 Paramter를 가로챈다. 
2단계에서는 렌더링 역할을 수행한다.(언어 설정, 보안 설정 등)
3단계에서는 Action의 setter method 를 찾고, 데이터를 푸시하는 역할을 한다.(ActionForm이 필요없다)

 5. Business Logic Controller인 Action에서 setter method 메소드를 받아서 비즈니스로직을 수행한다. 

 6. getter method를 통해 Result로 전달해주거나 받는다. Result에서 적절한 페이지를 선택한다. 이때 Template를 지정한다.(JSP, JSF, Velocity(확장자 : vm), FreeMarker(확장자 : ftl)) 적정할 Template를 잡아서 다시 Interceptor로 보낸다.(getter를 통해서 객체는 머든 상관없다)

 7. 다시 역방향으로 간다. 1단계에서 Result에서 적절한 페이지를 선택할때, 그 페이지를 찾는다. 그리고 그 페이지의 Value Stack(그림에는 없음)을 갖고, Value Stack에다가 데이터를 넣주고 그냥 찍기만 하면 된다.(Spring의 setAttribute 필요없이 받을 수 있다) 

Struts2의 기본적인 작동원리 끝!

Struts 2 는 무엇인가?

 WebWork + Struts 가 합쳐진게 Struts 2 이다.


http://struts.apache.org/


 WebWork는 View Framework 로서 유명하고, 이를 기반으로 WebWork Framework와 Struts Framework가 합쳐져 Struts 2가 탄생.

 Struts 1과 Struts 2는 다르며, 그 이유중 하나는 WebWork의 인터셉터(Interceptor)라는 개념이 들어가 있다.


 인터셉터는 HttpRequest를 중간에서 가로채는 Filter와 비슷한 개념이나, Action 전 후에 다른 처리를 할 수 있다. 인터셉터는 AOP(aspect-oriented programming) 개념으로 생각하면 된다고 한다.

 그외에 의존성주입(Dependency Injection)을 지원하고, 다양한 Plugin(JFreeChard, Sitemesh 등), Result 타입을 지원한다.

간단한 Struts2 소개 끝!

더 자세한 내용은

http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Struts_basic

여기서.




1. Java SDK 설치
 
Sun 사이트에서 다운로드. 기본적으로 Java SE Development Kit (JDK)를 다운.
(콘솔 창에서 java -version 을 쳐보면 설치 및 버전 확인 가능)

 요즘 WAS들이 1.6버전을 요구한다고함. 이전 버전을 다운로드 하고 싶으시면 Previous Releases라고 다운로드 탭에서 이동.

 WAS는 SDK가 기본적으로 깔리는 주소를 인식하기 때문에 변경하지 않고 그냥 설치 하는 것이 좋다고함.

2. DB 설치
 
Oracle 사이트에서 Oracle Database 10g Express Edition (Universal) 다운로드. 다운로드를 하기 위해서 회원가입해야 됨.

 Oracle XE(10g) 개발자용은 스키마를 만들 수 없음.

 약관 및 설치 위치를 설정하고, 암호를 설정한 다음 다음버튼 클릭!.


 요약 정보가 나옴. HTTP리스너용 포트 번호를 보면 8080으로 되어있음 아파치 WAS포트 번호도 8080이므로 둘중에 하나 변경해야됨. 설치 클릭!.
 

 설치 후 오라클 홈페이지를 실행하면(시작 메뉴에서 오라클 메뉴 - Database 홈페이지로 이동 클릭!) 로그인 창이 나타난다.


 아이디는 system 암호는 설치하면서 정한 비밀번호를 입력한다.

 로그인 후 관리에서 데이타베이스 사용자 - 사용자 관리(페이지에서 생성 클릭!) 또는 생성으로 이동.


 사용자 이름 및 암호를 입력하고 생성 클릭. 사용자 이름 : scott, 암호 : tiger



3. WAS 설치
 
아파치 사이트에서 tomcat 다운로드. 왼쪽에서 원하는 버전 클릭하여 다운로드(Archives 에서 버전별 다양하게 다운 가능). 

  설치 할 위치를 지정한 후 다음으로 넘어가면 포트번호를 변경 하는 화면이 나옴. 여기서는 8989로 변경. 패스워드는 비워두고 다음 클릭!



 마지막으로 자바 JRE 위치를 확인한 후 인스톨!!

4. eclipse 설치
 이클립스 사이트에서 자신의 운영체제에 맞는  JEE - Eclipse IDE for Java EE Developers 다운로드. 원하는 위치에 압축을 풀어놓으면 설치 끝!

5. DB plug-in 설치
여기서는 QuantumDB 를 사용한다.

■ QuantumDB 설치 방법.
 
EasyEclipse 사이트에서 맨 아래 Download EasyEclipse Plugins 클릭 후 페이지 이동 후 QuantumDB 다운로드(Download QuantumDB 3.0.7 for EasyEclipse 1.3)

 다운로드가 완료되면 실행시켜서 이클립스 폴더에 인스톨한다.



■ SQLExplorer_plugin 설치 방법
 
SOURCEFORGE.NET 사이트에서 SQL Explorer RCP (inc JRE) 다운로드.
다운로드가 완료되면 이클립스 폴더에 압축을 풀면 된다.

■ 이클립스에서 설정
 이클립스 실행! 아래와 같이 이클립스 오류가 발생하면~


이클립스가 설치된 폴더에서 eclipse 구설설정 파일을 열면 아래와 같은 내용이 나오고

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-framework
plugins\org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m -> -Xmx256m 으로 수정

빨간 부분 같이 수정하면 된다.

이클리스 실행 후 오른쪽 위에 Java EE 옆 아이콘을 클릭 후 Other... 클릭!


 목록 중에서 Quantum DB를 선택한다.


 왼쪽 Database Bookmarks 에서 오른쪽 마우스 클릭 후 New Bookmark... 선택.



다음 화면에서 Add driver... 클릭


 Add External Jar.. 클릭해서 ojdbc14.jar 파일을 선택한다.
(ojdbc 파일은 톰캣을 설치한 폴더의 lib 폴더에다가 복사해 넣고 사용한다.)

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html


 추가 후에 Browse... 을 클릭하여 oracle.jdbc.driver.OracleDriver을 선택하고 Finish.



추가한 JDBC Driver Name을 선택하고 Next.

 Userid와 Password 입력 후에 Database name 입력.


 Database name 확인 방법은 오라클을 설치한 폴더에서 아래 경로까지 간다음
C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN

 listener 파일을 열어 보면 맨 마지막 줄에
DEFAULT_SERVICE_LISTENER = (XE) 같이 나와있다.
Database name 에 XE 입력하고 Next 클릭!


 다음 화면에서 Name 에 아무이름이나 입력하고 Next.

 마지막으로 아래 화면에서 두 번째 Show the default schema 선택하고 Finish!!



 마치고 나면 왼쪽 화면에 아래와 같은 모습을 볼 수 있다.


■ 퀀텀 디비를 사용한 테이블 생성

생성할 테이블과 시퀀스 설정등을 Quantum SQL Queries View에 넣고 오르쪽 위에 녹새 화살표 버튼을 누르면 된다. 왼쪽에서 USER01 밑에 테이블을 선택해 보면 테이블이 생성된 것을 볼 수 있다.



7. Context, Server 설정, DBCP(DataBase Connection Pool) 셋팅
 (아래 세 파일을 톰캣을 설치한 폴더의 lib 폴더에다가 복사해 넣고 사용한다.)

http://commons.apache.org/downloads/download_collections.cgi


http://commons.apache.org/downloads/download_dbcp.cgi

http://commons.apache.org/downloads/download_pool.cgi

이클립스 실행 후 Dynamic Web Project 생성하고 Dynamic Web Module version 에서 2.5를 선택하고 Next.


 서버 설정을 하기 위하여 생성된 프로젝트에서 오른쪽 마우스 클릭 후 Run As - Run on Server 클릭.



 Apache - Tomcat v6.0 Server 선택하고 Next.


Browser... 클릭 해서 Tomcat을 설치한 폴더를 선택한다. Next를 눌러서 다음 페이지로 이동하고 프로젝트를 Add 한다.



 Finish 하고 서버가 실행된다.(차단이 나오면 차단 해제!)

바인딩 설정
<Resource name="jdbc/XE"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              factory="org.apache.commons.dbcp.BasicDataSourceFactory"
              url="jdbc:oracle:thin:@localhost:1521:XE"
              username="user01"
              password="user01"
              maxActive="20"
              maxIdle="10"
              maxWait="-1" />

username, password 는 오라클에서 설정한 사용자 아아디와 패스워드를 입력한다.

설정을 복사해서 이클립스 안의 톰캣 서버 server.xml 안에서

<GlobalNamingResources>

여기 안에다가 붙여 넣기 한다

</GlobalNamingResources> 

 ■ context.xml 바인딩

<!-- resource binding -->

 <ResourceLink global="jdbc/XE"
                  name="jdbc/XE"
                  type="javax.sql.DataSource"/>

위 내용을 복사해서 이클립스 안의 톰캣 서버 Context.xml  안에다가 복사해 넣는다.

기본적인 개발환경 설정 끝!

이제 필요한 FrameWork library 파일만 추가하면 개발을 시작할 수 있다.

 Java EE 웹 어플리케이션을 개발하기 위한 오픈소스 프레임워크이다. MVC 아키텍처를 적용하는 개발자들을 지원하기 위하여 자바 서블릿 API 를 사용하고 확장하였다. 이것은 크레이그 맥클라나한(Craig McClanahan) 에 의해 최초로 만들어졌으며 아파치 재단2000년 5월 이관되었다. 
 이 프레임워크는 페이지 디자이너, 컴포넌트 개발자, 프로젝트 일부를 담당하는 다른 개발자 등 성격이 다른 그룹들에 의해 다루어지는 대형 웹 어플리케이션의 설계와 구현을 가능케 한다.
I18N (국제화), 강력한 커스텀 태그 라이브러리, 타일형 디스플레이, 폼 유효성 검사등의 특징을 가진다. 또한 다양한 프레젠테이션 레이어들을 지원하여, JSP, XML/XSLT, JSF, 벨로시티 등을 포함하고 있으며 또한 JavaBeansEJB 등 다양한 모델 레이어를 포함하고 있다.(위키백과)
 라고 나와있다.
간단하게 말하자면 오픈소스 프레임워크(꽁짜라는것!)과 자바 서블릿(Java Servlet), 자바 서버 페이지(Java Server Pages), 자바빈즈(Java Beans), 리소스번들(Resource Bundle) 그리고 확장 마크업 랭귀지(XML)와 같은 표준 기술들에 기반한 오픈 소스 프레임워크라는 것이다.

스트럿츠를 사용하면서 스트럿츠가 무엇인지 자세하게 알지 못하면서 사용하는거 같아 내가 이해하는 스트럿츠가 먼가에 대한 정의 필요한것 같음.

스트럿츠에 관해 자세하게 설명한 블로그가 있어서 링크를 걸었다.

http://blog.naver.com/mir2050/120001811295

스트럿츠란 무엇인가? 그것이 문제로다....ㅋ

'FrameWork > Struts1' 카테고리의 다른 글

Struts1 FileDownload  (0) 2009.08.18
Struts1 fileUpload  (0) 2009.08.18
Struts1의 Action 4  (0) 2009.08.16
Struts1의 Action 3  (0) 2009.08.16
Struts1의 Action 2  (0) 2009.08.12
Struts1의 Action 1  (0) 2009.07.27
Struts1에서 ActionForm 사용하기.  (0) 2009.07.25
Struts1 에서 iBatis 사용하기  (0) 2009.07.05
Struts 1 을 사용하여 간단한 회원가입, 리스트 불러오기.  (0) 2009.07.05
Struts1 개발환경 설정.  (0) 2009.07.05

+ Recent posts