struts-ch4.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>
	<package name="ch4-4" namespace="/ch4" extends="struts-default">
		<!-- 데이터 전송 -->
		<action name="helloWorld3" class="com.ch4.action.HelloWorld3">
			<interceptor-ref name="params" />
				<result name="success">hello.jsp</result>
		</action>
		<!-- Action 인터페이스 사용 및 유효성 검사 -->
		<action name="helloWorld4" class="com.ch4.action.HelloWorld4">
			<interceptor-ref name="params" />
			<result name="input">name4.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- ActionSupport 사용 및 유효성 검사 -->
		<action name="helloWorld5" class="com.ch4.action.HelloWorld5">
			<interceptor-ref name="params" />
			<interceptor-ref name="workflow" />
			<result name="input">name5.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- 도메인 오브젝트 사용1 -->
		<action name="createUser" class="com.ch4.action.CreateUser">
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
	</package>	
</struts>

userForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>도메인 오브젝트 테스트</title>
</head>
<body>
<form action="createUser.action" method="post">
	이름 : <input type="text" name="name"><br/>
	나이 : <input type="text" name="age"><br/>
	이메일 : <input type="text" name="email"><br/>
	<input type="submit" value="전송">
</form>
</body>
</html>

createSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>도메인 오브젝트 테스트</title>
</head>
<body>
사용자를 추가했습니다.<br/>
${user}
</body>
</html>

CreateUser.java
package com.ch4.action;

import com.ch4.dao.UserDao;
import com.ch4.domain.User;
import com.opensymphony.xwork2.Action;

public class CreateUser implements Action{

	//멤버변수
	private String name;
	private String age;
	private String email;
	
	@Override
	public String execute() throws Exception {
		//User 오브젝트 생성
		User user = new User();
		user.setName(name);
		user.setAge(age);
		user.setEmail(email);
		
		//Dao 생성
		UserDao userDao = new UserDao();
		userDao.createUser(user);
		
		return SUCCESS;
	}
	//setter
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

nterceptor가 낚아 챈다

CreateUser의 setter를 실행시켜서 

execute() 에 User 오브젝트를 생성한다








위에 방식은 java의 방식

이번 방식은 Struts2 만의 방식 

struts-ch4.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>
	<package name="ch4-4" namespace="/ch4" extends="struts-default">
		<!-- 데이터 전송 -->
		<action name="helloWorld3" class="com.ch4.action.HelloWorld3">
			<interceptor-ref name="params" />
				<result name="success">hello.jsp</result>
		</action>
		<!-- Action 인터페이스 사용 및 유효성 검사 -->
		<action name="helloWorld4" class="com.ch4.action.HelloWorld4">
			<interceptor-ref name="params" />
			<result name="input">name4.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- ActionSupport 사용 및 유효성 검사 -->
		<action name="helloWorld5" class="com.ch4.action.HelloWorld5">
			<interceptor-ref name="params" />
			<interceptor-ref name="workflow" />
			<result name="input">name5.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- 도메인 오브젝트 사용1 -->
		<action name="createUser" class="com.ch4.action.CreateUser">
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
		
		<!-- 도메인 오브젝트 사용2 -->
		<action name="createUser2" class="com.ch4.action.CreateUser2">
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
	</package>	
</struts>
userForm2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>도메인 오브젝트 테스트</title>
</head>
<body>
<form action="createUser2.action" method="post">
	이름 : <input type="text" name="user.name"><br/>
	나이 : <input type="text" name="user.age"><br/>
	이메일 : <input type="text" name="user.email"><br/>
	<input type="submit" value="전송">
</form>
</body>
</html>

스트럿츠2의 방법


user.name

user.age

user.email


라고 쓰면 user를 자바빈으로 인식


코딩이 줄어들면서

위에와 동일한 일을 한다


하지만 이 방식은 권장 방식이 아니다 

-> 자바빈의 명칭이 바뀔 경우 다 뜯어 고쳐야된다(의존성이 높은 코드)


이러한 방식이 있다는것만 알아두자 








권장 방식


struts-ch4.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>
	<package name="ch4-4" namespace="/ch4" extends="struts-default">
		<!-- 데이터 전송 -->
		<action name="helloWorld3" class="com.ch4.action.HelloWorld3">
			<interceptor-ref name="params" />
				<result name="success">hello.jsp</result>
		</action>
		<!-- Action 인터페이스 사용 및 유효성 검사 -->
		<action name="helloWorld4" class="com.ch4.action.HelloWorld4">
			<interceptor-ref name="params" />
			<result name="input">name4.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- ActionSupport 사용 및 유효성 검사 -->
		<action name="helloWorld5" class="com.ch4.action.HelloWorld5">
			<interceptor-ref name="params" />
			<interceptor-ref name="workflow" />
			<result name="input">name5.jsp</result>
			<result name="success">hello.jsp</result>
		</action>
		
		<!-- 도메인 오브젝트 사용1 -->
		<action name="createUser" class="com.ch4.action.CreateUser">
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
		
		<!-- 도메인 오브젝트 사용2 -->
		<action name="createUser2" class="com.ch4.action.CreateUser2">
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
		<!-- 도메인 오브젝트 사용3 -->
		<!-- interceptor 순서를 반드시 지킬것 -->
		<action name="createUser3" class="com.ch4.action.CreateUser3">
			<interceptor-ref name="prepare" />
			<interceptor-ref name="modelDriven" />
			<interceptor-ref name="params" />
			<result name="success">createSuccess.jsp</result>
		</action>
	</package>	
</struts>
CreateUser3.java
package com.ch4.action;

import com.ch4.dao.UserDao;
import com.ch4.domain.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class CreateUser3 implements Action,Preparable,ModelDriven{

	private User user;
	
	@Override
	public String execute() throws Exception {
		UserDao userDao = new UserDao();
		userDao.createUser(user);
		
		return SUCCESS;
	}
	//생성된 자바빈 객체에 params 인터셉터가 데이터를 저장할 수 있도록
	//value stack 상단에 자바빈 객체를 올려주는 역할 수행
	@Override
	public Object getModel() {
		return user;
	}
	//자바빈 객체 생성
	@Override
	public void prepare() throws Exception {
		user = new User();
	}

}
userForm3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>도메인 오브젝트 테스트</title>
</head>
<body>
<form action="createUser3.action" method="post">
	이름 : <input type="text" name="name"><br/>
	나이 : <input type="text" name="age"><br/>
	이메일 : <input type="text" name="email"><br/>
	<input type="submit" value="전송">
</form>
</body>
</html>

interceptor가 2개가 늘어남
prepare -> CreateUser3.java prepare()를 동작 시킴

modelDriven -> getModel()를 동작시킴 

params -> 셋팅

xml에 명시할경우
위에 있는 순서를 지켜야된다






이 게시물 공통 사용 코드는

createSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>도메인 오브젝트 테스트</title>
</head>
<body>
사용자를 추가했습니다.<br/>
${user}
</body>
</html>


User.java

package com.ch4.domain;

public class User {
    private String name;
    private String age;
    private String email;
        
    public User() {
        System.out.println("User 인터페이스가 생성되었습니다.");
    }
    
    public String getName() {        
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", email=" + email + "]";
    }        
}



Chapter04.zip


'Struts2 > 기본(Oracle)' 카테고리의 다른 글

struts2 커스텀 인터셉터  (0) 2012.06.21
struts2 인터셉터란?  (0) 2012.06.21
struts2 ActionSupport를 사용하여 유효성 검사(Interceptor)  (0) 2012.06.21
struts2 유효성 검사  (0) 2012.06.21
struts2 include 사용  (0) 2012.06.21

+ Recent posts