简体   繁体   中英

no forward when servlet is called

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> 

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM