跨站点tomcat表单帖子不起作用

时间:2009-11-26 21:46:48

标签: java html tomcat forms post

对于客户,我需要编写一个可以在表单中打印值的Servlet。该表单托管在另一台服务器上,看起来有点像这样:

<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 1.4 jdk上,所以我制作了一个简单的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中缺少一些配置设置? 任何提示或建议在哪里看下一步? 非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

请求属性?您是否需要使用HttpServletRequest#getParameter()等作为请求参数访问它们?

这增加了更多的混乱,你说它在doGet()中起作用。它的代码如何?它是否也将它们作为属性访问?这在普通的JSP / Servlet环境中(即你没有使用某些过滤器将参数复制到属性等)是不可能的。

答案 1 :(得分:0)

这与跨网站无关。正如BalusC所说,使用getParameter ...而不是getAttribute ... methods

答案 2 :(得分:0)

发现问题。经过一整天的搜索和编码,这一切归结为我的代码工作正常。问题在于形式。这一行:

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

应阅读:

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

对于提及“getParameter”而不是“getAttribute”的人来说,你是完全正确的。在我的测试代码中我只是要确定(因为我以为我丢失了它...)但两者都没有返回结果,因为浏览器根本就没有发送名称/值对。

我想在Stackoverflow上发布这个确实有帮助,因为我必须解释并重新阅读我的问题,我认为“id =”看起来很有趣。编码正在查找您正在忽略的文本中的错误......