如何在jsp中链接到动态生成的页面

时间:2013-01-11 15:59:05

标签: jsp

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

2 个答案:

答案 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。我只是给你一个想法!

一切顺利