Java 将对象的arraylist从servlet传递到jsp失败

Java 将对象的arraylist从servlet传递到jsp失败,java,jsp,servlets,Java,Jsp,Servlets,在过去的三天里,这些事情已经让我头疼了。我尝试存储从数据库获得的结果集,并将其存储在对象的arraylist中,然后将其传递给jsp进行显示,但在运行程序后,出现以下错误: 有人知道如何解决这个问题吗?提前谢谢! 下面是我的代码: menu.java @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExceptio

在过去的三天里,这些事情已经让我头疼了。我尝试存储从数据库获得的结果集,并将其存储在对象的arraylist中,然后将其传递给jsp进行显示,但在运行程序后,出现以下错误:

有人知道如何解决这个问题吗?提前谢谢! 下面是我的代码: menu.java

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse     response)
        throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    try {
        Class.forName("com.mysql.jdbc.Driver");

        //Create connection object
        conn = DriverManager.getConnection(request.getServletContext().getInitParameter("url"), request.getServletContext().getInitParameter("username"), request.getServletContext().getInitParameter("password"));
        String sql = "select name,price,imageurl from food";
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        class food {

            String name;
            double price;
            String imageurl;

        }
        ArrayList<food> foodDetail = new ArrayList<food>();

        while (rs.next()) {
            food temp = new food();

            temp.name = rs.getString("name");
            temp.price = rs.getDouble("price");
            temp.imageurl = rs.getString("imageurl");

            foodDetail.add(temp);

        }
        request.setAttribute("menu", foodDetail);
        RequestDispatcher req = request.getRequestDispatcher("menu.jsp");
        req.forward(request, response);

    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
    } finally {

        try {
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
        }

    }
@覆盖
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
PrintWriter out=response.getWriter();
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
//创建连接对象
conn=DriverManager.getConnection(request.getServletContext().getInitParameter(“url”)、request.getServletContext().getInitParameter(“用户名”)、request.getServletContext().getInitParameter(“密码”);
String sql=“从食物中选择名称、价格、图像URL”;
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
等级食品{
字符串名;
双倍价格;
字符串imageurl;
}
ArrayList foodDetail=新的ArrayList();
while(rs.next()){
食品温度=新食品();
temp.name=rs.getString(“名称”);
临时价格=rs.getDouble(“价格”);
temp.imageurl=rs.getString(“imageurl”);
添加(温度);
}
setAttribute(“菜单”,foodDetail);
RequestDispatcher req=request.getRequestDispatcher(“menu.jsp”);
请求转发(请求、响应);
}捕获(ClassNotFoundException ex){
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE,null,ex);
}catch(SQLException-ex){
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE,null,ex);
}最后{
试一试{
rs.close();
stmt.close();
康涅狄格州关闭();
}catch(SQLException-ex){
}
}
menu.jsp

<%
        class food {

            String name;
            double price;
            String imageurl;
        }


        ArrayList<food> foodDetail = (ArrayList<food>) request.getAttribute("menu");
        food temp = new food();
java.util.Iterator it = foodDetail.iterator();
        while (it.hasNext()) {

            food z = (food) it.next();

            out.println(z.getName());


        }


    %>

尝试从jsp页面中删除此类食品:

  class food {

        String name;
        double price;
        String imageurl;
    }
相反,尝试在jsp页面中像这样导入类食物。 并在路径中添加反斜杠:

   RequestDispatcher req = request.getRequestDispatcher("/menu.jsp");

在列表
ArrayList foodDetail=new ArrayList()中使用servlet中的食物类
您试图传递的是试图在jsp本身定义的
org.apache.jsp_menu$1food
中进行转换。删除jsp中的类food声明并使用
它应该与我评论的servlet中使用的内容相同。

控制台中有任何错误吗?您的food类在传递的内容和尝试的内容上不同g到case in,您需要导入您在jsp的servlet中使用的食物类,而不是在jsp中定义另一个类