对于客户,我需要编写一个可以在表单中打印值的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中缺少一些配置设置? 任何提示或建议在哪里看下一步? 非常感谢帮助。
答案 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 =”看起来很有趣。编码正在查找您正在忽略的文本中的错误......