我是JSP的新手。我创建了一个在tomcat服务器上运行的JSP文件。我在程序中指定了我的目录位置。我的程序显示该目录中的所有文件,并在表格中显示结果,并在文件名后创建删除按钮。我的程序如下(JSP文件):
<form method="post" action='FileDisplayURL' >
<h2>Current Collection</h2>
<table width="100%" border="1">
<%
File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
%>
<tr >
<%
if (listOfFiles[i].isFile()) {
%>
<td><%=listOfFiles[i].getName()%></td>
<td><input type="submit" value="delete" name="filename"></td>
<%
}
%>
</tr>
<%
}
%>
</table>
</form>
这是我的servlet:
@WebServlet("/FileDisplayURL")
public class FileDisplay extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String deleteFileName = request.getParameter("filename");
System.out.println("you clicked on " + deleteFileName);
}
}
这就是我的首页的样子:
我在用户点击删除时获取文件名时遇到问题。
当我在tomcat上运行我的程序时,终端中的输出如下所示:
INFO: Server startup in 1076 ms
you clicked on delete
&#34;您点击了删除&#34;不显示单击的文件的名称。我是Servlet和JSP的新手。我可能会遗漏一些明显的东西。任何帮助将不胜感激。
答案 0 :(得分:1)
这是一个HTML错误,一个按钮没有值(而且你还没有添加一个值)你应该创建一个隐藏的输入并将文件名放在那里:
<input type="hidden" value="<%=listOfFiles[i].getName()%>" name="filename"/>
修改强>
我没有意识到你有一个表单,每行需要一个单独的表单,因为如果几个输入具有相同的名称,servlet不知道放入什么值。所以你的观点应该有:
<h2>Current Collection</h2>
<table width="100%" border="1">
<%
File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
%>
<tr >
<%
if (listOfFiles[i].isFile()) {
%>
<td><%=listOfFiles[i].getName()%></td>
<td>
<form method="post" action='FileDisplayURL' >
<input type="submit" value="delete">
<input type="hidden" value="<%=listOfFiles[i].getName()%>" name="filename"/>
</form>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
编辑2:
只是为了澄清你的错误: 当您单击“发送”按钮时,浏览器会准备请求向主体添加一个键值列表,其中包含激活表单中的所有参数,如果您使用一个表单,其中包含多个具有相同名称的字段,则服务器无法猜出哪个是正确的价值:
Body:
filename=a
filename=b
filename=c
filename=d
应选择哪个值? 因此,您需要一个每个名称只有一个值的表单(或者列表的括号)