gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:31:12 24 4
gpt4 key购买 nike

我正在学习如何将 jdbc 与 jsp 结合使用,并且遇到了一个问题,我一直试图解决但无济于事,希望有人可以提供一些见解。我的问题是,由于某种原因,明星列表对象最终为空,而流派列表则很好。我可以根据用户输入看到所选类型的电影类型,但每部电影的相关明星不会显示。我怀疑这可能是因为我的功能是从列表中搜索星星。我会尝试调试并找到错误,但是我建立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>

'

最佳答案

经过一番思考,我决定从另一个方向着手,创建一个包含先前类的两个私有(private)字段的类。通过使用单个类,我可以进行单个 SQL 查询,而不是两个单独的查询。它没有解决我之前的问题,但它有效。

关于java - 发送两个不同类的对象到jsp并显示信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com