Reputation: 3190
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
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
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
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