2010-09-23 74 views
2

我將一個動態Web項目移植到Struts2,並且我需要將許多servlet轉換爲Struts2操作。我想使用ServletRequestAware,ServletResponseAware和SessionAware接口並保持大部分代碼不變。請看看我通過GOOGLin'找到的BaseAction.java類。我想使用這個,以便我可以做其他操作來簡單地擴展BaseAction。將Servlet轉換爲Struts2操作類

BaseAction.java

public abstract class BaseAction extends ActionSupport implements SessionAware, ServletRequestAware,ServletResponseAware, ServletContextAware{ 

private static final long serialVersionUID = 1L; 
    protected Map session; 
    protected HttpServletRequest request; 
    protected HttpServletResponse response; 

    public String execute() throws Exception { 
     return doExecute(); 
    } 

    protected abstract String doExecute() throws Exception; 

    public Map getSession() { 
     return session; 
    } 

    public void setSession(Map sess) { 
     this.session = sess; 
    } 

    public HttpServletRequest getServletRequest() { 
     return request; 
    } 

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

    public HttpServletResponse getServletResponse() { 
     return response; 
    } 

    public void setServletResponse(HttpServletResponse resp) { 
     this.response = resp; 
    } 

} 

現在假設我有一個servlet類似以下內容: Servlet.java

public class Servlet extends HttpServlet 
{ 
private static Logger log = Logger.getLogger(Servlet.class); 

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException 
{ 
    HttpSession session=request.getSession(); 
Bean bean= new Bean(); 
bean.setName(request.getParameter("xxx")); 
     session.setAttribute("bean"); 
     response.sendRedirect("login.jsp"); 
     } 
} 

有人能寫延長BaseAction動作類相當於Servlet? 在此先感謝。

回答

1

由於您使用Struts2的,我建議採取一切的優勢框架提供的,而不是試圖破解現有的servlet代碼。

public class NewAction implements SessionAware { 

    private Map theSession; 
    private XXX xxx; 

    public String execute() { 
    Bean b = new Bean(); 
    b.setXXX(xxx); 
    theSession.put(b); 

    return "success"; 
    } 

    public XXX getXXX() { 
    return xxx; 
    } 

    public void setXXX(XXX xxx) { 
    this.xxx = xxx; 
    } 

    public Map getSession() { 
    return theSession; 
    } 

    public void setSession(Map session) { 
    theSession = session; 
    } 
} 

你struts.xml中應包含行動的條目:

<action name="NewAction" class="yourapp.NewAction"> 
    <result type="redirect">login.jsp</result> 
</action> 
+1

並記住Struts2爲每個請求實例化一個新的Action。一個servlet實例(以及Struts 1操作)被(可能)很多請求使用,甚至可能是併發請求。 – leonbloy 2010-09-23 20:21:11

+0

非常感謝,這真是一個建議。 – Dhora 2010-09-23 21:04:43

+0

setXXX方法不需要返回任何東西。 – Dhora 2010-09-23 21:05:39

0

我希望下面的示例將幫助ü..

public class YourAction extends BaseAction { 

    private static final long serialVersionUID = -6113083300296539328L; 

    private static final Logger logger = Logger.getLogger(YourAction .class); 

    private Bean bean; 

    public String get() throws ApplicationException { 
    try { 
     this.setBean(getService().fetchBeanById(
       getHttpRequest().getParameter(
       "xxxx"))); 
    } catch (Exception e) { 
     logger.error(new String[] { " Exception listing Comment ", 
       e.toString() }); 
     throw new ApplicationException(e); 
    } 
     return SUCCESS; 
    } 

    public Bean getBean() { 
     return bean; 
    } 

    public void setBean(Bean bean) { 
     this.bean= bean; 
    } 
} 
+0

ThanQ,但1件事就是獲取和設置請求參數和會話的HTTP東西是由Struts2框架容易處理對我而言仍然不清楚。我可以通過getServletRequest.getParameter(「xxxx」)獲得表單字段值;現在,我如何使用SessionAware接口將bean設置爲會話。我是否必須將該bean放入地圖中,然後struts是否負責其餘部分?或者,我可以使用HttpSession ses = new HttpSession(); – Dhora 2010-09-23 21:01:15

+0

((HttpServletRequest)ActionContext.getContext()。get( \t \t \t \t StrutsStatics.HTTP_REQUEST)).getSession();會給你會話對象。 – Jothi 2010-09-30 10:34:06