找不到HttpServletRequest getPart(“)

时间:2013-01-11 07:50:06

标签: servlets glassfish vaadin

我不知道为什么它不起作用。 我试图在我的servlet中接受multipart-formdata,但request.getPart("")没有显示。我正在使用glassfish 3.1.2服务器。使用的Tha框架是用于开发应用程序的vaadin。任何人都可以帮我解决这个问题吗?

7 个答案:

答案 0 :(得分:5)

假设您的具体问题确实是您的IDE未在自动完成时显示getPart()方法,那么这只能意味着该项目未配置为与Servlet 3.0兼容的项目。 That method was namely introduced in Servlet 3.0

你没有说出你正在使用哪个IDE,你的问题历史也没有提供任何线索,所以让我们假设它是相当广泛使用的Eclipse。在这种情况下,您需要在2个位置配置它,前提是您已将 Dynamic Web Project 与Servlet 3.0兼容容器正确关联为项目属性中的 Targeted Runtimes (否则HttpServletRequest和consorts根本不会编译):

  1. 在项目属性的 Project Facets 部分中, Dynamic Web Module 版本必须设置为3.0。

    enter image description here


  2. 如果您的IDE生成了/WEB-INF/web.xml文件,那么您需要确保其<web-app>根声明也与Servlet 3.0匹配,否则它在运行时仍然会失败。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">
    
    </web-app>
    

答案 1 :(得分:1)

maven .. pom.xml ..修改此依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>

servlet api 2.5无法正常工作

答案 2 :(得分:1)

我遇到了同样的问题。这对我来说最终成了问题。我依赖:

<dependency>
    <groupId>com.googlecode.jsontoken</groupId>
    <artifactId>jsontoken</artifactId>
    <version>1.1</version>
</dependency>

事实证明,jsontoken依赖于servlet-api 2.5。所以解决这个问题的原因很简单:

<dependency>
    <groupId>com.googlecode.jsontoken</groupId>
    <artifactId>jsontoken</artifactId>
    <version>1.1</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

答案 3 :(得分:0)

对于那些稍后偶然发现的人,如果BalusC建议的解决方案无法为您解决问题,请检查运行时与服务器运行时不匹配的provided库的构建路径。

例如,如果你的maven pom.xml包含提供类似java EE库的条目......

        <dependency>
            <groupId>org.apache.openejb</groupId>
            <artifactId>javaee-api</artifactId>
            <version>5.0-1</version>
            <scope>provided</scope>
        </dependency>

...它们可能会干扰您的IDE所认为的运行时环境,它将用于提供代码完成建议。

跟踪问题的最简单方法是确定HttpServletRequest类的来源。

答案 4 :(得分:0)

我遇到了同样的问题,我希望与你分享,以防其他人遇到同样的问题:

在我的情况下,我有一个自动下载的j2ee.jar,其版本可能已经过时了。它位于图书馆 - &gt; j2ee运行时库(stackoverflow不允许我在eclipse中添加图像 - 在Project Explorer中 - 展开项目 - &gt; Java资源 - &gt;库 - &gt; J2ee运行时库 - &gt; j2ee.jar)

我去了这个文件所在的文件系统(你在eclipse中有文件旁边的位置)并用一个较新的jar替换它。您可以从here获取jar。

然后清理并重建项目。

答案 5 :(得分:0)

Bjørn的答案指出,可能的原因之一是工件 servlet-api(Servlet 2.5规范)冲突。 就我而言,就是这种依赖性

<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>1.30.10</version>

要找出哪个依赖项会编译冲突的库,只需使用以下命令构建并打印依赖项树:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree -Dverbose=true

部分输出:

enter image description here

最后从依赖项中排除工件

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-appengine</artifactId>
    <version>1.30.10</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

答案 6 :(得分:-1)

朋友们,我也遇到过simillar问题,我会告诉你我做了什么。

我使用的是eclipse juno和Tomcat 7服务器。确保使用最新的servlet API jar。 Tomcat 7仅支持不超过动态模块版本2.5。因此,使用更高级的Tomcat版本或更低的动态模块版本,它将起作用。

还有一件事:打开你的servlet api jar,看它是否包含&#34; Part&#34;你可以轻松检查它。