我是服务器端编程的新手。我有一个关于在线图书销售管理系统的最后一年项目。我想知道如何为每个点击购买的图书图片生成一个动态页面。我的意思是说,如果用户请求任何书 X,如何生成一个显示其所有详细信息、图像等信息的页面。我应该使用什么样的网址?
2 回答
只需将书籍的唯一标识符作为请求参数或请求路径信息传递,并有一个servlet来根据标识符在方法中执行数据查找doGet()
,将其存储在请求范围内并转发到生成所有必要 HTML 的 JSP 文件.
例如作为/book?id=123
这个 servlet的请求参数
@WebServlet("/book")
public class BookServlet extends HttpServlet {
@EJB
private BookService service;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Book book = service.find(request.getParameter("id"));
request.setAttribute("book", book);
request.getRequestDispatcher("/WEB-INF/book.jsp").forward(request, response);
}
}
或者作为/book/123
这个 servlet的请求路径信息
@WebServlet("/book/*")
public class BookServlet extends HttpServlet {
@EJB
private BookService service;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Book book = service.find(request.getPathInfo().substring(1));
request.setAttribute("book", book);
request.getRequestDispatcher("/WEB-INF/book.jsp").forward(request, response);
}
}
无论哪种方式,它/WEB-INF/book.jsp
都可能看起来像通常的方式。
<p>Title: <c:out value="${book.title}" /></p>
<p>Author: <c:out value="${book.author}" /></p>
<p>Summary: <c:out value="${book.summary}" /></p>
为了生成这些指向 servlet 的链接,只需按如下方式循环 a List<Book>
in /WEB-INF/books.jsp
,假设您想要以下 URL /book/123
:
<ul>
<c:forEach items="${books}" var="book">
<li>
<a href="${pageContext.request.contextPath}/book/${book.id}">
View book with title: <c:out value="${book.title}" />
</a>
</li>
</c:forEach>
</ul>
我假设这是一个小规模的项目。
首先为您的书籍维护一个数据库......给每个人一个唯一的ID。如果您要显示所有常见的详细信息,例如...出版日期、价格、书名、作者、评论、评级...那么您不必担心...创建一个通用 JSP 页面来显示基于一个独特的ID...
jsp 说:books.jsp
<form name="books" action="getInfo.jsp">
<a href="YourJSP/?bookid=pass_an_id_for_your_bookX">Book X(Image)</a> //Book X
<a href="YourJSP/?bookid=pass_an_id_for_your_bookY">Book Y(Image)</a> //Book Y
<a href="YourJSP/?bookid=pass_an_id_for_your_bookZ">Book Z(Image)</a> //Book Z
....
.... an on..
</form>
?bookid 将是你的 paramid。
pass_an_id_for_your_bookX 将是您存储在数据库中的 bookX 的唯一 ID。
在你的第二个 JSP 里面说:getInfo.jsp
设计您的 JSP 以进行演示,以将有关 BookX / BookY 的信息显示到 bookId 在您的 JSP 中获取 bookId 的值并查询数据库...
String bookId = request.getParameter("bookid"):
//This will get the value of your bookId for BookX
//Connect to your DB
//Use PreparedStatement or StoredProcedure to make a query pass your bookId in where condition.
休息很简单,通过查询数据库,您将获得所有常用值,即。发表于、价格、书名、作者、评论、评级......并在您的 JSP 页面中相应地显示它们......
<%
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
String BookName=null;
String AuthorName=null;
String Price=null;
String Rating=null;
try {
Class.forName(driver);
con = DriverManager.getConnection(connection);
String sql =
"select * from BOOKS_TABLE where bookId =?";
pst = con.prepareStatement(sql);
pst.setString(1, bookId);
rs = pst.executeQuery();
while (rs.next()) {
BookName = rs.getString(1);
AuthorName = rs.getString(2);
Price = rs.getString(3);
Rating = rs.getString(4);
}
// 1 , 2, 3... denotes column numbers
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
%>
现在你得到了所有的值..好吧,相应地显示它们..
<%=BookName%>
<%=AuthorName%>
<%=Price%>
<%=Rating%>
注意:不鼓励在 JSP 页面中使用 Scriplets(Java 代码)。您可能需要检查 Beans 或 JSTL。我只是给你一个想法!
一切顺利