'Programming/Struts2'에 해당하는 글 3건

일반 Java 웹프로그래밍에서의 MVC.

 

  1. 사용자가 jsp(view) 페이지에 접근.
  2. 링크나 폼 등을 전송하여 서블릿에 요청.
  3. web.xml 에 맵핑된 서블릿(controller) 호출.
  4. 서블릿은 클래스(model)로부터 객체를 생성하고 처리 결과를 view로 보냄.
  5. 반환 값을 받은 jsp(view) 페이지를 사용자에게 출력.

 

Struts 에서의 MVC.

 

  1. 사용자가 jsp(view) 페이지에 접근.
  2. 링크나 폼 등을 전송하여 Action 클래스에 요청.
  3. struts.xml 에 맵핑된 Action 클래스(controller) 호출.
  4. Action 클래스는 클래스(model)로부터 객체를 생성하고 처리 결과를 view로 보냄.
  5. 반환 값을 받은 jsp(view) 페이지를 사용자에게 출력.

 

차이는 Servlet <-> Action 클래스인데... 왜 굳이 Struts를... ㅜㅜ

 

index.action 페이지에서 action 링크를 클릭하면,
Action 클래스에서 결과를 hello.action 으로 보내는 프로세스를 구현해 봅니다.

 

 

1. model 생성 (src/main/java)

 

우선 view 페이지에 메시지가 출력되도록 POJO java(model) 파일을 작성합니다.
model 클래스는 JavaBean 스타일에 따라 set/get 메소드를 사용하여 작성합니다.

 

file: MessageStore.java

package com.oops4u.web.helloworld.model;

public class MessageStore {

    private String message;

    public MessageStore() {
        setMessage( "Hello Struts User" );
    }
 
    public String getMessage() {
        return message;
    }
 
    public void setMessage( String message ) {
        this.message = message;
    }
}

 

MessageStore 객체를 생성하면 멤버 변수(message)에 "Hello Struts User" 가 저장될 것이고,
set~ 로 새메시지를 저장하거나 get~ 로 반환할 수 있습니다.

 

 

2. Controller(Action) 생성(src/main/java)

 

view 페이지에서 클릭 등으로 호출할 action 클래스 입니다.
model 클래스에서 결과값을 가져와 view 페이지로 렌더링 합니다.

 

file: HelloWorldAction.java

package com.oops4u.web.helloworld.action;

import com.oops4u.web.helloworld.model.MessageStore;
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    private MessageStore messageStore;
   
    public String execute() throws Exception {
       messageStore = new MessageStore();
       return SUCCESS;
    }
   
    public MessageStore getMessageStore() {
       return messageStore;
    }
   
    public void setMessageStore( MessageStore messageStore ) {
       this.messageStore = messageStore;
    }
}

위에 작성한 Model 과 com.opensymphony.xwork2.ActionSupport 클래스를 import 합니다.
그리고 ActionSupport 로부터 상속받으면 Action 클래스는 SUCCESS, ERROR, INPUT 처럼 결과를 반환할 수 있습니다.
private static final long serialVersionUID = 1L;
이건 직렬화랑 연관된 듯한데 잘 모르겠고, 암튼 JVM에서 UID를 자동 생성하란 뜻입니다.ㅋ
위에서는 execute 메소드가 model 클래스의 객체 생성과 SUCCESS 값을 반환합니다.

 

 

3. 출력될 View 생성(src/main/webapp)

 

Action 클래스에서 저장된 문자열을 출력할 view 를 생성합니다.
이것은 링크로부터 Action 클래스가 실행된 후 결과를 나타낼 페이지 입니다.

 

file: HelloWorld.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello World!</title>
</head>
<body>
    <h2><s:property value="messageStore.message" /></h2>
</body>
</html>

 

Struts 태그 라이브러리를 사용하여 속성값을 출력합니다.
<s:property />의 속성 값에서 messageStore는 Action 클래스에서 생성된 객체이며 message 는 객체의 멤버변수(문자열)입니다.
결과는 "Hello Struts User" 가 보여지겠네요.
어떻게 HelloWorldAction의 execute 메소드가 실행되고 결과 페이지인 HelloWorld.jsp 를 렌더링 하는지는
struts.xml 파일에서 Action에 대한 맵핑 설정을 수정하면 됩니다.

 

 

4. Struts 구성 (src/main/resources)

 

struts.xml 파일에 Action 클래스와 view 페이지와의 URL의 맵핑이 필요합니다.

 

<?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>
    <constant name="struts.devMode" value="true" />
    <package name="basicstruts2" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
 
        <action name="hello" class="com.oops4u.web.helloworld.action.HelloWorldAction" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>

    </package>
</struts>

 

hello.action이 호출되면 HelloWorldAction의 execute메소드를 실행하고 반환값이 success이면 HelloWorld.jsp 파일을 렌더링 하도록 작성하였습니다.

 

 

5. Index 페이지 수정 (index.jsp)

 

hello Action 클래스의 execute 메소드를 실행하도록 페이지에 링크를 추가합니다.

 

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Welcome</title>
</head>
<body>
<h2>Hello World!</h2>
    <p><a href="<s:url action='hello'/>">Hello World</a></p>
</body>
</html>

 

굳이 태그 라이브러리를 사용하였습니다 ^^
위 url 태그는 hello.action 으로의 링크를 생성합니다.
배포하고나면 index.jsp 파일에서 링크를 클릭하면 hello.action 이 실행되며 "Hello Struts User" 를 나타낼 것입니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

start Struts2

Programming/Struts2 2013. 5. 27. 21:23

Maven을 사용한 Struts2 웹 어플리케이션 만들기

 

webapp archetype으로 웹 어플리케이션을 만들었다면,
app/src/main/webapp 디렉토리의 index.jsp 파일을 아래의 주소로 확인할 수 있습니다.
http://localhost:8080/app/index.jsp

 

 

이제 Struts2 프레임워크를 사용하기 위해 pom.xml 파일에 dependency 요소를 추가합니다.
Struts2 구동에 필요한 jar 파일들이 WEB-INF/lib 디렉토리에 다운로드 됩니다.

 

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.14</version>
</dependency>

 

 

모든 클라이언트 요청(/*)에 대해 Struts2 Filter Dispatcher 를 사용하도록,
 web.xml 파일에 <filter />, <filter-mapping /> 요소를 추가합니다.

 

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

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

Struts2는 URL, 클래스, 뷰페이지 사이의 관계를 지정하기 위해 XML 설정 파일이나 메타데이터(annotation)을 사용할 수 있습니다.
XML 설정 파일을 사용하는 방법으로 아래의 내용을 src/main/resources 디렉토리에 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>
    <constant name="struts.devMode" value="true" />
    <package name="basicstruts2" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

 

<constant /> 요소는 프레임워크 속성을 설정하는데 위에서는 개발모드(devMode)로 실행한다고 설정하였습니다.
action 이름은 index 이며 index.action 을 호출하면 결과 페이지로 index.jsp 파일이 렌더링 됩니다.

 

 

"index.jsp 와 index.action 은 같은 페이지를 출력하지만 같은 것이 아님에 주의하라!"

 

아무것도 없이 단지 action 맵핑뿐인 위 예제로는 도저히 이해할 수 없는 주의..;;


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Struts2

Programming/Struts2 2013. 5. 8. 00:30

Apache Struts2 는 자바 웹 응용 프로그램을 만들기 위한 확장 프레임워크입니다.
이 프레임워크는 어플리케이션의 전체 개발 주기(빌드, 배포, 유지보수)를 간소화하도록 설계되었습니다.

 

 

Build

 

  • Easy startup - 튜토리얼과 템플릿 어플리케이션, Maven archetype으로 새로운 프로젝트를 쉽게 만들수 있습니다.
  • Improved Design - 코드는 독립된 HTTP 프레임워크 인터페이스들로 깔끔합니다.
  • Enhanced Tags - 자체 마크업을 제공하는 스타일 시트 기반의 폼 태그로 간략해진 코드.
  • Stateful Checkboxes - 체크박스가 토글됐을 때에 별도의 핸들링을 하지 않습니다.
  • Flexible Cancel Buttons - 취소 버튼 클릭시 다른 액션으로 곧장 갑니다.
  • First-class AJAX support - 표준 Struts 태그 같은 AJAX 태그로 상호 작용과 유연성을 추가합니다.
  • Easy Spring integration - 별도의 연결 코드 없이 Spring 을 사용하여 Actions 에 종속성을 더합니다.
  • Enhanced Results - JasperReports, JFreeChart, Action chaining 및 파일 다운로드에 대해 더 많은 특별한 결과를 수행합니다.
  • POJO forms - 더 이상의 ActionForms은 없습니다. 폼 입력을 수집하거나 Action 클래스에 직접 속성을 넣으려면 JavaBean을 사용하세요. 바이너리, Spring 속성 둘다 사용하세요!
  • POJO Actions - Action 클래스처럼 모든 클래스를 사용합니다. 인터페이스는 선택 사항입니다.

 

 

Deploy

 

  • Easy plugins - JAR를 끌어다 놓아 프레임 워크 확장을 추가합니다. 어떤 수동 구성도 필요하지 않습니다. JavaServer Faces, JasperReports, JFreeChart, Tiles, 등 지원.
  • Integrated profiling - 어디로 주기가 진행되는지 찾기 위해 Struts2 내부를 살펴 봅니다.
  • Precise Error Reporting - 에러난 위치와 행을 즉시 알림.

 

 

Maintain

 

  • Easy-to-test Actions - 모의 HTTP 객체에 재손실없이 Struts2 Actions을 바로 테스트 합니다.
  • Intelligent Defaults - 명확하고 중복 설정이 없습니다. 대부분의 프레임워크 구성 요소는 우리가 설정하고 없앨 수 있는 기본 값을 가집니다.
  • Easy-to-customize controller - 원하는 경우, 액션 당 요청 처리를 사용자 정의합니다.
  • Integrating Debugging - 내장된 디버깅 툴로 보고된 문제를 조사합니다.
  • Easy-to-tweak tags - FreeMarker 템플릿을 편집하여 사용자 정의 태그를 만듭니다. taglib API를 이해할 필요가 없습니다. JSP, FreeMarker, Velocity 태그를 완벽히 지원합니다.

 

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,