Struts2

Hagi 2010. 2. 3. 11:19

helloWorld예제를 돌릴때, java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger 이러한 에러가 발생하였다.

뭐 돌아가는데는 지장이 없었지만... 그래서 jar파일이 하는 역할에 대해 조사해보고자 한다.

 

commons-logging-1.1.jar allows Struts2 components to log messages in a configurable manner. The Apache commons-logging library provides an abstraction so that developers can write log messages without adding dependencies (such as log4j). The commons-logging library can use other logging frameworks such as log4j, but how commons-logging operates is controlled through run-time configuration. Check the Apache commons-logging web site for more details. freemarker-2.3.8.jar is used within Struts2 to generate the output for the majority of the Struts2 tags. Freemarker is a template language and library that is preferred by many web developers. We will cover Freemarker in another entry when we discuss customizing the Struts2 tags. ognl-2.6.11.jar is also used by Struts2 tags. OGNL stands for Object Graph Notation Language and more information can be found at http://www.ognl.org. OGNL provides a programming language that the Struts2 tags can evaluate when reading attributes. The OGNL is very handy and can easily refer to many of the built-in objects in a JSP. We will cover OGNL and the objects accessible within the tag attributes in another entry as well. struts2-core-2.0.6.jar and xwork-2.0.1.jar contain the core components and resources of the Struts2 framework.

 

1. commons-logging-1.1.jar : log 기록을 조정하는 Struts2의 한 구성요성(컴포넌트)이다. log4j같은 것도 연동 가능

 

2. freemarker-2.3.8.jar : Struts2 태그의 대부분이 여기에 포함된다.

 

3. ognl-2.5.11.jar : 이것 또한 Struts2 태그를 위해 사용한다.

 

4. struts2-core-2.0.6.jar와 xwork-2.0.1.jar : Struts2 framework의 핵심적인 것들을 가지고 있다.

 

 

위 에러는 여러가지 실험 결과 struts2-core의 버전 문제인 듯하다. struts2-core-2.0.14.jar로 교체하고 ogln파일(jar)을 넣어주었더니 위와 같은 에러가 발생하지 않았다. log에러인데 commons-logging문제가 이니라...?? 암튼... 헴헴

아~ 그리고 struts1처럼 taglib의 jar파일이 따로 있는 것이 아니었다. core에 포함되어있었따.

 
 
 

Struts2

Hagi 2010. 2. 2. 11:37

 

 

아직 공부 초기 단계라 잘 몰르겠지만...

Struts2가 개발자가 비지니스로직, 결과 페이지, 환경설정에 집중하도록 하는 프레임워크란다. 그렇다면 Ation의 execute()메서드는 Servlet에서 request와 reponse를 한꺼번에 관리하여 개발자 편리를 도모할 것 같다.

 

이것을 알아보기 위해서 어제 하루종일 helloWorld예제를 돌려보았는데, 결과는 참패였다. action이 mapping되지 않는다는 둥~ location이 어쩌구 저쩌구... 근데 오늘 아침에 다시 와서 하니까 된다. ㅜ,.ㅜ 아~ 이런거 제일 싫은데... 이유를 모르겠다.

 

아무튼 기억나는 것은 ...

1. struts.xml 파일을 src 아래 넣어도 안되고 WEB-INF 밑에 classes에 넣어야 한다는 것이다.(log4j의 properties파일 처럼 여기가 default인갑다.)

2. log4j로 로그를 찍어보면

[DEBUG] (CommonsLogger.java) - Loading action configurations from: struts.xml
[DEBUG] (CommonsLogger.java) - Creating revision for URL: file:/C:/dev/java/project/j2ee/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/struts2-blank-2.1.8.1/WEB-INF/classes/struts.xml
[DEBUG] (CommonsLogger.java) - Loaded action configuration from: struts.xml
[INFO] (CommonsLogger.java) - Parsing configuration file [struts.xml]

  이렇게 나와야 하는데, 실행 되지 않았을 때는

[DEBUG] (CommonsLogger.java) - struts.properties missing 처럼 struts.xml missing이 나왔었다.

 

혹시 안되는 분들을 위하여 소스를 올려놀까 한다.

http://localhost:9090/struts2-blank-2.1.8.1/helloWorld.action

실행시 이렇게 하는데... 프로젝트 명이 struts2-blank-2.1.8.1이고, action명이 helloWorld이기 때문이다.

<?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="default" namespace="/" extends="struts-default">
        <action name="helloWorld" class="example.HelloWorld">
            <result>
               /example/HelloWorld.jsp
            </result>
        </action>
    </package>

</struts>

또 HelloWorld.java에서 당연한 말이겠지만 ㅋㅋㅋ

implements Action은 적지 않아도 실행이 가능하였다.

 

helloWorld예제 소스  struts2-blank-2.1.8.1.war

- 첨부파일

struts2-blank-2.1.8.1.war  
   

 
 
 

Struts2

Hagi 2010. 2. 1. 17:56

web.xml에서의 설정

=======================================================================================================================

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>

    <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>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

</web-app>

=======================================================================================================================

Struts 1.X에서는 *.do만을 통과시켰던 것 같은데... 오래되서 기억이 나지 않는군... 암튼 위와 같이 설정한다.