1

I'm learning Java Servlets and the book I'm using has an example on file upload , when I do it I get the following error

The method getInputStream() is undefined for the type HttpServletResponse

When I try to use

ServletInputStream sis =  response.getInputStream();

One of the solution eclipse offered was

ServletInputStream sis =  ((ServletRequest) response).getInputStream();

And using that resulted in the following

java.lang.ClassCastException: org.apache.catalina.connector.ResponseFacade cannot be cast

to javax.servlet.ServletRequest ShowForm.doPost(ShowForm.java:37) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Here is my full code:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ShowForm
 */
@WebServlet("/ShowForm")
public class ShowForm extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ShowForm() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            doPost(request,response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/plain");
        PrintWriter out = response.getWriter();

        ServletInputStream sis =  response.getInputStream();
        for (int i = sis.read();i != -1; i = sis.read())
            {

                out.print((char)i);

            }
    }
}
HDJEMAI
  • 9,436
  • 46
  • 67
  • 93
cyberbemon
  • 3,000
  • 11
  • 37
  • 62
  • Related: http://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824 – BalusC Apr 17 '12 at 15:39
  • Try to understand the concept of request and response. From the server point of view, a request is what is coming "in" and therefore you have an INputstream. A response is the answer to the request and is therefore what is going "out" and it has an OUTputstream. – Guillaume Polet Apr 17 '12 at 15:39

3 Answers3

2

Listen to the original error:

the method getInputStream() is undefined for the type HttpServletResponse

This is telling you the problem. HttpServletResponse has no getInputStream() method - it doesn't make sense for it to have one.

getInputStream() is on HttpServletRequest.

Eclipse can be a bit of an idiot when it comes to auto-fix suggestions.

skaffman
  • 398,947
  • 96
  • 818
  • 769
2

That's because ServletResponse/HttpServletResponse doesn't have the getInputStream(). You might actually want to use getInputStream from HttpServletRequest.

request.getInputStream()
evanwong
  • 5,054
  • 3
  • 31
  • 44
0

You can get an InputStream from HttpServletRequest. Instead from an HttpServletOutputStream you can get the OutputStream. It make sense, because usually you'd like to read the incoming request, and write a reply accordingly.

Carlo
  • 1,686
  • 3
  • 29
  • 43