2009-11-26 54 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 ...方法