Reputation: 108
When i call the servlet, it doesn't go to the desired jsp page. below is the both codes
There's an error in the log saying this but that's not really a reason not to forward to the destination
java.sql.SQLException: Bad format for number 'bb' in column 4.
calling the servlet with this code, pretty sure of the url mapping
<a href="/Store/DisplayOrders"> Display Orders</a>
package admin;
import data.ConnectionPool;
import data.DBUtil;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author One
*/
public class DisplayOrdersServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
ConnectionPool pool = ConnectionPool.getInstance();
Connection connection = pool.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList al = null;
ArrayList ordersList = null;
ordersList = new ArrayList();
String query = "select * from orders order by order_id";
try {
ps = connection.prepareStatement(query);
rs = ps.executeQuery(query);
while (rs.next()) {
al = new ArrayList();
al.add(rs.getString("order_id"));
al.add(rs.getString("product_quantity"));
al.add(rs.getString("product_name"));
al.add(rs.getDouble("user_name"));
al.add(rs.getDouble("user_address"));
out.println("al :: " + al);
ordersList.add(al);
}
request.setAttribute("ordersList", ordersList);
String url = "/admin/orders.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closeResultSet(rs);
DBUtil.closePreparedStatement(ps);
pool.freeConnection(connection);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
the jsp page
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.util.*;"%>
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE>Orders CRUD</TITLE>
</HEAD>
<BODY>
<br>
<table>
</table>
<br>
<table >
<tr><td></td></tr>
<tr><td ><a href="/Store/admin/#.jsp">#</a></td></tr>
<tr><td></td></tr>
<tr>
<td>order_id</td><td>product_quantity</td><td>product_name</td>
<td>user_name</td><td>user_address</td>
<td>Edit</td><td>Delete</td>
</tr>
<%
int count=0;
List viewList = new ArrayList();
Iterator viewItr;
if(request.getAttribute("ordersList")!=null && request.getAttribute("ordersList")!="")
{
List orderList = (ArrayList)request.getAttribute("ordersList");
Iterator itr = orderList.iterator();
while(itr.hasNext())
{
viewList = (ArrayList)itr.next();
int product_id = Integer.parseInt(viewList.get(0).toString());
viewItr = viewList.iterator();
%>
<tr>
<%
while(viewItr.hasNext())
{
%>
<td><%=viewItr.next()%></td>
<%
}
count++;
%>
<td><input type="button" name="edit" value="Edit" onclick="editRecord(<%=product_id%>);" ></td>
<td><input type="button" name="delete" value="Delete" onclick="deleteRecord(<%=product_id%>);"></td>
</tr>
<%
}
}
if(count==0)
{
%>
<tr><td > </td></tr>
<tr><td>No Record Avaliable</td></tr>
<%
}
%>
<tr><td></td></tr>
</table>
</BODY>
</HTML>
Upvotes: 0
Views: 170
Reputation: 24895
try {
...
al.add(rs.getDouble("user_name")); <-- Exception thrown
al.add(rs.getDouble("user_address"));
...
String url = "/admin/orders.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
} catch (SQLException e) { <-- Exception catch
e.printStackTrace();
When you get an exception, the code after the exception is skipped until the exception is catched. The redirection code is not executed at all. That said, getting a name or an address as a double is unusual.
Upvotes: 1
Reputation: 692121
There is a good reason for the servlet to not forward to the JSP page: one of the statements before the forward throws a SQLException, so the rest of the instructions are skipped, and the catch block is executed. Since the forward is part of the the instructions that are after the statement throwing the exception (and is thus skipped due to the exception), no forward is made.
The exception is probably caused by
rs.getDouble("user_name");
I doubt your users are named 3.452 and 67.43 ;-)
Upvotes: 1