2009-11-26 34 views
0

對於一個客戶,我需要編寫一個可以在表單發佈中打印值的Servlet。形式託管在其他服務器上,有些看起來是這樣的:跨站點tomcat表單發佈不起作用

<form action="http://myserver/myServlet" method="POST"> 
<input type="text" id="someName" value="someInterestingValue"/> 
<input type="submit" value="submit" /> 
</form> 

我提供一個Tomcat 5.0.28服務器上的Java JDK 1.4運行的,所以我做了一個簡單的servlet:

public class ProxyServlet extends HttpServlet { 
    public void doPost(HttpServletRequest req, 
         HttpServletResponse res) 
         throws ServletException, IOException { 
     PrintWriter out = res.getWriter();  
     Enumeration a =req.getAttributeNames(); 
     while (a.hasMoreElements()){ 
      String attrname = (String) a.nextElement(); 
      out.println(attrname+"="+req.getAttribute(attrname)+"<br/>"); 
     } 
     out.close(); 
    } 
} 

當我通過URL訪問servlet時,所有內容都與預期相符。當我發送帶有一些參數的GET請求時,我可以在doGet()方法的調試器中看到這些屬性(方法被忽略)。

但是,在doPost()中,我的表單字段似乎丟失了。我查看了Tomcat日誌文件,沒有記錄任何特別的東西。我試圖添加crossdomain.xml到一些目錄,但沒有找到一種方法來改變這種行爲。

所以要清楚:上面列出的表單位於服務器A上。我的servlet運行在服務器B上託管的現有傳統Tomcat/Java應用程序上。當表單類型爲「POST」時,沒有任何字段到達服務器B上的Servlet。Apache不在Tomcat的「前面」。

是否有一些配置設置我在Tomcat中缺少? 任何提示或建議在哪裏看下? 非常感謝幫助。

回答

0

發現問題。經過一整天的搜索和編碼,這一切都歸結爲我的代碼工作正常。問題在於形式。行:

<input type="text" id="someName" value="someInterestingValue"/> 

應改爲:

<input type="text" name="someName" value="someInterestingValue"/> 

對於人提的,而不是 「的getAttribute」 「的getParameter」 你是完全正確的。在我的測試代碼中,我只能確定(因爲我認爲我輸了...),但都沒有返回結果,因爲瀏覽器根本沒有發送名稱/值對。

我想這張貼在Stackoverflow上有幫助,因爲我不得不解釋並重新閱讀我的問題,我認爲「id =」看起來很有趣。編碼是發現你忽略的文本塊的錯誤...

+0

啊,那也錯過了我的眼睛。這太明顯了。如果你真的說getParameter()的東西也不起作用,它會有更多的幫助。不過很高興你自己解決了它。 – BalusC 2009-11-26 22:28:21

+0

是的,我的不好,我最初有getParameter()代碼,但是我認爲我可以放鬆它,使問題縮短一點。 – Rolf 2009-11-26 22:51:29

1

請求屬性?您是否需要使用HttpServletRequest#getParameter()等等作爲請求參數訪問它們?

這增加了更多的困惑是,你說它在doGet()工作。它的代碼如何看起來像那樣?它是否也作爲屬性訪問它們?那在普通的JSP/Servlet環境下(即你沒有使用某個過濾器,它將參數複製到屬性等)是不可能的。

0

這與跨站點無關。正如BalusC所說,使用getParameter ...而不是getAttribute ...方法

相關問題