2011-06-13 72 views
0

目前,我有一個servlet CsmServlet.java這是越來越被客戶端調用,這裏是web.xml部分從普通的Java遷移到Struts2的

<servlet> 
    <display-name>upload</display-name> 
    <servlet-name>upload</servlet-name> 
    <servlet-class>com.abc.csm.web.CsmServlet</servlet-class> 
</servlet> 

這是完美的。現在我必須使用struts 2並重新計算我的所有代碼,所以我應該在我的struts.xml中使用什麼來調用CsmServlet類。

這裏是我的struts.xml的,現在我想提出一個重定向到另一個頁面

<struts> 
<package name="default" extends="struts-default" namespace="/"> 
    <action name="showResult"> 
     <result>/csminfo.jsp</result> 
    </action> 

</package> 
</struts> 

我會重複我的問題,

  1. 我該添加什麼到我的支柱。 xml向CsmServlet類發出請求
  2. 我需要對web.inf進行任何更改嗎?

的Servlet內容

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException { 

PrintWriter out = resp.getWriter(); 
Map<String, String> requestParamter=getParamMap(req.getParameterMap()); 
RequestTransformer transformer = new RequestTransformer(req); 

//(map and operation type) goes to CSMData 
CSMData data = transformer.transform(requestParamter); 

RequestHandler handler = new RequestHandler(req); 
String result = handler.handle(data); 

log.info(result); 
out.println(result); 

} 
private Map<String,String> getParamMap(Map<String,String[]> params) 
{ 
Map<String,String> paramsMap = new HashMap<String, String>(); 
for(Map.Entry<String,String[]> entry : params.entrySet()) 
{ 
paramsMap.put(entry.getKey(),entry.getValue()[0]); 
} 
return paramsMap; 

} 

回答

2

由於Struts的實現MVC架構,理想情況下,你不希望有你的servlet做控制部分。您可能想要將servlet中的邏輯複製到Struts操作中。 一般情況下,你有兩個選擇:

  1. 不要在你的servlet代碼(如 控制器),並讓支柱 手柄控制。將servlet中的 業務邏輯(如果有 any)複製到struts的操作中。
  2. 如果你不想更大的改變,你可以將你的請求從Strut的動作轉發給已經創建的servlet。

希望這會有所幫助。

+0

感謝您的回覆,我已經上傳了我的servlet內容,能否向我解釋我需要做什麼w.r.t我的servlet代碼? – abi1964 2011-06-13 10:02:47

+0

你的servlet似乎在做業務邏輯和渲染。如上所述,你有兩個選擇。選項2非常簡單,但不是從struts向servlet轉發請求的最佳選擇。 – 2011-06-13 10:09:25

1

Struts有一個前端控制器servlet,它接受所有的請求並將它們傳遞給執行工作的Action類。

我認爲你的servlet沒有工作。

聽起來好像應該是前端控制器在客戶端請求時調用的Action類。

+0

感謝您的回覆,我已經在我的問題中添加了我的servlet代碼,您可以查看並解釋我應該怎麼做?我是struts2的新手 – abi1964 2011-06-13 10:03:59

+0

不太可能;我正在去上班的路上。我現在沒有時間。 – duffymo 2011-06-13 10:05:04

+0

:)反正謝謝 – abi1964 2011-06-13 10:06:32