2013-01-11 41 views
1

我是服务器端编程的新手。我有一个在线图书销售管理系统的最后一年项目。我想知道如何为每个点击购买的图书图片生成一个动态页面。我的意思是说,如果用户请求任何书籍X,怎么可能生成一个显示其所有细节,图像等信息的页面。我应该使用什么样的网址?如何链接到jsp的动态生成页面

+0

你可以给模式的细节? –

+0

这是一个在线图书销售管理系统,人们可以在线购买图书。我想知道如何从数据库中获取图书信息,并在任何用户点击任何图书图像或链接时将其显示在另一个页面中。我的意思是说如何链接这两个页面,因为我以前不知道用户点击哪本书。我的问题摘要是如何知道哪本书已被点击,然后将用户带到该书的详细页面。 –

回答

2

只需传递书籍的唯一标识符作为请求参数或请求路径信息,并根据标识符在doGet()方法中执行servlet数据查找,将其存储在请求范围内并转发到JSP文件生成所有必需的HTML。

E.g.与这个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); 
    } 

} 

无论哪种方式,请求参数/book?id=123,该/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> 

为了产生/WEB-INF/books.jsp这些链接到servlet,只是遍历一个List<Book>如下,假设你希望网址喜欢/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> 
+0

感谢您的帮助。我不明白 - >代码。这究竟是什么? –

+0

这只是一个循环,而不是'List '。它就像普通Java代码中的“for(Book book:books){}”一样。点击我答案中的“servlet”链接以获取更多示例。 – BalusC

2

我假定这是一个小规模的项目。
首先为你的书保留一个数据库..给他们每个人一个唯一的ID。 如果您显示所有常见的详细信息,例如...已发布,价格,图书名称,作者,评论,评分....然后您无需担心。创建常见的JSP页面以显示基于indo上UNIQUEID ...

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呈现,到diplay有关您的BookX/BookY WRT到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%> 

A注意:在JSP页面中不鼓励使用脚本(Java代码)。您可能想要检入Beans或JSTL。我只是给你一个IDEA!

全部最好

+0

感谢您的帮助,真的有帮助:D –

+0

此代码暴露了很多不良做法,最糟糕的是数据库资源泄漏。 – BalusC

+0

嘿巴洛斯,我知道我给了他'注'。这个孩子正在做最后一年的项目......现在我不能指望他成为Pro JSTL,HQL或者Spring MVC,对吗?所以,我只是给了他IDEA,并用一个NOTE来警告他。 哦!而我的差我忘了关闭我的RS和DB连接:D很匆忙。祝你有美好的一天! – SaK