我是服务器端编程的新手。我有一个关于在线图书销售管理系统的最后一年项目。我想知道如何为点击购买的每本书图像生成动态页面。我的意思是说如果用户请求任何书籍X,如何生成一个显示其所有细节,图像等信息的页面。我应该使用什么样的网址?
答案 0 :(得分:3)
只需将书籍的唯一标识符作为请求参数或请求路径信息传递,并使用servlet基于标识符在doGet()
方法中执行数据查找,将其存储在请求范围内并转发到生成所有必要HTML的JSP文件。
E.g。作为具有此servlet的请求参数/book?id=123
@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);
}
}
或者作为此servlet的请求路径信息/book/123
@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的链接,只需循环遍历List<Book>
/WEB-INF/books.jsp
,如下所示,假设您需要/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>
答案 1 :(得分:3)
我认为这是一个小规模的项目 首先为您的书籍维护一个数据库..给每个人一个唯一的ID。 如果您显示所有常见的详细信息,如...发布,价格,书名,作者,评论,评级....那么你不必担心..创建一个通用的JSP页面来显示基于的indo一个独特的...
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将成为你的灵感来源 pass_an_id_for_your_bookX将是您存储在数据库中的bookX的唯一ID。
你的第二个JSP中的说:getInfo.jsp
设计JSP以进行演示,将有关BookX / BookY w.r.t的信息显示给bookId 在JSP中获取bookId的值并查询DB ...
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。我只是给你一个想法!
一切顺利