为什么我jsp页面显示不了商品呢?

来源:8-7 商品详细信息显示

moummm

2017-08-27 18:38

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.bean.Item" %>
<%@ page import="com.dao.ItemsDao" %>
<%@ page import="java.util.List" %>
<html>
  <head>
    <title>商品列表</title>
      <style type="text/css">
          div{
              float:left;
              margin: 10px;
          }
          div dd{
              margin:0px;
              font-size:10pt;
          }
          div dd.dd_name
          {
              color:blue;
          }
          div dd.dd_city
          {
              color:#000;
          }
      </style>
  </head>
  <body>
  <h1>商品展示</h1>
  <hr>
  <center>
    <table width="750" height="60" cellpadding="0" cellspacing="0" border="0">
      <tr>
        <td>

          <!-- 商品循环开始 -->
          <%
            ItemsDao itemsDao = new ItemsDao();
            List<Item> items =  itemsDao.getItems();
            Item item = null;
            if (items!=null&&items.size()>0) {
              for (int i =0;i<items.size();i++){
                  item = items.get(i);
          %>
          <div>
            <dl>
              <dt>
                <a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1"/></a>
              </dt>
              <dd class="dd_name"><%=item.getName() %></dd>
              <dd class="dd_city">产地:<%=item.getCity() %>&nbsp;&nbsp;价格:¥ <%=item.getPrice() %></dd>
            </dl>
          </div>
          <!-- 商品循环结束 -->

          <%
              }
            }
          %>
        </td>
      </tr>
    </table>
  </center>
  </body>
</html>
public class Item {

    private int id; // 商品编号
    private String name; // 商品名称
    private String city; // 产地
    private int price; // 价格
    private int number; // 库存
    private String picture; // 商品图片

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }
}
public class ItemsDao {

    public List<Item> getItems() {
        Connection conn = null;
        Item item = null;
        ResultSet rs =null;
        List<Item> items = new ArrayList<Item>();
        conn = DBHelper.getConn();
        String sql = " select * from items ";
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                item.setId(rs.getInt("id"));
                item.setName(rs.getString("name"));
                item.setCity(rs.getString("city"));
                item.setNumber(rs.getInt("number"));
                item.setPicture(rs.getString("picture"));
                item.setPrice(rs.getInt("price"));
                items.add(item);
                item = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally {
            // 释放数据集对象
            if (rs != null) {
                try {
                    rs.close();
                    rs = null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            // 释放语句对象
            if (ps != null) {
                try {
                    ps.close();
                    ps = null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return items;
    }

    public Item getItem( int id) {
        Connection conn = null;
        Item item = null;
        ResultSet rs =null;
        conn = DBHelper.getConn();
        String sql = " select * from items WHERE id = ? ";
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            rs = ps.executeQuery();
            if(rs.next()){
                item.setId(rs.getInt("id"));
                item.setName(rs.getString("name"));
                item.setCity(rs.getString("city"));
                item.setNumber(rs.getInt("number"));
                item.setPicture(rs.getString("picture"));
                item.setPrice(rs.getInt("price"));
                return item;
            }else
                return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally {
            // 释放数据集对象
            if (rs != null) {
                try {
                    rs.close();
                    rs = null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            // 释放语句对象
            if (ps != null) {
                try {
                    ps.close();
                    ps = null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
}
public class DBHelper {

    private static Connection conn;

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn(){
        if (conn==null)
            try {
                conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc",
                        "root", "2503391049");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        return conn;
    }

    public static void main(String[] args) {
        Connection connection = getConn();
        if (connection!=null)
            System.out.println("连接成功");
        else
            System.out.println("连接失败");
    }

}


写回答 关注

3回答

  • 二部学习小组
    2017-08-29 19:40:23
    已采纳

    你的 ItemsDao类中的 getItems()方法中的 item你创建的时候写的是:“Item item = null;”这样你给 item实例 的属性赋值调用 Item类 的方法的时候,系统认不出来这个 item引用 是 Item类型 的,所以无法赋值会直接报错,导致程序并没有执行,所以你的 items数组 中其实什么也没加进去是空的;

    所以你的创建item是应该调用 Item类的构造方法:“Item item = new Item();”,这样系统才可以认出这个 item引用 是 Item类型 的引用;

    另外while循环中最后一行,你把item引用置为空了而且又没有新创建一个 Item类型的实例,这样你第二次执行循环会出同样的错,而 ArrayList的add 存的只是对象的引用,并不是把对象内容重新copy一份再把新引用存进去,如果引用所指向的实例内容发生变化的话,ArrayList中引用指向的实例内容也随之发生变化。

    所以 你应该把 item实例 的创建写进循环内部,每次循环都创建一个 item新实例,再进行赋值并添加到 items数组 中;

    如果不是每次循环每次新建的话,你最后  items数组 中存的其实是同一个item的引用,也就是说虽然有十条绳子,但是牵的是一条狗。最终会导致 items数组 中的内容都一样,页面里显示的是同一个商品,只不过显示了十个。

  • 二部学习小组
    2017-08-30 17:41:51
    1. 你index.jsp中 item的创建 写的也是 Item item = null;

    2. 你 index.jsp 第一行的写法和文件导入的写法,不清楚你写的对不对,可以参考看下老师的:

      <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

      <%@ page import="entity.Items"%>

      <%@ page import="dao.ItemsDAO"%>

  • 二部学习小组
    2017-08-29 18:28:46

    你数据库里有数据么?

    二部学习小组 回复moummm

    你 return 写在 finally 里不一点起作用的,这个问题就深奥了,自己百度吧……

    2017-08-30 17:28:35

    共 3 条回复 >

JAVA遇见HTML——JSP篇

Java Web入门级教程JSP,带你轻松的学习JSP基础知识

248276 学习 · 3198 问题

查看课程

相似问题