prepare() 기본 사용법


안녕하세요.
고코더 입니다.


com.opensymphony.xwork2.Preparable 속한 prepare 인터페이스는 Action의 prepare() 메소드를 실행 합니다.
이 인터셉터는 Client로 부터 전달된 모든 데이터를 가로채는 역할을 합니다. 그렇기에 
Action이 실행되기전에 특정 메소드를 실행 시킬 수 있습니다. 



implements 구현

 1. 사용법은 implements 속성으로 구현해야 합니다.
기존에 저희가 만든 TestAction에 Preparable를 구현합니다. 

1
public class TestAction extends ActionSupport implements  Preparable {
cs


 2. 그럼 아래와 같은 오류가 발생 합니다. 인터페이스를 구현했으니 prepare()를 오버라이드 해야 합니다.


 3. 아래 소스처럼 prepare()를 오버라이드 해줍니다. 이렇게 하면 이 액션이 호출될때 가장 먼저 실행되게 됩니다. 

1
2
3
4
@Override
public void prepare() throws Exception {
  
}
cs


예제 소스 수정 / TestAction



 4. 이제 지금까지 만들어온 예제에 해당 코드들을 삽입하였습니다. 
String Content에 변수를 미리 선언합니다.
하지만 해당 변수는 getContent()을 통해 파라미터 변수를 입력 받습니다.
만약 prepare가 액션보다 먼저 호출된다면 Pretxt안에 "미리 선언한 내용"이 입력될 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package test;
 
import java.sql.SQLException;
 
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
 
public class TestAction extends ActionSupport implements Preparable {
 
    String Title;
    String Content = "미리 선언한 내용";
    String Pretxt;
 
    // Preparable 인터페이스 가장 먼저 실행 된다.
    @Override
    public void prepare() throws Exception {
        // CONTENT 변수안에 있는 텍스트가 SET 담기기전에 가져온다.
        this.Pretxt = this.Content;
    }
 
    public String getTitle() {
        return Title;
    }
 
    public void setTitle(String Title) {
        this.Title = Title;
    }
 
    public String getPretxt() {
        return Pretxt;
    }
 
    public void setPretxt(String pretxt) {
        Pretxt = pretxt;
    }
 
    public String getContent() {
        return Content;
    }
 
    public void setContent(String Content) {
        this.Content = Content;
    }
 
    public String getView() {
        // this.Title = "제목";
        // this.Content = "내용";
        return SUCCESS;
    }
 
    /* 데이터베이스 연결 테스트를 위한 */
 
    TestDao dao = new TestDao();
    String ConYN;
 
    public String getConYN() {
        return ConYN;
    }
 
    public String conTest() throws SQLException {
        this.ConYN = dao.conTest();
        return SUCCESS;
    }
 
}
cs



결과 화면



 5. 결과화면을 보겠습니다. 파라미터에 담긴 제목과 내용이 출력되고 prepare에는 contet초기 변수를 담아둔 "미리 선언한 내용"
이라는 글자가 나타납니다. 이는 액션에서 가장 먼저 동작했기에 Content에 담긴 내용이 사라지기전에 변수에 담아 표현 할 수 있었습니다.


 6. 다시 한번 설명 드리면 prepare()는 인터페이스은 Preparable을 오버라이드 되어 실행됩니다. 이 기능을 테스트 하기 위해 Content에 초기 선언한 변수를 Pretxt로 먼저 가져올 수 있는지 테스트 하였습니다.




마무리


참 쉽죠?


댓글을 달아 주세요





스트럿츠2 아이바티스 데이터베이스 연결 소스


안녕하세요.
고코더 입니다.


오늘은 ibatis를 이용해 오라클 데이터베이스를 연결하는 방법을 알아보겠습니다.
ibatis를 이용한 이유는 스트럿츠2에서 가장 많이 사용하는 프레임워크 입니다. 
실무에서도 이 두 조합은 쉽게 볼 수 있습니다. 
그래서 최대한 쉽게 ibatis를 스트럿츠2를 이용해 데이터베이스를 연결해서 select 쿼리를 날려보겠습니다.

학습전에 제가 남겨둔 이전 스트럿츠 강의를 보고 오시길 바랍니다. 해당 소스를 활용할 예정입니다.

그리고 오라클 데이터베이스도 설치하시면 좋을거 같습니다
-> 

Oracle - 오라클 오류 "ora-28000 the account is locked" / 계정이 잠겨 있습니다.

오라클 - scott 계정은 첫 로그인 후 비번을 바꿔야 합니다. / the password has expired




 1. SqlMapConfig.xml 생성


src 폴더 아래 SqlMapConfig.xml 를 생성해주세요. 데이터베이스 연결을 위한 config 파일 입니다.

내용은 아래처럼 채워주세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="oracle.jdbc.OracleDriver"/>
      <property name="JDBC.ConnectionURL"  value="jdbc:oracle:thin:@localhost:1521:orcl"/>
      <property name="JDBC.Username" value="scott"/>
      <property name="JDBC.Password" value="tiger"/>
    </dataSource>
  </transactionManager>
       
       <sqlMap resource="map/db_test.xml" />
</sqlMapConfig>
cs

 2. SqlMapLocator.java 생성


util 패키지를 생성하여 SqlMapLocator.java 파일을 만듭니다. ibatis를 사용하기 위한 기본 파일입니다.

내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package util;
import java.io.IOException;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapLocator {
       public static SqlMapClient getMapper()
       {
             SqlMapClient sqlMapper;
             
           try
           {
              Reader reader = Resources.getResourceAsReader(
                      "SqlMapConfig.xml");
              sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
              
              reader.close();
           }
           catch (IOException e)
           {
              // Fail fast.
              throw new RuntimeException(
                      "Something bad happened while building the SqlMapClient  instance." +
                      e, e);
           }
           return sqlMapper;
       }
}
cs

해당 예제는 ibatis를 사용할때 거의 공통으로 쓰는 방식입니다. 우선 작성해보세요.



 3. db_test.xml


이번엔 이전에 생성한 map 패키지 안에 db_test.xml을 만듭니다. 
이 파일은 게시판을 만들때 사용하기 위해 test 라는 이름으로 만들었습니다.
해당 xml은 모든 쿼리를 작성하여 사용합니다. 

내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap>
       <select id="conTest" resultClass="String">
       select 'Database Connection Test' as conTest from DUAL
       </select>
</sqlMap>
cs
5번째 라인 : 해당 쿼리에 id를 지정합니다. 반환 클래스는 스트링 문자로 반환합니다.
6번째 라인 : select 문을 작성하였습니다. 오라클 기본 테이블을 이용하여 데이터베이스 연결 테스트 입니다.


 4. TestDao.java 생성 


이제는 쿼리를 끌어와 실행시킬 DAO(Data Access Object) 파일을 생성합니다. 이 파일은 DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하는 오브젝트입니다.

내용은 이렇게 작성합니다. 데이터 베이셔 연결을 위한 쿼리만 하나만 가져옵니다.
1
2
3
4
5
6
7
8
9
10
package test;
import java.sql.SQLException;
import util.SqlMapLocator;
public class TestDao {
       public String conTest() throws SQLException
       {      
             //데이터베이스 연결 테스트
             return   (String)SqlMapLocator.getMapper().queryForObject("conTest");
       }
}
cs

8번째 라인 : ibatis에 queryForObject 를 사용해 연결되어 있는 XML에 conTest 쿼리를 가져옵니다.


 5. TestAction.java 수정


해당 Action 파일을 수정 합니다. 이전에 함께 따라 하신분은 코드를 추가하면 됩니다.

내용은 이렇게 기록 합니다. 기존 액션 클래스에 내용을 추가했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package test;
import java.sql.SQLException;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
     String Title;
     String Content;
     public String getTitle() {
           return Title;
     }
     public void setTitle(String Title) {
           this.Title = Title;
     }
     
     public String getContent() {
           return Content;
     }
     public void setContent(String Content) {
           this.Content = Content;
     }
     
     public String getView() {
           //this.Title = "제목";
           //this.Content = "내용";
           return SUCCESS;
     }
     
     /*데이터베이스 연결 테스트를 위한*/
     
     TestDao dao = new TestDao();
     String ConYN;    
     public String getConYN() {
        return ConYN;    
     }
  
     public String conTest() throws SQLException {
         this.ConYN = dao.conTest();
         return SUCCESS;
     }
}
cs
9번 라인 : 위에서 생성한 dao를 생성합니다.
15번 라인 : 위에서 작성한 conTest() 메소드를 가져옵니다.



 6. struts2_test.xml 추가


이제는 URI에서 맵핑이 되도록 struts2_test.xml를 수정해보겠습니다. 

아래에 내용을 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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="struts2_test" namespace="/test"  extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success" >/WEB-INF/hello.jsp</result>
           </action>
           <action name="view" class="test.TestAction" method="getView">
                <result name="success" >/WEB-INF/test/view.jsp</result>
           </action>
             <!-- 데이터 베이스 연결 테스트 -->       
           <action name="conTest" class="test.TestAction"  method="conTest">
                <result name="success"  >/WEB-INF/test/conTest.jsp</result>
           </action>            
     </package>
</struts>
cs



 7. WEB-INF/test/conTest.jsp 파일 생성


뷰를 작성하기 위해 test 폴더 아래 해당 파일을 생성합니다. 

아래에 내용을 기입합니다. 
1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
       <body>
       접속 : ${ConYN}
       </body>
</html>
cs

${ConYN}을 이용해 데이터베이스 액세스를 체크 합니다.


 8. 결과 화면 


해당 URL에 접속하면 데이터베이스가 연결된걸 확인 가능합니다.


마무리



최대한 쉽게 가르켜드리려고 합니다.!

댓글을 달아 주세요


스트럿츠 세션을 알아보자


안녕하세요.
고코더 입니다.


오늘은 스트럿츠2에서 session을 사용하는 방법을 알아보려고 합니다.
스트럿츠는 자체적인 세션 처리기능을 제공 합니다.  
스트럿츠 action에서는 servlet을 사용하지 않기 때문에 메세드를 사용하게 됩니다. 
ActionContext안에 getSession 메세드를 사용합니다. 



 1. session 사용법


세션을 선언하는 방법
세션을 사용하는 기본 문법입니다. ActionContext안에 세션 메소드를 가져와
map 형태로 반환하므로 이를 맵에 담는 형식입니다.

1
2
ActionContext con = ActionContext.getContext();
Map session = con.getSession();
cs

세션에 데이터를 입력하는 방법
세션에 데이터를 넣는 방법은 간단합니다. map 형식이기에 변수를 설정하고 데이터를 입력합니다.
1
session.put("변수", 입력);
cs
세션에 데이터를 출력하는 방법
이 또한 단순합니다. 
1
session.get("변수");
cs

 2. 세션을 이용해 코딩을 해봅시다.


지난 시간에 개발한 코드에 얹어서 해당 세션을 개발합니다. 이 글로 먼저 들어오신분은 코드를 작성하고 싶다면
선행 학습 이후에 따라와주세요.
추가되는 메서드는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
String Session;
public String getSession() {
   return Session;
}
public void setSession(String Session) {
   
   ActionContext con = ActionContext.getContext();
   Map session = con.getSession();
   
   session.put("SessionTXT", Session);
   this.Session = (String)session.get("SessionTXT");
}    
cs

7,8번 : 세션 사용하기위해 선언합니다. 필요할때마다 호출해서 선언합니다.
10번 : 세션에 받아온 strong 데이터를 담습니다.
11번 : 세션에 있는 데이터를 string으로 형변환 하여 String Session으로 돌려 줍니다.



 3. 결과 화면 


이해만 하면 너무 간단하고 사용하기 쉬운 세션 방법입니다.

실무에서도 자주 사용하는 부분이니 꼭 학습하세요.


마무리


세션은 웹 프로젝트에 기본입니다.

댓글을 달아 주세요


스트럿츠 인코딩을 UTF-8로 해야하는 필수적인 4가지 파일


안녕하세요.
고코더 입니다.




제 게시물을 보면서 스트럿츠 학습 하고 있는 분에게 질문이 들어와 한번 짚고 넘어가려 합니다. 
프로그래밍 언어는 서양에서 만들어졌고 영어가 모든 명령어의 기본이라 그런지
언제나 영어를 기본으로 인코딩이 되어 있습니다. 한글을 사용하려면 euc-kr 이상이필요한데 말이죠
그리고 요즘은 글로벌 사이트가 많아서 utf-8로 하는게 정석입니다.
스트럿츠2도 역시 영어 인코딩에서 UTF-8로 바꿔줘야 합니다.

강의를 따라오신분은 제가 작성한 모든 파일이 UTF-8인코딩을 기본으로 하지만
한글깨짐으로 학습에 못따라오는 분을 위해 다시 한번 설명드립니다.



 1. JSP에서 UTF-8을 명시


JSP 파일 최상단에는 이 소스는 UTF-8이라고 명시를 해줘야 합니다.
아래 코드가 JSP 파일 맨위에 있는지 확인해보세요.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


 2. web.xml 에서 encoding 설정


web.xml 안에 UTF-8로 필터가 걸려있는지 확인해보세요.
스트럿츠 디스패처를 사용할 경우 UTF-8이 기본 인코딩라고 알려줘야 합니다. 

  <filter>
     <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
     <init-param>
     <param-name>struts.i18n.encoding</param-name>
     <param-value>UTF-8</param-value>
    </init-param>    
  </filter>




 3. server.xml 에도 URIEncoding 설정이 필요합니다.


각 아파치 톰캣으로 만든 파일에서 설정파일인 sever.xml에도 수정이 필요합니다.
이 부분은 스트럿츠 강의에 다루지 않았는데요. 처음 개발하는 분들이 여기에 많이 헤매시는거 같습니다.
중간에 보시면 아래 태그에 맨뒤에URIEncoding을 UTF-8로 지정해보세요

<Connector connectionTimeout="20000" port="8080"  protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>


 4. struts.properties 파일에 옵션 추가


스트럿츠 프로퍼티 파일에도 인코딩을 설정하는 파일이 있습니다. 위 3가지만 지키면 한글이 깨지지 않을텐데요.
혹시나 몰라서 이부분도 다시 기재드립니다. 프로퍼티 파일에 UTF-8을 지정하세요.
struts.i18n.encoding=UTF-8


마무리


영어권 나라가 부럽습니다.

댓글을 달아 주세요


스트럿츠2 struts.properties 파일로 프로젝트 설정 하기 


안녕하세요.
고코더 입니다.


오늘은 struts.xml 만큼 중요한 설정 파일을 알아봅니다. 프로젝트에 상세한 설정을 할 수 있는 properties 파일에 대해 알아봅니다. 모든 언어에는 해당 언어에 대한 옵션을 변경 가능한 설정 파일이 존재합니다. 스트럿츠2에서도 당연히 존재합니다.
말그대로 속성을 지정하는 이 파일을 생성하고 옵션을 입력해보겠습니다.



 1. struts.properties 대해


struts.properties 는 프레임워크에 대한 상세 설정은 변경 가능합니다. 그런데 가끔 스트럿츠를 가르킬때
해당 파일을 작성하지 않고 하는 경우도 많은데 해당 파일이 없다면 기본설정으로 작동하게 됩니다.
속성을 바꾸면 설정을 오버라이드 하는 방식입니다. 
스트럿츠2의 기본 확장자는 action이지만 액션을 그대로 쓰는 한국 웹사이트는 거의 없습니다.
해당 확장자를 바꾸는 것도 이 파일에서 진행 됩니다. 
그리고 다양한 디버그 옵션들도 이 파일에서 사용할 수 있도록 설정이 가능합니다. 


 2. struts.properties 생성 방법


해당 파일 역시 src 아래에 struts.xml에 입력합니다. 이 파일 역시 struts.xml과 동일하게 src에 파일이 서버 작동시 자동으로 classes로 배포 되기 때문입니다. 
해당 파일은 이클립스 기본 파일 만들기에 존재하지 않으므로 메모장으로 만든 후에 붙혀넣기 형식으로 입력 합니다. 



 3. struts.properties 설정 


실무에서 많이 사용하는 내용 중심으로 개발을 진행합니다.
해당 영어 이외에 문자가 들어가지 못하므로 한글로 주석 처리를 할 수 없습니다.
struts.i18n.reload=true : 소스 파일을 수정후에 리스타트 없이 적용 시켜줍니다
struts.configuration.xml.reload = true : 설정 XML을 새로고쳐질때마다 로딩 합니다.
struts.devMode = false : 스트럿츠 개발 모드를 on 합니다. 하지만 보안 취약점때메 보통 on을 금합니다. 
struts.custom.i18n.resources=globalMessages,globalConfig :  resource properties파일을 지정합니다.
struts.action.extension=action : 기본 확장자를 변경합니다. action이 기본입니다. 보통 .do로 많이 변경합니다.
struts.ognl.allowStaticMethodAccess=true : static 변수나 메소드 사용할 수 있게 해줍니다.
struts.i18n.encoding=UTF-8 : 인코딩 설정을 바꿉니다. 한글이 깨지면 이걸 수정


마무리


뭔가 필요하다 싶으면 이 파일 옵션을 찾아보세요.

댓글을 달아 주세요


스트럿츠2 struts.xml 파일을 로직별로 서비스별로 나누기 


안녕하세요.
고코더 입니다.


이번 시간에는 struts.xml를 알아보고 이를 inlcude 해서 파일을 나누고
namespace 를 사용하는 방법을 알아보려고 합니다. 
이 파일은 스트럿츠에서 가장 중요한 역할을 합니다 (다 중요하다고 하네요)
좀 더 자세히 공부하고 싶다면 기존 강의를 참고하고 넘어오세요


 1. struts.xml 란?


시작부터 계속 수정하고 있는 이 파일을 간단하게 알아보려고 합니다.
- 스트럿츠2에 환경설정 파일은 struts.xml 입니다. 
- 웹 애플리케이션내의 처리 흐름을 설정 합니다. 
- 요청 이전 을 처리하는 process
- 요청 이후를 처리하는 interceptor 
- 통상 WEB-INF에 위치 하지만 배포등을 위해 src 폴더에 위치하는게 실무에서는 거의 정석입니다.

sturts.xml 태그  
* struts : struts.xml 의 시작 태그. package, include, bean, constant 가 포함되어 있습니다.
* package : 논리적인 그룹핑 단위 입니다. 상속이 가능하고 하위 패키지에 오버라이드 될 수 도 있습니다.
* name : 고유 키이며 맵핑 값을 나타냅니다. 
* namespace : 접근 되는 고유에 패스를 분리 할 수 있습니다. 서비스 별로 접근 경로를 분리할 수 있습니다. 


 2. struts.xml 생성 


파일 new에서 XML FILE을 선택하고 next를 클릭 합니다.

그리고 파일명과 패키지는 이렇게 생성합니다.
폴더 : Struts2Gocoder/src/map 
파일명 : struts2_test.xml

새로 개발된 파일명은 이렇게 코딩 합니다. namespace를 test로 하였습니다.
이는 이제 접근 경로 URI 앞에 test가 덧붙혀 집니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
<struts>
     <package name="struts2_test" namespace="test"  extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success" >/WEB-INF/hello.jsp</result>
           </action>
           <action name="view" class="test.TestAction" method="getView">
                <result name="success" >/WEB-INF/test/view.jsp</result>
           </action>      
     </package>
</struts>
namespace를 활용해 URI를 분리 할 수 있습니다.


 3. src/struts.xml 파일 수정


기존 스트럿츠 xml 파일은 아래처럼 변경 됩니다. 
전부 새로 만들어진 설정파일로 이동하고
include file 태그래 해당 XML을 가르킵니다. 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
<struts>
     <package name="Struts2Gocoder" extends="struts-default">          
     </package>
    
     <include file="map/struts2_test.xml" />
               
</struts>
참조될 xml은 해당 파일 위치에서 부터 찾습니다. src 폴더 아래이므로 xml로 시작합니다. 



결과 화면 


이전에 만든 소스를 그대로 나타납니다. 하지만 URI 중간에 /test가 생겼습니다.
네임스페이스 영향 떄문입니다. 서비스 별로 xml을 달리하여서 개발하는게 유지보수에 유리합니다.
게시판, 로그인, 가입 등 서비스가 다른 것들은 XML 파일을 전부 구분합니다.


마무리


하나의 XML로 관리하는 것 보다. 나누는 것이 유리 합니다.

댓글을 달아 주세요


ActionSupport 기본 예제


안녕하세요.
고코더 입니다.


이제 헬로우도 끝났고 ActionSupport에 대해 배워 보려고 합니다. 
지난 시간에는 최대한 간단하게 코드를 위해 action으로 구현했습니다.
이번 시간에는 실무에서 많이 사용하는 액션인 ActionSupport 활용해 개발해보겠습니다.



TestAction.java 파일 생성


게시판을 만들기 위해 class명TestAction을 생성 합니다. 패키지는 test 입니다. 

그리고 소스 내용은 아래처럼 채웁니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package test;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
     String Title;
     String Content;
     public String getTitle() {
           return Title;
     }
     public void setTitle(String Title) {
           this.Title = Title;
     }
     public String getContent() {
           return Content;
     }
     public void setContent(String Content) {
           this.Content = Content;
     }
     
     public String getView() {
           //this.Title = "제목";
           //this.Content = "내용";
           return SUCCESS;
     }
}
cs
3번 라인 : 이전 시간과 달리 ActionSupport를 사용합니다.
6번 라인 : get으로 뷰 Title 값을 전달합니다.
9번 라인 : set은 파라미터에 값을 받아 사용할 수 있습니다.
19번 라인 : 게시판에 상세보기를 getView()로 생성하였습니다.



view.jsp 생성


이제 게시판에 상세뷰를 보여줄 수 있는 jsp를 생성합니다. 기존 WEB-INF에 test 라는 폴더아래 파일을 생성하겠습니다. 

그리고 내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
     제목 : ${Title}
     내용 : ${Content}
</body>
</html>
cs



struts.xml 수정 - method 사용


액션 클래스가 생성 되었으니 struts.xml 파일에도 수정이 필요합니다. 
지난 시간에 다룬 헬로우와 다른건 method가 존재합니다. 해당 메소드는 클래스에 메소드까지 참조합니다.

1
2
3
4
5
6
7
8
9
10
11
12
<?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="Struts2Gocoder" extends="struts-default">         
             <action name="view" class="test.TestAction"  method="getView">
                 <result name="success"  >/WEB-INF/test/view.jsp</result>
             </action>  
       </package>                
</struts>
cs
7번 라인 : method는 해당 클래스에 지정된 메소드를 실행 합니다. 
8번 라인 : 맵핑 될 view 소스 주소를 기록 합니다. 


결과 화면 


오늘 실습해본 URL


Struts2에서 action(액션)이란 Action 과 ActionSupport의 차이 


스트럿츠에서 액션은 로직을 수행하는 역할로 가장 중요한 개념입니다. 서블릿의 역할을 하며 실질적인 비지니스 로직을 수행합니다. 
Bean으로의 역할로 getter(게터), setter(세터)를 통해 데이터 값을 빈에 저장합니다. 

2가지 액션의 차이
- com.opensymphony.xwork2.Action
- com.opensymphony.xwork2.ActionSupport

두 액션의 가장 큰 차이는 상속 방법으로 나뉠수 있습니다.
ActionSupport - extends(클래스 상속)
Action- implements(인터페이스 구현)

extends하는 ActionSupport는 다양하게 확장이 가능한 구조라는걸 한눈에 알 수 있습니다.
실무에서 가장 많이 사용하는 ActionSuppot 방식은 유효성 검사, 형 변환, 모델 오브젝트등을 사용 가능하며 
Action , Validateable, ValidationAware, TextProvider, LocaleProvider 인터페이스를 구현함으로 다양한 활용이 가능합니다.



마무리


최대한 느리고 천천히 진도를 나가려고 합니다.
그리고 시간이 날때마다 올리겠습니다. (요즘 바뻐서..)

댓글을 달아 주세요


첫번째 스트럿츠 


안녕하세요.
고코더 입니다.


지난 시간에 이클립스에 jar를 복사하면서 스트럿츠 프로젝트르 변신 시켰습니다.
이번엔 스트럿츠가 제공하는 프레임워크 기능으로 Hello를 표현 해보겠습니다. 
최대한 쉽고 알기 쉽게 설명해보려고 합니다.


 1. 만들어진 프로젝트에서 src 폴더 위에서 class를 생성하겠습니다. 파일 이름은 HelloAction 이고 패키지명은 단순하게 hello으로 해보겠습니다.
스트럿츠에서는 보통 컨트롤러와 같은 역할을 하는 action을 주는 클래스가 있는 파일은 Action을 넣어줍니다. 

 2. 패키지명과 파일 이름을 입력 하고 finish를 누릅니다. 


 3. 만들어진 파일에 내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package hello;
import com.opensymphony.xwork2.Action;
public class HelloAction implements Action{
       
       private String msg;
       
       public String getMsg(){
              return msg;
       }
       
       @Override
       public String execute() throws Exception {
              // TODO Auto-generated method stub
              
              this.msg="Hello Struct2 GoCoder.Net ";
              return SUCCESS;
       }
}  
cs

2번 라인 : 스트럿츠 action 기능을 사용하기 위해 선언합니다. 필수적인 기능입니다.
3번 라인 : Action을 구현하기 위해 상속합니다.
7번 라인 : get을 붙인 함수는 자동적으로 view에 변수를 제공합니다. 그러므로 msg는 jsp에서 el 태그로 사용할 수 있습니다.
12번 라인 : Action 인터페이스의 execute( ) 메소드를 오버라이드 합니다. 
16번 라인 : SUCCESS는  Action 인터페이스의 리턴 값이 있음을 지정한다.



struts.xml 생성

 4. src 폴더 아래 struts.xml을 생성 합니다. 이 파일은 스트럿츠에서 환경파일을 설정하는 가장 중요한 파일입니다. 
자세한 내용은 다시 설명하게 될 것이니 한번 아래 코드를 우선 따라 하면서 배워보시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
<?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="HelloStruts2" extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success"  >/WEB-INF/hello.jsp</result>
           </action>
     </package>
</struts>
cs

7번 라인 : 해당 패키지 name을 지정 합니다. 
8번 라인 : name은 브라우저가 요청한 주소를 맵핑 합니다. URI가 되므로 중요한 부분입니다. class는 위에서 만든 java 클래스 안에 수행할 객체를 지정합니다. 
9번 라인 : 맵핑 될 view 소스 주소를 기록 합니다. 


web.xml 수정


 5. 스트럿츠를 사용하기 위해서는 해당 파일에 꼭 필요한 옵션을 줘야 합니다.
아래 코드를 붙혀넣어주세요.

1
2
3
4
5
6
7
8
9
  <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>
cs
 

hello.jsp 생성

 6. 이젠 뷰를 생성해야 합니다. struts.xml에서 지정한 위치에 파일을 생성해야 합니다.

1
2
3
4
5
6
7
8
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<body>
     ${msg}
</body>
</html>
cs

6번 라인 : HelloAction에서 작성한대로 msg 변수를 el태그로 호출 합니다.


결과 화면 


 7. 해당 URL로 접근하면 아래처럼 헬로우가 나타납니다. 


 8. 헬로우 까지의 소스 상황입니다. 3개의 파일을 만들었고 1개의 파일을 수정했습니다. 



마무리


이해만 하면 쉽습니다.

댓글을 달아 주세요


스트럿츠 프로젝트로 만들기


안녕하세요.
고코더 입니다.



 1. 오늘 부터는 예전에 개인적으로 학습한 자료를 통해 스트럿츠를 함께 알아보려고 합니다. 
스트럿츠 강의가 너무 오래됐거나 거의 존재하지 않아 제가 게시판까지 강의를 남겨보려고 하는데요.
하지만 요즘 일정이 많아서.. 자신은 없지만.. 여튼 시작해보겠습니다.

 2. 스트럿츠는 강력하고 쉽게 웹프로그래밍을 개발하기 위한 프레임워크 입니다. 
우리가 사용할 스트럿처 버전은 2.1버전 입니다. 네 맞습니다. 오래된 버전입니다.
하지만 최근에 자바는 스프링이 기본이고 스트럿처로 새로운 프로젝트를 하는 경우는 거의 없습니다.
고도화를 하지 못한 오래된 프로젝트에서는 스트럿츠를 사용중이고 대부분 2.1버전이 많습니다.
그래서 이 강의를 보는 분도 대부분 회사에서 오래된 스트럿츠 프로젝트 위해 읽어보고 계실거라 생각 됩니다.


 3. 우선 이클립스를 다운로드 받아 실행해주세요. 최신 버전으로 아무거나 설치하셔도 상관 없습니다. 
이클립스에서 File -> New -> Dynamic Web Project를 클릭하여 웹프로젝트를 생성 합니다. 


 4. 그리고 프로젝트명은 "struts_gocoder"로 설정해주세요.(개인이 원하시는 프로젝트명으로 하셔도 상관 없습니다)


 5. 웹프로젝트에 스트럿츠는 jar 파일로 확장하는 방법입니다.
이 스트럿츠가 만들어 배포하는 jar파일을 lib 폴더에 넣는것으로 스트럿츠를 사용할 수 있게 됩니다.
그럼 프로젝트가 완성되고 WebContent -> lib 폴더에  제가 첨부한 jar 파일을 업로드 합니다.  
그리고 해당 폴더를 탐색기로 여는 방법은 아래 링크 참조

 6. 그리고 view폴더를 생성하 hello.jsp를 만들어보겠습니다.


 7. 그리고 서버를 접속하면 이렇게 헬로우가 떴습니다. 물런 스트럿츠 기능은 하나도 사용안한 파일이기에 의미 없지만 그냥 끝내면 재미 없을거 같아 jsp를 생성했습니다. 
톰캣 서버 설정은


마무리


스트럿처는 jar로 된 프레임워크다. 
jar를 복사하면 사용이 가능하다.
이거만 알아두면 되겠네요




댓글을 달아 주세요


스트럿 파일을 다운로드 합시다.


안녕하세요.
고코더 입니다.


 1. 스트럿츠 학습을 위한 첫번째 걸음은 바로 공식 홈페이지에서 관련 파일을
다운로드 하는 것입니다. apache 스트럿을 공식 다운로드 하는 사이트입니다.


 2. 성공한 오픈소스 프로젝트는 스트럿처에 대한 간단한 설명과 함께 다운로드 버튼이 보입니다.
스프링이 없었다면 여전히 가장 사랑받는 프레임워크이었을텐데요.

 3. 다운로드에 보면 버전별로 배포 버전 응용버전 문서버전등 다양한 버전이 있는데
우리에게 필요한건 가장 위에 Full Distribution 버전입니다. 

 4. 최신 스트러처 파일 내용은 아래와 같고 lib가 폴더에 jar 많이 찾으시겠죠.



마무리


귀찮은 분들을 위해 현재 최신 스트럿처(2.5) 첨부 파일도 올려둡니다.



댓글을 달아 주세요