struts2 리절트(result) – 동적 result<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />:namespace prefix = o />
요청정보 또는 세션의 사용자 정보에 의해 result 페이지를 동적으로 변경해야 하는 경우 또는 Action에서 result 결과 페이지를 임의로 설정하고 싶은 경우가 있다. Struts2에서는 struts.xml에서 Action의 Property를 읽는 것이 가능하다. (EL 사용)
이전 로그인 예제를 변경하여 동적으로 result를 생성해 보자.
Struts.xml에서 Action의 Property인 id 값을 동적으로 읽어내고 이 값을 login_ok.jsp로 parameter로 넘겨 login_ok.jsp에서 id 값을 출력하는 예제이다. 만약 result의 type이 dispatcher인 경우라면 login_ok.jsp로 parameter로 넘길 필요 없이 Action Property 값은 JSP에서 출력이 가능하다. (dispatcher인 경우 forward로 전달된다) 하지만 본 예제에서는 result의 type을 redirect로 하였기 때문에 새로운 request 객체가 생성되어 정상적인 경우라면 login_ok.jsp에서는 id 값을 알아낼 방법이 없다.
1. LoginAction.java
package login.action;
import login.dao.LoginDAO;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
String id;
String pwd;
public String execute() throws Exception {
LoginDAO dao = new LoginDAO();
if (dao.loginChk(id, pwd)) {
return SUCCESS;
}
else {
return LOGIN;
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
2. LoginDAO.java
package login.dao;
public class LoginDAO {
public boolean loginChk(String id, String pwd) {
//DB연결 후 넘어오는 사용자 정보를 가지고 로그인 체크
//본 예제에서는 id가 test이면 로그인 성공
if ("test".equals(id)) {
return true;
}
else {
return false;
}
}
}
3. /login/login.jsp , /login/login_ok.jsp
[login.jsp]
<%@ page pageEncoding="euc-kr" %>
<html>
<body>
<form action="login.action">
아이디 : <input type="text" name="id"/><br>
비밀번호 : <input type="text" name="pwd"/>
<input type="submit"/>
</form>
</body>
</html>
[login_ok.jsp]
<%@ page pageEncoding="euc-kr" %>
${param.id}님 환영합니다.
4. /WEB-INF/src/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>
<package name="struts2" extends="struts-default">
<action name="login" class="login.action.LoginAction">
<interceptor-ref name="params"/>
<result name="success" type="redirect">/login/login_ok.jsp?id=${id}</result>
<result name="login">/login/login.jsp</result>
</action>
</package>
</struts>
5. 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>Struts2</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>
</web-app>
6. 결과확인
http://localhost:8080/result/login/login.jsp