如何使用Servlet和JSP提取行值?

时间:2016-05-23 21:05:21

标签: jsp servlets

我是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);

  }

}

这就是我的首页的样子:

enter image description here

我在用户点击删除时获取文件名时遇到问题。

当我在tomcat上运行我的程序时,终端中的输出如下所示:

INFO: Server startup in 1076 ms
you clicked on delete

&#34;您点击了删除&#34;不显示单击的文件的名称。我是Servlet和JSP的新手。我可能会遗漏一些明显的东西。任何帮助将不胜感激。

1 个答案:

答案 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

应选择哪个值? 因此,您需要一个每个名称只有一个值的表单(或者列表的括号)