cofactor
asked on
url not working
i have a link in jsp when i click on it , i get the following in the browser
http://localhost:7004/myapps/MyServlet?id=25&filename=abcd%20def%20ijk-00-02-6789.xls
and i get 404 error !.
but the servlet is there .
when i call using http://localhost:7004/myapps/MyServlet?id=25 i get Nullpointer exception.
how to modify the url in the jsp so that it can call the servlet.
basically i am trying to send one id and file name through the link to the servlet
http://localhost:7004/myapps/MyServlet?id=25&filename=abcd%20def%20ijk-00-02-6789.xls
and i get 404 error !.
but the servlet is there .
when i call using http://localhost:7004/myapps/MyServlet?id=25 i get Nullpointer exception.
how to modify the url in the jsp so that it can call the servlet.
basically i am trying to send one id and file name through the link to the servlet
Do you have a copy of your web.xml file - can you post it?
I think the servlet is success invoked, but it forwards to another page with wrong path reference.
Hmmm...yeah you're right. the NPE is probably because it's missing the filename parameter....
ASKER
yea...i have web.xml
<servlet-mapping>
<servlet-name>MyServlet</s ervlet-nam e>
<url-pattern>/MyServlet</u rl-pattern >
</servlet-mapping>
yea..i am getting NPE .
if the value of param name has blanks , can it create problem ?
is it because it has an .xls in value.
not sure how to go about it
<servlet-mapping>
<servlet-name>MyServlet</s
<url-pattern>/MyServlet</u
</servlet-mapping>
yea..i am getting NPE .
if the value of param name has blanks , can it create problem ?
is it because it has an .xls in value.
not sure how to go about it
ASKER
>I think the servlet is success invoked, but it forwards to another page with wrong path reference
hello Master, can you please clarify what you meant here ?
can i cross check ?
hello Master, can you please clarify what you meant here ?
can i cross check ?
ASKER
Do you want to see my servlet ?
here it is
this is the content of doPost method
ServletOutputStream out = response.getOutputStream() ;
response.setContentType("a pplication /x-downloa d");
String rowid=(String)request.getP arameter(" id");
String fileName=(String)request.g etParamete r("filenam e");
response.setHeader("Conten t-Disposit ion", "attachment; filename=" + fileName);
DownloadUtil dutil =new DownloadUtil();
byte[] excelbyte=dutil.selectBlob (rowid);
out.write(excelbyte);
here it is
this is the content of doPost method
ServletOutputStream out = response.getOutputStream()
response.setContentType("a
String rowid=(String)request.getP
String fileName=(String)request.g
response.setHeader("Conten
DownloadUtil dutil =new DownloadUtil();
byte[] excelbyte=dutil.selectBlob
out.write(excelbyte);
404 error is probably know as Page Not Found Error, but the servlet is found. So, it should be another page.
The possible case is you have code like this at the end of the servlet
response.sendRedirect( anotherPageURL );
or
request.getRequestDispatch er( anotherPageURL ).forward(request, response);
// anotherPageURL can be either relative or full URL. However, it may be not there.
The possible case is you have code like this at the end of the servlet
response.sendRedirect( anotherPageURL );
or
request.getRequestDispatch
// anotherPageURL can be either relative or full URL. However, it may be not there.
ASKER
i dont have any page forward at the end of the servlet in fact.
i dont want that also.
i want to download excel .
i have got the excel byte[] array from the DB blob and put that byte[] into ServletOutputStream so that user might get a download prompt .
and so i did not put any page forwarding.
please look at the above code i posted.
i dont want that also.
i want to download excel .
i have got the excel byte[] array from the DB blob and put that byte[] into ServletOutputStream so that user might get a download prompt .
and so i did not put any page forwarding.
please look at the above code i posted.
>this is the content of doPost method
But you have send parameters via GET method. Is it really be called? Should it be doGet?
>yea..i am getting NPE .
As code above, I see only one line that may throw the error.
byte[] excelbyte=dutil.selectBlob (rowid); // inside selectBlob somewhere
But you have send parameters via GET method. Is it really be called? Should it be doGet?
>yea..i am getting NPE .
As code above, I see only one line that may throw the error.
byte[] excelbyte=dutil.selectBlob
ASKER
>But you have send parameters via GET method. Is it really be called? Should it be doGet?
doGet is calling doPost() ...so no worry .
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
>byte[] excelbyte=dutil.selectBlob (rowid); // inside selectBlob somewhere
very much unlikely ....as i have printed all the stacktraces ....no exception is printed.
doGet is calling doPost() ...so no worry .
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
>byte[] excelbyte=dutil.selectBlob
very much unlikely ....as i have printed all the stacktraces ....no exception is printed.
To cross check, simple write something to the browser and comment code above.
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<h1>You're trying to export excel file.</h1>");
out.close();
ASKER
i made a mistake in the servlet code and so it was not geeting called.
basically , i made a mistake in the servletname and mapping and servlet class....there was a capslock problem......anyway, things has been resolved now.
when i call servlet , i get a debug prompt in the servlet but i am surprised to see
byte[] excelbyte=dutil.selectBlob (rowid); // excelbyte =null !!!!!!!!
i dont know why its coming as null .
though i am getting Download prompt but nothing is saving and also not getting .xls file.
basically , i made a mistake in the servletname and mapping and servlet class....there was a capslock problem......anyway, things has been resolved now.
when i call servlet , i get a debug prompt in the servlet but i am surprised to see
byte[] excelbyte=dutil.selectBlob
i dont know why its coming as null .
though i am getting Download prompt but nothing is saving and also not getting .xls file.
ASKER
here i am sending the selectBlob method
public byte[] selectBlob(String rowid) {
ResultSet rs = null;
Statement stmt = null;
Connection connection = null;
byte[] returndata = null;
try {
connection = (new DBUtil()).getConnection();
stmt = connection.createStatement();
String sql = "SELECT rowid, blob_field FROM blob_repository WHERE rowid = "
+ rowid;
rs = stmt.executeQuery(sql);
if (rs.next()) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
BufferedInputStream bis = new BufferedInputStream(rs
.getBinaryStream("blob_field"));
byte bindata[] = new byte[1024];
int bytesread = 0;
if (!rs.wasNull()) {
if ((bytesread = bis.read(bindata, 0, bindata.length)) != -1) {
baos.write(bindata, 0, bytesread);
} else {
returndata = baos.toByteArray();
}
}
bis.close();
} catch (IOException ioe) {
System.err.println("Problem retrieving binary data: " + ioe);
}
}
} catch (SQLException se) {
System.err.println("Couldn't retrieve binary data: " + se);
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (connection != null)
connection.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returndata;
}
ASKER
i called that method in the servlet
byte[] excelbyte=dutil.selectBlob (rowid); //excelbyte==null :(
and also not getting .xls file extension
byte[] excelbyte=dutil.selectBlob
and also not getting .xls file extension
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.