我正在使用一个servlet,该servlet与数据库建立连接以获取表之一的信息,并将该信息发送到jsp文件。该文件将打印在浏览器信息表中,并添加单选按钮,使我们可以选择其中的一行。
servlet看起来像这样:
List<InfoBean> items = new ArrayList<InfoBean>(); if (!conexion.isClosed()){ Statement st = (Statement) conexion.createStatement(); ResultSet rs = st.executeQuery("select * from lista_audio" ); while (rs.next()) {items.add(getRow(rs));} conexion.close();} req.getSession().setAttribute("items", items);
在JSP文件中,我可以打印带有信息的表,添加单选按钮,用户将使用该单选按钮选择1行,然后使用我可以添加的表单将所选信息发送到servlet:
< form action="administ" method=get enctype=multipart/form-data> < table> < table border=\"1\">< tr>< th>Title< /th>< th>Author< /th>< th>Album< /th>< /tr> < c:forEach items="${items}" var="item"> < tr>< td><input type="radio" name="SongInfo" value=${item.title}> < td>${item.title}< /td> < td>${item.author}< /td> < td>${item.album}< /td>< /tr> < /c:forEach> < /table>
在“值”字段中,我应该能够将$ {item.title}中存储的信息发送到servlet。当我将value设置为$ {item.title}且title为例如“保镖”时,在servlet中,我可以检索到的信息仅为“ The”。它看起来像发送位于字符串的第一个空格之前的字符。我怎么能得到整个字符串?
谢谢
检查生成的HTML输出(在浏览器中右键单击页面,选择“查看源代码”)。你没想念什么吗?
<input type="radio" name="SongInfo" value=The bodyguard>
是的,引号(注意突出显示的颜色的差异已bodyguard成为一种属性)。
bodyguard
因此,修复它:
<input type="radio" name="SongInfo" value="${item.title}">
这样,它将生成如下:
<input type="radio" name="SongInfo" value="The bodyguard">
简单修复,不是吗?:)
就是说,您的JDBC代码容易出现资源泄漏。您应该关闭所有资源Connection,Statement并ResultSet在try块的finally块中获得它们。有关更多提示,请参阅本文。同样,列表不一定需要放在会话范围内。HTML在语法上也是无效的,但这可能只是一个复制粘贴错误,否则它将无法正常工作。
Connection
Statement
ResultSet
进一步,您的HTML表单被声明为使用的request方法GET,但也被声明为使用的编码类型multipart/form-data。这完全没有道理。 仅 在有an时使用此enctype <input type="file">,如果是这种情况,则request方法应该为POST。
GET
multipart/form-data
<input type="file">
POST