java 方法 getPart(String) 未定义为 HttpServletRequest 类型
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/28649992/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
The method getPart(String) is undefined for the type HttpServletRequest
提问by shubh
I have been working on Java web project in which i need to upload an image through the JSP page and store it into a MySQL database. I'm entering the image in multiparts which is available for Servlet 3.0 or above.
我一直在研究 Java Web 项目,在该项目中我需要通过 JSP 页面上传图像并将其存储到 MySQL 数据库中。我正在输入可用于 Servlet 3.0 或更高版本的多部分图像。
I've been using the getPart("image") to get the image part by part but it's showing me the following error: "The method getPart(String) is undefined for the type HttpServletRequest"
我一直在使用 getPart("image") 逐个获取图像,但它向我显示以下错误: “方法 getPart(String) 未定义为类型 HttpServletRequest”
- The server i'm using: Tomcat 7
- The IDE i'm using: Eclipse Luna
- 我使用的服务器:Tomcat 7
- 我正在使用的 IDE:Eclipse Luna
Here are the code snippets:
以下是代码片段:
ImageUploadServlet:
图片上传服务:
package com.nagarro.imagemanagementutility.controller;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import com.nagarro.imagemanagementutility.util.Constants;
/**
* Servlet implementation class ImageUploadServlet
*/
@MultipartConfig(maxFileSize=Constants.MAX_FILE_SIZE) // Upload image file size upto 16 MB
public class ImageUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ImageUploadServlet() {
super();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream inputStream = null;
// obtains the upload image file in this multipart request
Part imagePart = request.getPart("photo");
}
}
UserImageUtility.jsp
UserImageUtility.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Image Management Utility</title>
</head>
<body>
<table border="1" align="center" width="900px">
<tr>
<td>
<div align="center">
<h3>Image Management Utility</h3>
</div>
</td>
</tr>
<tr>
<td>
<div>Please select an image file to upload (Max Size 1 MB)</div>
<form action="ImageUploadServlet" method="post"
enctype="multipart/form-data">
<input type="file" name="image" size="50" />
<div align="right">
<input type="submit" name="sbtnSubmit" value="Submit" />
<input type="button" name="btnCancel" value="Cancel" />
</div>
</form>
</td>
</tr>
</table>
</body>
</html>
pom.xml:
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nagarro</groupId>
<artifactId>Assignment_4_ImageManagementUtility</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Assignment_4_ImageManagementUtility Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>Assignment_4_ImageManagementUtility</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.nagarro.imagemanagementutility.controller.ApplicationLauncher</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<finalName></finalName>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.8.Final</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- Hibernate uses slf4j for logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
</project>
The list of jar in the lib:
lib中的jar列表:
回答by Steve McKay
You have more than one Servlet API jar on your classpath. JSTL is ooooold and you have a bunch of JSTL artifacts in your pom.xml pulling in old servlet versions. Remove javax.servlet:jstl
, jstl:jstl
, and javax.servlet.jsp.jstl:jstl-api
from your pom.xml and try this instead:
您的类路径上有多个 Servlet API jar。JSTL 太老了,你的 pom.xml 中有一堆 JSTL 工件,它们包含了旧的 servlet 版本。从您的 pom.xml 中删除javax.servlet:jstl
,jstl:jstl
和javax.servlet.jsp.jstl:jstl-api
并尝试以下操作:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>java.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
P.S. Eclipse added Tomcat's jars to the class path so you can remove java.servlet:servlet-api
from your pom.xml is you want. If you keep it, add <scope>provided</scope>
or Tomcat will complain. It's the servlet container's responsibility to provide the servlet classes, so you shouldn't include them in your WAR, although Tomcat is smart enough to keep it from being a problem.
PS Eclipse 将 Tomcat 的 jar 添加到类路径中,因此您可以java.servlet:servlet-api
根据需要从 pom.xml 中删除。如果你保留它,添加<scope>provided</scope>
或Tomcat会抱怨。提供 servlet 类是 servlet 容器的责任,因此您不应将它们包含在您的 WAR 中,尽管 Tomcat 足够智能以防止它成为问题。
回答by antonio
The method
方法
Part getPart(java.lang.String name) throws java.io.IOException, ServletException
is available in HttpServletRequest Java EE 6, but not in HttpServletRequest Java EE 5.
在HttpServletRequest Java EE 6 中可用,但在HttpServletRequest Java EE 5 中不可用。
Make sure that you are using Java EE 6.
确保您使用的是 Java EE 6。