cyberbemon
cyberbemon

Reputation: 3190

Java Servlet getInputStream error

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

            }
    }
}

Upvotes: 1

Views: 4433

Answers (3)

Carlo
Carlo

Reputation: 1714

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.

Upvotes: 0

evanwong
evanwong

Reputation: 5134

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

request.getInputStream()

Upvotes: 2

skaffman
skaffman

Reputation: 403491

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.

Upvotes: 2

Related Questions