代码之家  ›  专栏  ›  技术社区  ›  Rolf

跨站点Tomcat表单发布不工作

  •  0
  • Rolf  · 技术社区  · 15 年前

    对于一个客户,我需要编写一个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();
        }
    }
    

    当我转到servlet by url时,所有的内容都像预期的那样。当我用一些参数发送一个GET请求时,我可以在doget()方法(方法对于brevety是多余的)的调试器中将这些参数视为属性。

    但是,在dopost()中,表单字段似乎丢失了。我已经查看了Tomcat日志文件,没有什么特别的记录。我试图将crossdomain.xml添加到一些目录中,但没有找到改变这种行为的方法。

    所以要清楚:上面列出的表单在服务器A上。我的servlet运行在服务器B上托管的现有遗留Tomcat/Java应用程序中。当表单是“POST”类型时,没有一个字段到达服务器B上的servlet。Apache不是Tomcat的“前面”。

    Tomcat中是否缺少某些配置设置? 有什么建议吗?下一步该去哪里? 非常感谢您的帮助。

    3 回复  |  直到 15 年前
        1
  •  1
  •   BalusC    15 年前

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

    更令人困惑的是你说它在 doGet() . 那么它的代码是什么样子的?它是否也将它们作为属性访问?这在正常的JSP/servlet环境中是不可能实现的(即,您没有使用一些将参数复制到属性的过滤器)。

        2
  •  0
  •   irreputable    15 年前

    这与跨站点无关。正如Balusc所说,使用getParameter…而不是getattribute…方法

        3
  •  0
  •   Rolf    15 年前

    发现了问题。经过一整天的搜索和编码,一切都归结为我的代码工作得很好。问题在形式上。行:

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

    应该阅读:

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

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

    我想把这个贴在StackOverflow上确实有帮助,因为我必须解释并重新阅读我的问题,我觉得“id=”看起来很有趣。编码就是在你忽略的文本中发现错误…