我不确定如何表达我的问题。但是我有一个html表单,将数据提交给java后端,后端处理数据并将数据提交给数据库。
java表单使用javax.servlet.http.HttpServletRequest
库
所以为了获取值:
<input type="text" name="firstName">
在java页面中我会这样做:
String firstName = request.getParameter("firstName");
这很有效,但是如果我的输入是两个单词,它将只返回第一个单词。
所以说我把“John George”作为我的firstName, java页面只会收到“John”。
我无法弄清楚原因。
表格代码:
foot = "<form method='POST' action='Submit'>";
//path to java servlet
foot += "<input type='hidden' name='firstName' value="+firstName+">";
foot += "<input type='hidden' name='lastName' value="+lastName+">";
foot += "<input type='hidden' name='school' value="+school+">";
foot += "<input type='hidden' name='email' value="+email+">";
答案 0 :(得分:0)
原因很简单:查看浏览器中的HTML源代码,您会看到:
<input type='hidden' name='firstName' value=John George>
因此,您拥有一个包含4个属性的input
元素,最后一个属性为George
。
解决方案:
第二点允许恶作剧的人在你的网站上做一些非常讨厌的事情。请参阅Cross-site scripting。
所以正确的代码是:
foot += "<input type='hidden' name='firstName' value='"+StringEscapeUtils.escapeHtml(firstName)+"'>";
StringEscapeUtils
位于commons-lang。
答案 1 :(得分:0)
每个属性值都应该用引号括起来。您的属性包含在引号中(大多数浏览器都可以处理)但您的值属性没有任何引用包装。所以你的输出看起来像这样:
<input type='hidden' name='firstName' value=John George>
因为该值未包含在引号中,因此浏览器将“John”解释为value属性的值,将“George”解释为没有值的新属性。
将您的value属性包装在引号中应解决此问题。
foot = "<form method=\"POST\" action=\"Submit">";
//path to java servlet
foot += "<input type=\"hidden\" name=\"firstName\" value=\""+firstName+"\">";
foot += "<input type=\"hidden\" name=\"lastName\" value=\""+lastName+"\">";
foot += "<input type=\"hidden\" name=\"school\" value=\""+school+"\">";
foot += "<input type=\"hidden\" name=\"email\" value=\""+email+"\">";
答案 2 :(得分:0)
鉴于此firstName = "John George"
:"<input type='hidden' name='firstName' value="+firstName+">";
以HTML格式呈现
<input type='hidden' name='firstName' value=John George>
所以“乔治”被解释为属性。请尝试正确添加引号:
"<input type='hidden' name='firstName' value='" + firstName + "'>"