1. web.xml 파일의 설정
사용자로부터 요청이 들어오게 되면 가장 먼저 실행되는 것이 Front Controller인 Filter Dispatcher이므로 filter 설정을 먼저 해주어야 한다.
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
물론 filter-name은 아무거나 설정해도 된다.
다음으로 filter-mpping부분이다.
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter-name은 위에 선언했던 것이고 url-pattern은 무엇이라도 url로 들어오면 filter를 실행 시키겠다는 뜻으로 struts 나 spring 처럼 /*.do 이런식으로 확장자까지 선택해 주면 에러가 발생함으로 쓰지 않도록 한다.
뒤의 확장자는 뒤에 properties파일에서 선언하게 된다.
2. struts.properties 파일을 생성한다.
eclipse의 navigator 탭으로 이동후 src 폴더로 생성한 properties 파일을 옮기면 자동적으로 build의 classes 폴더로 이동하게 되는것을 그림과 같이 확인 할 수 있다.
설정 파일인 struts.xml 과 properties파일은 classes 폴더에서 찾기 때문에 위와 같이 해주어야 한다.
struts.properties
--------------------------------------------------------------------------------------------------
struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true
#프로그램을 수정후 서버를 restart 할 필요가 없다.
struts.devMode=true
struts.configuration.xml.reload=true
struts.custom.i18n.resources=globalMessages
struts.url.http.port=8989
# was의 port 번호
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
# url이 .do .action .bit 로 끝나는 것들을 접근을 허용하겠다.
struts.i18n.encoding=euc-kr
# encoding type은 euc-kr이다
--------------------------------------------------------------------------------------------------
3. 위에 설정한 대로 struts.xml 파일을 생성한다.
struts.xml 파일은 다른 action이 설정되어 있는 xml파일을 include하는 형식으로 되어있다.
--------------------------------------------------------------------------------------------------
<?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="info.xml"/>
<include file="validator.xml"/>
</struts>
--------------------------------------------------------------------------------------------------
4. library파일을 추가 한다.
struts 2의 API를 다운로드 받게 되면
struts-2.0.14 -> apps 폴더의 struts2-blank-2.0.14.war 라는 파일을 압축을 푼다.
struts2-blank-2.0.14.war 파일은 기본적으로 벤더 회사가 제공하는 예제 파일이라고 보면 된다. 이 압축된 폴더에 보면 lib폴더 안에 struts 2를 구동하기 위한 가장 기초적인 libarary파일이 존재하는데 그 파일을 복사해서 붙여넣기 하는 방법을 쓴다.
5. struts.xml 파일에서 include하는 xml파일을 생성한다.
include 하는 파일에는 실질적인 action 부분이 들어있다.
--------------------------------------------------------------------------------------------------
<?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>
<package name="info" namespace="/info" 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">
<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>
</action>
<action name="query"
class="com.myhome.info.actions.InfoQueryAction"
method="execute">
<result name="success">/WEB-INF/info/modify.jsp</result>
</action>
<action name="update"
class="com.myhome.info.actions.InfoUpdateAction"
method="execute">
<result name="success">/WEB-INF/info/template.jsp</result>
</action>
<action name="delete"
class="com.myhome.info.actions.InfoDeleteAction"
method="execute">
<result name="success">/WEB-INF/info/template.jsp</result>
</action>
</package>
</struts>
--------------------------------------------------------------------------------------------------
- package : name -> package이름을 설정한다
namespac -> url로 맵핑되는 namespace를 선언한다. 만약 http:localhost:8989/struts2/ 가 기본적인 주소라면 namespace는 이 부분 뒤에 들어오는 값이 된다. 즉 http:localhost:8989/strtus2/info 에서 info가 namespace가 되며 저런 url pattern이 들어오면 다음의 패키지를 참조하고 뒤에 http:localhost:8989/struts2/info/index.do 에서 index와 각각의 action name과 비교 하며 같은것을 실행 하게 된다.
- action : name -> url pattern이 이런 이름으로 들어오면 다음을 실행한다.
class -> 실행할 action class를 선언한다.
method -> execte메소드를 실행시키겠단 뜻으로 쓰던 안쓰던 defalte가 method="execute" 로 잡혀 있어 상관없다.
-result : name -> 각각의 action Class는 그 결과를 return값으로 설정해 주며 각각은 이미 정해진 문자열이다.(SUCCESS,INPUT,ERROR ect...)
각각의 Action Class에서 return 값으로 다음과 같은 전달값들을 전달해 줄때 리턴해 준 문자열과 name과 똑같으면 다음의 페이지로 이동시키게 된다.
여기서 가장 중요한 것은 Action Class에서 전달값이 "SUCCESS" 와 같은 대문자 더라도 XML 문서의 result에서는 "success" 와 같이 소문자로 받아야 된다는 점이다.
6. 실질적인 Businuss Logic을 수행하는 Action Class를 생성한다.
이 클래스는 ActionSupport Class를 상속하고 ActionSupport Class의 execute method를 override 한다.
--------------------------------------------------------------------------------------------------
package com.myhome.info.actions;
import com.opensymphony.xwork2.ActionSupport;
import com.myhome.info.dao.InfoDAO;
import com.myhome.info.vo.InfoVO;
@SuppressWarnings("serial")
public class InfoRegisterAction extends ActionSupport{
/*form property fields*/
private InfoVO bean;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
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;
}
}
--------------------------------------------------------------------------------------------------
7. jsp 페이지 생성
jsp 페이지에서는 struts2에서 제공하는 테그라이브러리를 통해 bean을 생성하고 bean에 jsp에서 발생한 데이터를 저장하고 Business Logic Controller로 bean 객체를 전달하게 한다.
--------------------------------------------------------------------------------------------------
<%@ page contentType="text/html;charset=euc-kr"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:bean id="bean" name="com.myhome.info.vo.InfoVO"/>
<html>
<head>
<style type="text/css">
a:active {font-size: 11pt; text-decoration: none; color: #000000}
a:link {font-size: 11pt; text-decoration: none; color: #000000}
a:visited {font-size: 11pt; text-decoration: none; color: #000000}
a:hover {font-size: 11pt; text-decoration: none; color: #000000}
td {font-size: 11pt; text-decoration: none; color: #000000}
</style>
</head>
<body>
<center><br><br>
<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>
</td>
<td width=300 align="left">
<input type="text" name="bean.name">
</td>
</tr>
<tr height=30 bgcolor="#ffffff">
<td width=100 align="right"><b>성별</b>
</td>
<td width=300 align="left">
<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>
</td>
<td width=300 align="left">
<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>
--------------------------------------------------------------------------------------------------
- 맨처음 태그를 선언하고 <s:bean>태그로 bean을 설정한다.
- 각각 데이터 입력이 일어나는 form태그의 name을 위에서 선언한 bean의 id를 써주고 그 빈객체에 대응하는 property이름을 넣어주면 자동적으로 발생하는 데이터 들이 bean으로 들어가게 된다.
예
bean.name -> 이렇게 하면 bean이라고 설정한 InfoVO에 name 이라는 property에 데이터가 입력 된다.
이렇게 되면 이 정보는 ActionSupport를 상속한 class로 이동하게 된다.
그 클래스 에서는
private InfoVO bean; 을 선언하고
InfoVO의 setter method를 통해 데이터가 저장되고 로직을 수행한 후에 getter를 통해 jsp페이지로 다시 정보가 이동하게 된다.
여기서 가장 중요한 점은 jsp 페이지에서 선언한 bean의 id 이름과 ActionClass의 데이터를 받을 오브젝트 이름이 같아야 한다는 점이다.
예)
jsp:
<s:bean id="valueObject" name="com.myhome.vo.InfoVO">
||
ActionClass ||
private InfoVO valueObject;
Action Class를 통과한 데이터가 result.jsp페이지로 이동한다면 result.jsp페이지의
<s:bean id="valueObject" name="com.myhome.vo.InfoVO">
이어야 한다.
register.jsp --------------------------> Action Class --------------------------->result.jsp
setter method 로 데이터 전달 getter method로 데이터 전달
※ struts 2의 태그
① <s:iterator value="list">
list 형태로 데이터가 넘어 왔을때 foreach문 대신 사용한다.
② <s:property value="num">
property 이름으로 바로 접근 할 수 있다.
8. DB 접근을 위한 iBatis 설정
9. Value Objec Class생성
10. DB에 접근하기 위한 DAO 생성