【问题标题】:HttpServletRequest getPart(") not found未找到 HttpServletRequest getPart(")
【发布时间】:2013-01-11 07:50:06
【问题描述】:

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

【问题讨论】:

  • 你的问题很奇怪。我您实际上是在使用 IDE 进行开发(并且您错误地认为 IDE 是 Java 或其他东西的一部分)并且它在之后没有显示 getPart() 的自动完成选项request.[ctrl+space]。这确实是您的具体问题吗?
  • 是的先生,这就是问题

标签: servlets glassfish vaadin


【解决方案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>

【讨论】:

    【解决方案2】:

    嗨朋友们,我也遇到了类似的问题,我会告诉你我做了什么。

    我正在使用 eclipse juno 和 Tomcat 7 服务器。确保使用最新的 servlet API jar。 Tomcat 7 将仅支持动态模块版本 2.5 不超过该版本。所以使用更高版本的Tomcat或更低的动态模块版本就可以了。

    还有一件事:打开你的servlet api jar,看看它是否包含“Part”,你可以很容易地检查它。

    【讨论】:

    • 文本结构很糟糕
    【解决方案3】:

    maven..pom.xml..修改这个依赖

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

    servlet api 2.5 不工作

    【讨论】:

    【解决方案4】:

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

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

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


    2. 如果您的 IDE 生成了一个 /WEB-INF/web.xml 文件,那么您需要确保它的 &lt;web-app&gt; 根声明也与 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>
      

    【讨论】:

    • 感谢 BalusC 的建议。是的,我正在使用 Eclipse,而且我的动态 Web 模块版本设置为 3.0。但它仍然无法正常工作。
    • 这里的相同问题将 web.xml 和项目方面的 web 模块版本更改为 3.9,但仍然无法正常工作
    • 我从答案中引用:假设您已将动态 Web 项目与 Servlet 3.0 兼容容器正确关联为项目属性中的目标运行时。有关详细信息,另请参阅stackoverflow.com/questions/4076601/…
    【解决方案5】:

    对于那些后来偶然发现此问题的人,如果 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 类的来源。

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题,我想和你分享一下,以防其他人遇到同样的问题:

      在我的例子中,我有一个自动下载的 j2ee.jar,它的版本可能是旧的。它位于 Libraries --> j2ee Runtime Library 下(stackoverflow 不允许我在 eclipse 中添加图像 - 在 Project Explorer 中 - 展开项目 --> Java Resources --> 库 --> J2ee Runtime Library --> j2ee.jar)

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

      然后清理并重建项目。

      【讨论】:

        【解决方案7】:

        正如 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
        

        部分输出:

        最后从依赖中排除工件

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

        【讨论】:

          【解决方案8】:

          这对我有用

           <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
          <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
             <version>4.0.1</version>
             <scope>provided</scope>
           </dependency>
          

          【讨论】:

            猜你喜欢
            • 2016-10-16
            • 2015-04-23
            • 1970-01-01
            • 2013-12-21
            • 2019-01-24
            • 2013-10-14
            • 2012-02-06
            • 2021-09-23
            • 2019-01-20
            相关资源
            最近更新 更多