java / html表单提交 - >用request.getParameter( “...”);只返回字符串的第一部分?

时间:2011-07-06 14:28:29

标签: java html forms

我不确定如何表达我的问题。但是我有一个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+">"; 

3 个答案:

答案 0 :(得分:0)

原因很简单:查看浏览器中的HTML源代码,您会看到:

<input type='hidden' name='firstName' value=John George>

因此,您拥有一个包含4个属性的input元素,最后一个属性为George

解决方案:

  1. 别忘了引用你的字符串
  2. 永远忘记添加到HTML
  3. 的HTML转义文本值

    第二点允许恶作剧的人在你的网站上做一些非常讨厌的事情。请参阅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 + "'>"