The method getPart(String) is undefined for the type HttpServletRequest

15,415

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:

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

Share:
15,415

Related videos on Youtube

shubh
Author by

shubh

Updated on June 04, 2022

Comments

  • shubh
    shubh almost 2 years

    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.

    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"

    • The server i'm using: Tomcat 7
    • The IDE i'm using: 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

    <%@ 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>
    				&nbsp;
    				<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:

    <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: The list of jars in the lib

    • Steve McKay
      Steve McKay about 9 years
      Compile error, correct? If so, please provide your pom.xml, build.gradle, list of jars in lib/, etc--whatever you're using for dependency management.
    • shubh
      shubh about 9 years
      Hi, I've added the list of jars in the lib. Apart from this, i've externally added the following jars: javax.servlet.jar, commons-fileupload-1.3.1.jar, commons-io-2.4.jar
  • shubh
    shubh about 9 years
    Hi @antonio, i'm Java EE 7. But it's still creating issues.
  • shubh
    shubh about 9 years
    Thanks! A bit of modification to your answer and it worked. What i did was: I removed one extra servlet <dependency> from the pom.xml. The version it was referring to was "3.0-alpha-1" which is an old version and does not support getPart(String) function.
  • Matt Vegas
    Matt Vegas about 5 years
    I have the same issue with EE 7, any found?