将两个不同类的对象发送到jsp并显示信息

时间:2016-02-07 01:14:48

标签: java mysql jsp jdbc

我正在学习如何将jdbc与jsp一起使用,我遇到了一个问题,我一直试图弄清楚无用,并希望有人可以提供一些见解。我的问题是starlist对象由于某种原因最终变空,而genrelist很好。我能够根据用户输入看到所选类型的电影类型,但每部电影的相关明星都没有显示。我怀疑这可能是因为我的功能是从列表中搜索星星。我会尝试调试并找到错误但是我建立tomcat和eclipse的方法以及我对这种类型的编程缺乏知识使得它非常困难。任何帮助表示赞赏谢谢。 output of jsp

`

public class GenreServlet extends HttpServlet
{
    String query;
       List<Genre> genreList;
       List<Movie> genreSelect;
       List<Star> starSelect;

    @Override
       public void init(ServletConfig config) throws ServletException 
       {
          query = null;

          genreList = null;
          genreSelect = null;

          ServletContext context = config.getServletContext();  
          context.getRequestDispatcher("/jsp/genrelist.jsp");



       }

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
       throws ServletException, IOException 
       { 

           query = req.getParameter("query");


        if(query == null)
        {
            try
            {
                genreList = new GenreDAO().genreList();

            }
            catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           req.getSession().setAttribute("genres", genreList);        
           req.getRequestDispatcher("/jsp/genrelist.jsp").forward(req, resp);
        }
        else
        {

            try
           {
             genreSelect = new MovieDAO().findMoviesFromGenre(query);
             starSelect = new StarDAO().findStarsFromMovies(genreSelect);
           }
            catch(Exception e)
           {
                   e.printStackTrace();
           }

               req.getSession().setAttribute("movies", genreSelect);        
               req.getSession().setAttribute("starlist", starSelect);
               req.getRequestDispatcher("/jsp/movielist.jsp").forward(req, resp);

        }


       }



}

`

public class StarDAO
{
    public List<Star> findStarsFromMovies(List<Movie> movieList) throws Exception
    {
        List<Star> result = new ArrayList<Star>();

        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/";
        String dbName = "moviedb";
        String user = "andrew"; 
        String password = "bg79jd7c";
        String sql = "select * from stars where id in (select star_id from stars_in_movies where"
                    + " movie_id in (select id from movies where title = ?));";

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;     

        for(Movie movie: movieList)
        {
        try 
        {
            Class.forName(driver).newInstance(); 
            connection = DriverManager.getConnection(url + dbName, user, password);
            statement = connection.prepareStatement(sql);
            statement.setString(1, movie.getTitle());

            resultSet = statement.executeQuery();
            while(resultSet.next())
            {
                Star star = new Star();
                star.setId(resultSet.getInt("id"));
                star.setFirstName(resultSet.getString("first_name"));
                star.setLastName(resultSet.getString("last_name"));
                star.setDOB(resultSet.getString("dob"));
                star.setPhoto(resultSet.getString("photo_url"));
                result.add(star);

            }


        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        } 
        finally 
        {
            if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
            if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
            if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
        }


        }

        return result;
    }
}

 public class MovieListServlet extends HttpServlet
    {
        List<Movie> movieItems;
        List<Star> starList;
        String query;
        Movie movie;

        @Override
           public void init(ServletConfig config) throws ServletException 
           {
            query = null;
            movie = null;

              ServletContext context = config.getServletContext();  
              context.getRequestDispatcher("/jsp/movielist.jsp");



           }

           @Override
           protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
           throws ServletException, IOException 
           { 




                   try
                   {
               movieItems = (List<Movie>) req.getAttribute("movies");
               req.getSession().setAttribute("movies", movieItems);       
               starList = (List<Star>) req.getAttribute("starlist");
               req.getSession().setAttribute("stars", starList);
               req.getRequestDispatcher("/jsp/movielist.jsp").forward(req, resp);
                   }
                   catch(Exception e)
                   {
                       System.out.println(e);
                   }


            /**   
            try
            {
                movieItems = new MovieDAO().movieList();
            }
            catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
               req.getSession().setAttribute("movies", movieItems);       
               req.getRequestDispatcher("/jsp/movielist.jsp").forward(req, resp);
               */
           }



    }

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<table>
 <a href="home">Home</a>

 <c:forEach var="star" items="${stars}">
    <tr>

      <td>${star.id}</td>        
      <td>${star.first_name}</td>        
      <td>${star.last_name}</td>
       <td>${star.dob}</td>
        <td>${star.photo_url}</td>


    </tr>
  </c:forEach>

  <c:forEach var="movie" items="${movies}">
    <tr>

      <td>${movie.id}</td>
      <td><a href="movies?query=${movie.id}"> ${movie.title}</td>
      <td>${movie.year}</td>
      <td>${movie.director}</td>
    <td>  <img src ="${movie.banner}"></td>
      <td><a href="${movie.trailer}">trailer</a></td>         

    </tr>
  </c:forEach>

</table>

1 个答案:

答案 0 :(得分:0)

经过一番思考后,我决定从另一个方向接近并创建一个包含以前类的私有字段的类。通过使用单个类,我可以创建一个SQL查询而不是两个单独的SQL查询。它没有解决我之前的问题,但它确实有效。