0

当我调用 servlet 时,它不会转到所需的 jsp 页面。下面是两个代码

日志中有一个错误说明了这一点,但这并不是不转发到目的地的真正理由

     java.sql.SQLException: Bad format for number 'bb' in column 4.

使用此代码调用 servlet,非常确定 url 映射

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

            }
        }

jsp页面

            <%@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> 
4

2 回答 2

1

servlet 不转发到 JSP 页面有一个很好的理由:转发之前的语句之一抛出 SQLException,因此跳过其余指令,并执行 catch 块。由于转发是在抛出异常的语句之后的指令的一部分(因此由于异常而被跳过),因此不进行转发。

异常可能是由

rs.getDouble("user_name");

我怀疑您的用户被命名为 3.452 和 67.43 ;-)

于 2012-09-23T16:10:42.530 回答
1
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();      

当遇到异常时,会跳过异常之后的代码,直到捕获到异常为止。重定向代码根本不执行。也就是说,将姓名或地址作为双重身份是不寻常的。

于 2012-09-23T16:11:45.133 回答