【问题标题】:Cross-site tomcat form post not working跨站点tomcat表单帖子不起作用
【发布时间】:2010-12-20 19:41:25
【问题描述】:

对于一个客户,我需要编写一个可以在表单发布中打印值的 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 中是否缺少一些配置设置? 有什么提示或建议下一步该去哪里看吗? 非常感谢您的帮助。

【问题讨论】:

    标签: java html tomcat forms post


    【解决方案1】:

    发现问题。经过一整天的搜索和编码,这一切都归结为我的代码运行良好。问题出在形式上。行:

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

    应阅读:

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

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

    我想在 Stackoverflow 上发布这个确实有帮助,因为我不得不解释并重新阅读我的问题,我认为“id=”看起来很有趣。编码是在你忽略的文本片段中发现错误......

    【讨论】:

    • 啊,我也看不下去了。是的,这太明显了。如果你真的说getParameter() 的东西也不起作用,那会更有帮助。不过很高兴你自己解决了。
    • 是的,我的错,我原来有 getParameter() 代码,但我想我可以放开它以使问题更短。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      更令人困惑的是您说它在doGet() 中有效。那么它的代码是什么样子的呢?它是否也将它们作为属性访问?这在普通的 JSP/Servlet 环境中(即您没有使用将参数复制到属性等的过滤器)是不可能的。

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 2018-10-16
        • 2014-09-09
        • 1970-01-01
        • 2018-09-17
        相关资源
        最近更新 更多