【问题标题】:Does request.getParameter() still work when uploading files with Servlet 3.0?使用 Servlet 3.0 上传文件时 request.getParameter() 是否仍然有效?
【发布时间】:2012-06-29 13:56:17
【问题描述】:

我刚刚从 BalusC 阅读了 this great answer 关于如何使用 3.0 Servlet API 上传文件的信息。

我的问题是关于在公共字段中使用request.getParameter()。例如,如果我的表单如下所示:

<form action="/upload" method="post" enctype="multipart/form-data">
    <fieldset>
        <label for="description">File description:</label>
        <input type="text" id="description" name="description" value="" />

        <label for="uploadedFile">File:</label>
        <input type="file" id="uploadedFile" name="uploadedFile" />

        <input type="submit" value="Send" />              
    </fieldset>
</form>

按照 BalusC 的解释,我应该操作 part.getInputStream() 返回的 InputStream 以获取 description 字段的内容。这是为什么 ?我试着简单地调用request.getParameter("description"),它似乎工作正常。

我使用的是 Tomcat 7.0.20。

感谢您的帮助。

【问题讨论】:

    标签: java jsp tomcat servlets file-upload


    【解决方案1】:

    我尝试简单地调用 request.getParameter("description"),它似乎工作正常。

    确实,这在 Servlet 3.0 规范中是这样指定的,但是直到最近它才在 Glassfish 的早期版本中起作用,即使它是参考实现。这已被报告为 Glassfish issue 16740 并已在 3.1.2 中得到修复,比第一个 3.0 版本晚了 2 年多。

    【讨论】:

    • 我的错,我应该在 GlassFish 或其他服务器上尝试过,然后再问...除了缺乏规范,知道为什么其他服务器上没有实现吗?它简化了任务。
    • 我不能不同意你。它肯定会减轻任务。我在 2 年前还发布了对 Servlet 3.0 规范的增强请求。也许它在 Servlet 3.1 中。
    • 好的。感谢您快速而出色的帮助!
    • @BaluC 这个特性应该在 Servlet 3.0 以后的所有容器中都可用。
    • @Ramesh:你是对的!我盲目地基于参考实现 Glassfish 的行为。即不支持。因此,这似乎是 Glassfish 中的一个错误。
    【解决方案2】:

    它从 Servlet 3.0 本身就可用。所有 Servlet 3.0 容器都应通过HttpServletRequest.getParameter() 提供输入类型参数。

    这是Servlet 3.0 Spec 在第 23 页上所说的:

    3.2 文件上传

    ...

    对于以form-dataContent-Disposition 但没有 文件名,零件的字符串值也可以通过 getParameter / getParameterValues HttpServletRequest 上的方法, 使用零件的名称。

    【讨论】:

    • 确实,我也检查了规格。那么,归根结底,是谁的错呢?为什么这部分规范没有在所有地方实施?通常,缺少东西的是Tomcat,而不是其他东西。我迷路了! :)
    • 我认为所有服务器都应该实现它。
    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2016-04-18
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多