본문 바로가기

카테고리 없음

ServletRequestAware

Struts 2 를 사용할 때, Action 클래스에서 HttpServletRequest에 직접 접근하려면 반드시 ServletRequestAware 인터페이스를 구현해야 한다. 다음은 HttpServletRequest객체에 DTO객체를 담아 View에 전달하는 예이다.

struts.xml

<?xml version="1.0" encoding="EUC-KR" ?>
<!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.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="struts2test" namespace="/test" extends="struts-default">

 <action name="login" class="struts2test.Login">

  <!--액션의 execute()메소드가 SUCCESS를 리턴하면 loginOK.jsp로 Forward 된다-->
  <result>/pages/loginOK.jsp</result>

  <!--액션의 execute()메소드가 ERROR를 리턴하면 등록된 error 액션으로 Redirect  된다-->
  <result name="error" type="redirect-action">error</result>

  <!--Redirect하면서 파라미터를 전달하면, request.getParameter()를 이용해 받을 수 있다-->
  <result name="input" type="redirect-action">
   <param name="actionName">loginForm</param>       
   <param name="namespace">/test</param>
   <param name="msg">ID, PASSWORD required !</param>        
  </result>

  <result name="hello">/pages/hello.jsp</result>

 </action>
 
    <action name="error">
  <result>/pages/loginFail.jsp</result>   
 </action>

    <action name="loginForm">
  <result>/pages/loginForm.jsp</result>   
 </action>

</package>

<!-- Add packages here -->
<include file="example.xml"/>
</struts>



loginForm.jsp

<%@page contentType="text/html;charset=KSC5601"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
<title>Struts 2 Test Application!</title>
</head>
<body>

<s:form action="/test/login.action" method="post">
<s:textfield name="id" label="ID" size="20"/>
<s:password name="pwd" label="Password" size="20"/>
<s:submit value="Login"/>
</s:form>

</body>

</html>



Login.java

package struts2test;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor .ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
import java.util.*;

public  class Login  extends ActionSupport  implements ServletRequestAware {

 private String id, pwd;
 private HttpServletRequest request;

 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
 }

 public String execute() throws Exception {
 if( id !=null && pwd != null && !id.equals("") && !pwd.equals("")) {
  request.setAttribute("dto", new DTO(id, pwd));
  return SUCCESS;
 }else if(id==null && pwd==null) {
  return INPUT;
 }else if(id.equals("") && pwd.equals("")) {
  return "hello";
 }else return ERROR;
 }

public void setId(String id){
 this.id = id;
}

public void setPwd(String pwd){
 this.pwd = pwd;
}

public String getId() {
 return id;
}

public String getPwd() {
 return pwd;
}
}


DTO.java

package struts2test;

public class DTO  {

 private String id;
 private String pwd;

 public DTO(){}

 public DTO(String id, String pwd) {
  this.id = id;
  this.pwd = pwd;
 }
 public void setId(String id){
  this.id = id;
 }
 public void setPwd(String pwd){
  this.pwd = pwd;
 }
 public String getId(){
  return id;
 }
 public String getPwd(){
  return pwd;
 }
}


loginOK.jsp

<%@page contentType="text/html;charset=KSC5601"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@page import="struts2test.*"%>
<html>
<head>
<title>Struts 2 Test Application!</title>
</head>
<body>

성공적으로 로그인했습니다.<p>

ID : <%=((DTO)request.getAttribute("dto")).getId()%> <br>
PWD : <%=((DTO)request.getAttribute("dto")).getPwd()%> <br>
<p>
....................................................................................................................................................................................
<p>
OGNL(Object Graph Navigation Language)를 이용한 JSP 내장객체(request)에 접근한 경우<p>
ID :  <s:property value="#request.dto.id"/> <br>
PWD : <s:property value="#request.dto.pwd"/> <br>
<p>

ID :  <s:property value="%{#request.dto.id}"/> <br>
PWD : <s:property value="%{#request.dto.pwd}"/> <br>
....................................................................................................................................................................................

</body>

</html>



.............................................................................................................................................................................................................................

OGNL 에서 Map (Hashtable)을 사용하는 예

OGNL을 이용하여 뷰에서 Map(Hashtable)에 저장되어 있는 속성을 출력하는 예이다. 예를 들어 ht 라는 Hashtable 객체의 레퍼런스가 있고 그 안에 'id' 라는 키가 있다면, ht['id'] 과 같은 형식을 사용하여 값을 출력할 수 있다.

Login.java

package struts2test;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor .ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
import java.util.*;

public  class Login  extends ActionSupport  implements ServletRequestAware {

 private String id, pwd;
 private HttpServletRequest request;

 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
 }

 public String execute() throws Exception {
 if( id !=null && pwd != null && !id.equals("") && !pwd.equals("")) {
  Hashtable<String,String>ht = new Hashtable<String,String>();
  ht.put("id", id);
  ht.put("pwd", pwd);

  request.setAttribute("ht", ht);
  return SUCCESS;
 }else if(id==null && pwd==null) {
  return INPUT;
 }else if(id.equals("") && pwd.equals("")) {
  return "hello";
 }else return ERROR;
 }

public void setId(String id){
 this.id = id;
}

public void setPwd(String pwd){
 this.pwd = pwd;
}

public String getId() {
 return id;
}

public String getPwd() {
 return pwd;
}
}



loginOK.jsp

<%@page contentType="text/html;charset=KSC5601"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@page import="java.util.*"%>
<html>
<head>
<title>Struts 2 Test Application!</title>
</head>
<body>

성공적으로 로그인했습니다.<p>

ID : <%=((Hashtable<String,String>)request.getAttribute("ht")).get("id")%> <br>
PWD : <%=((Hashtable<String,String>)request.getAttribute("ht")).get("pwd")%> <br>
<p>
....................................................................................................................................................................................
<p>
OGNL(Object Graph Navigation Language)를 이용한 JSP 내장객체(request)에 접근한 경우<p>
ID :  <s:property value="#request.ht['id']"/> <br>
PWD : <s:property value="#request.ht['pwd']"/> <br>
<p>

ID :  <s:property value="%{#request.ht['id']}"/> <br>
PWD : <s:property value="%{#request.ht['pwd']}"/> <br>
....................................................................................................................................................................................

</body>

</html>