2013-01-11 40 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