Servlets 找不到HttpServletRequest getPart(";)

Servlets 找不到HttpServletRequest getPart(";),servlets,glassfish,vaadin,Servlets,Glassfish,Vaadin,我不知道为什么它不起作用。 我试图在servlet中接受多部分formdata,但未显示request.getPart(“”)。我正在使用glassfish 3.1.2服务器。使用的Tha框架是用于开发应用程序的vaadin。有人能帮我解决这个问题吗?假设您的具体问题确实是IDE没有在autocomplete上显示getPart()方法,那么这只能意味着该项目没有配置为与Servlet 3.0兼容的项目 您没有告诉任何您正在使用的IDE,您的问题历史记录也没有提供任何线索,所以让我们假设使用得相

我不知道为什么它不起作用。
我试图在servlet中接受多部分formdata,但未显示
request.getPart(“”
)。我正在使用glassfish 3.1.2服务器。使用的Tha框架是用于开发应用程序的vaadin。有人能帮我解决这个问题吗?

假设您的具体问题确实是IDE没有在autocomplete上显示
getPart()
方法,那么这只能意味着该项目没有配置为与Servlet 3.0兼容的项目

您没有告诉任何您正在使用的IDE,您的问题历史记录也没有提供任何线索,所以让我们假设使用得相当广泛的是Eclipse。在这种情况下,您需要在两个位置配置它,前提是您已将动态Web项目与Servlet 3.0兼容容器正确关联,作为项目属性中的目标运行时(否则
HttpServletRequest
和consorts根本不会编译):

  • 在项目属性的Project Facets部分中,动态Web模块版本必须设置为3.0


  • 如果您的IDE生成了一个
    /WEB-INF/WEB.xml
    文件,那么您需要确保它的
    根声明也匹配Servlet 3.0,否则它在运行时仍然会失败

    
    

  • 对于那些后来偶然发现此问题的人,如果BalusC建议的解决方案不能为您解决问题,请检查您的生成路径,以查找运行时与服务器运行时不匹配的
    提供的

    例如,如果您的maven
    pom.xml
    包含提供JavaEE库的条目,例如

            <dependency>
                <groupId>org.apache.openejb</groupId>
                <artifactId>javaee-api</artifactId>
                <version>5.0-1</version>
                <scope>provided</scope>
            </dependency>
    
    
    org.apache.openejb
    JavaEEAPI
    5.0-1
    假如
    
    。。。它们可能会干扰IDE对运行时环境的感知,而运行时环境将用于提供代码完成建议


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

    maven。。xml。。修改此依赖项

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-appengine</artifactId>
    <version>1.30.10</version>
    
    <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>
    
    
    javax.servlet
    javax.servlet-api
    3.0.1
    

    servlet api 2.5不工作

    我遇到了同样的问题,我想与您分享,以防其他人遇到同样的问题:

    在我的例子中,我有一个j2ee.jar,它是自动下载的,它的版本可能很旧。它位于库-->j2ee运行时库下(stackoverflow不允许我添加映像,因此在eclipse中-在Project Explorer中-展开项目-->Java资源-->库-->j2ee运行时库-->j2ee.jar)

    我找到了这个文件所在的文件系统(在eclipse中,您的位置就在该文件的旁边),并将其替换为一个较新的jar。你可以把罐子从你的桌子上拿下来


    然后清理并重建项目。

    我也遇到了同样的问题。这就是我最终遇到的问题。我依赖于:

    <dependency>
        <groupId>com.googlecode.jsontoken</groupId>
        <artifactId>jsontoken</artifactId>
        <version>1.1</version>
    </dependency>
    
    
    com.googlecode.jsontoken
    杰森托肯
    1.1
    
    事实证明,jsontoken依赖于ServletAPI2.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>
    
    
    com.googlecode.jsontoken
    杰森托肯
    1.1
    javax.servlet
    servlet api
    
    嗨,朋友们,我也面临同样的问题,我会告诉你们我做了什么

    我正在使用EclipseJuno和Tomcat7服务器。确保使用最新的ServletAPI jar。Tomcat 7将只支持动态模块版本2.5,不超过该版本。因此,使用较高的Tomcat版本或较低的动态模块版本,它就会工作


    还有一件事:打开servlet api jar,看看它是否包含“部分”,您可以轻松地检查它。

    正如Bjørn的回答中指出的,一个可能的原因是servlet api(servlet 2.5规范)存在冲突。 就我而言,就是这种依赖

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-appengine</artifactId>
    <version>1.30.10</version>
    
    <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>
    
    部分输出:

    最后从依赖项中排除工件

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-appengine</artifactId>
    <version>1.30.10</version>
    
    <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>
    
    
    com.google.api-client
    谷歌api客户端appengine
    1.30.10
    javax.servlet
    servlet api
    
    你的问题很奇怪。我猜您实际上是在使用IDE进行开发(并且您错误地假设IDE是Java或其他东西的一部分),并且它没有在
    请求之后显示
    getPart()
    的自动完成选项。[ctrl+space]
    。这确实是你的具体问题吗?是的,先生,这就是问题所在。谢谢巴卢斯的建议。是的,我正在使用Eclipse,而且我的动态web模块版本设置为3.0。但它仍然不起作用。这里的同一个问题将web.xml和project方面的web模块版本都更改为3.9,但仍然不起作用。我从答案中引用:假设您已将动态web项目与Servlet 3.0兼容容器正确关联,作为项目属性中的目标运行时。有关这方面的详细信息,请参见maven站点的文本结构:3.0.1版本不存在,但仅此而已:javax.servlet