带有参数的JSP表单提交URL

时间:2013-04-17 22:17:24

标签: forms jsp servlets redirect

我在Web应用程序上使用普通JSP(JSF不是一个选项)。在JSP文件中,我有一个表,每行显示每个学生。此外,在每一行中,我想要一个“编辑”按钮,该按钮将重定向到我们可以编辑该学生并删除它的页面。

到目前为止,我认为最好的想法是在每行中放入一个只有一个按钮的可提交表单。

<table border="1">
    <tr>
        <th>Name</th>
        <th>LastName</th>
        <th>Send Message</th>
        <th>Erase</th>
    </tr>
    <c:forEach items="${students}" var="bean">
        <tr>
            <td>${bean.name }</td>
            <td>${bean.lastName }</td>
            <td><input type="button" name="edit" value="Do!"
                onclick="foo();" /></td>
            <td><form action="<%="EditStudent?studentid=6" %>"><input type="submit" value="Edit" /></form></td>
        </tr>
    </c:forEach>
</table>

表单提交URL仅用于测试,因此硬编码的“6”参数作为学生ID。但是,当我按下按钮时,我会被重定向到一个URL为"http://localhost:8080/JSPProj/EditStudent?"的页面,在那里我可以清楚地看到问号后的任何文本都被忽略了!如果我删除了问号,则URL重定向有效(但是无法将我想要的参数传递给下一个servlet)。

任何人都可以告诉我为什么会这样吗?

PS。我也试过EL,同样的事情发生了。

2 个答案:

答案 0 :(得分:2)

首先,您应该指定您的method = get或method = post。但这只是我的挑剔。问题是:不要把你的?和动作网址中的参数。将参数放在输入标签中。

<form action='EditStudent'>
<input type='hidden' name='studentid' id='studentid' value='6' />
<input type='submit' value='Edit' />
</form>

编辑:实际上GET与POST不是挑剔。对我来说,这是一种讽刺。这很重要。默认情况下,浏览器会将其视为GET,这意味着参数将在地址栏中可见,并且可以由最不熟练的用户轻松更改。使用POST它至少需要更复杂的猴子。虽然显然您不应该依赖公开可见的HTML来保护您的安全。

输入类型='隐藏'并不意味着用户在查看源代码时无法看到它,显然,只是没有文本框放在那里。

答案 1 :(得分:1)

1)首先,您不应该在给定的上下文中使用表单操作,因为在这种情况下使用POST方法不合逻辑。

2)你绝不应该在jsp表达式语言中使用静态内容。 ie: action="<%="EditStudent?studentid=6" %>"

3)在给定的情况下,您需要为每个列出的学生使用<a>,并根据他们的ID将其重定向到servlet。这种方法将使用GET方法。

这就是你应该做的事情 <a href="EditStudent?studentid=${bean.studentID}"> click me </a>

此致