如何自定义从HTML到Servlet的请求

时间:2013-08-23 20:35:34

标签: java html servlets httprequest

我正在使用Java的servlet和HTML表单构建服务器。

我已设法上传文件:用户到达HTML页面,选择他/她想要在他/她的树文件夹中上传的文件。该文件被发送到我在服务器上编写并下载的servlet(实际上我现在只在localhost上运行它,因此服务器是我的'My Documents'文件夹。)

我想做的下一步是这一步: 用户(一旦登录,但我将设法做到这一点)到达HTML页面,选择服务器托管的文件并下载。

为了实现它,我将向'Download Servlet'发送文件名。所以这是我的问题:

  • 如何列出HTML页面上“我的文档”中的文件。
  • 如何将所选文件的名称发送到servlet。
  • 如何捕获'request'并从中创建名称的字符串。

为了确定这两个持续点,请看一下:

List<FileItem> items = null;
items = upload.parseRequest(request);
FileItem item = items.get(0);
String fileName = item.getName();

上面的块捕获请求中的文件夹的名称。我真正想要做的是,如果请求中的内容是String(=捕获请求中包含的String),则执行相同的操作。

1 个答案:

答案 0 :(得分:0)

File API将为您提供选择目录中文件所需的内容。

List<File> files = Arrays.asList(new File("/your/directory").listFiles());

List<String> fileNames = new LinkedList<>();
for (File file : files) {
    fileNames.add(somePrefix + file.getName());
}

request.setAttribute("fileNames", fileNames);

我这样做是因为出于安全原因,您可能不想为文件提供真实路径。一旦在请求属性中有了文件名列表,就可以在jsp中迭代它们。

<form ...>
    Select a file:<br />
    <c:forEach items="${fileNames}" var="fileName">
        <input type="radio" name="fileName" value="${fileName}">
    </c:forEach>
    <input type="submit" name="submit" value="submit">Submit
</form>

现在,每个文件都附加到一个输入元素,该元素将转换为请求参数。提交表单后,您可以通过执行

来访问选择的文件名
String fileName = request.getParameter("fileName");

然后,您可以将该文件名附加到某个目录结构,然后在文件系统中找到它。