下面是《Beginning JSP, JSF and Tomcat》书中的代码例子,学习一下如何用servlet和jsp开发网页
jsp开发网站有两类结构(1,纯jsp;2,servlet负责接入请求处理逻辑,jsp负责渲染,示例图分别如下)
代码采用第二种结构,目录结构如下图
JSP代码如下:
(index.jsp)
<%@page language="java" contentType="text/html"%> <%@page trimDirectiveWhitespaces="true"%> <%@page session="true" import="java.util.Vector, ebookshop.Book"%> <html> <head> <title>E-bookshop</title> <style type="text/css"> body {background-color:gray; font-size=10pt;} H1 {font-size:20pt;} table {background-color:white;} </style> </head> <body> <H1>Your online Bookshop</H1> <hr/><p/> <% // 1: 用户直接访问http://127.0.0.1:8080/index.jsp,没有数据,302跳转到/eshop Vector<ebookshop.Book> booklist = (Vector<ebookshop.Book>)session.getValue("ebookshop.list"); if (booklist == null) { response.sendRedirect("/eshop"); } else { %> <form name="addForm" action="eshop" method="POST"> <input type="hidden" name="do_this" value="add"> Book: <select name=book> <% // 2: 从session中获取booklist,添加在选择表单内 for (int i = 0; i < booklist.size(); i++) { out.println("<option>" + booklist.elementAt(i) + "</option>"); } %> </select> Quantity: <input type="text" name="qty" size="3" value="1"> <input type="submit" value="Add to Cart"> </form> <p/> <% // 3: 从session中获取已购书单,显示在table中 Vector shoplist = (Vector<ebookshop.Book>)session.getAttribute("ebookshop.cart"); if (shoplist != null && shoplist.size() > 0) { %> <table border="1" cellpadding="2"> <tr> <td>TITLE</td> <td>PRICE</td> <td>QUANTITY</td> <td></td> </tr> <% // 4: 显示书单 for (int i = 0; i < shoplist.size(); i++) { Book aBook = (Book)shoplist.elementAt(i); %> <tr> <form name="removeForm" action="eshop" method="POST"> <input type="hidden" name="position" value="<%=i%>"> <input type="hidden" name="do_this" value="remove"> <td><%=aBook.getTitle()%></td> <td align="right">$<%=aBook.getPrice()%></td> <td align="right"><%=aBook.getQuantity()%></td> <td><input type="submit" value="Remove from Cart"></td> </form> </tr> <% } // for (int i.. %> </table> <p/> <form name="checkoutForm" action="eshop" method="POST"> <input type="hidden" name="do_this" value="checkout"> <input type="submit" value="Checkout"> </form> <% } // if (shoplist.. } // if (booklist..else.. %> </body> </html>
(Checkout.jsp)
<%@page language="java" contentType="text/html"%> <%@page session="true" import="java.util.Vector, ebookshop.Book" %> <html> <head> <title>E-Bookshop Checkout</title> <style type="text/css"> body {background-color:gray; font-size=10pt;} H1 {font-size:20pt;} table {background-color:white;} </style> </head> <body> <H1>Your online Bookshop - Checkout</H1> <hr/><p/> <table border="1" cellpadding="2"> <tr> <td>TITLE</td> <td align="right">PRICE</td> <td align="right">QUANTITY</td> </tr> <% Vector<Book> shoplist = (Vector<Book>)session.getAttribute("ebookshop.cart"); for (Book anOrder : shoplist) { %> <tr> <td><%=anOrder.getTitle()%></td> <td align="right">$<%=anOrder.getPrice()%></td> <td align="right"><%=anOrder.getQuantity()%></td> </tr> <% } session.invalidate(); %> <tr> <td>TOTALS</td> <td align="right">$<%=(String)request.getAttribute("dollars")%></td> <td align="right"><%=(String)request.getAttribute("books")%></td> </tr> </table> <p/> <a href="/ebookshop/eshop">Buy more!</a> </body> </html>
Servlet逻辑代码
(ShoppingServlet.java)
package ebookshop; import java.util.Vector; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import ebookshop.Book; public class ShoppingServlet extends HttpServlet { public void init(ServletConfig conf) throws ServletException { super.init(conf); } public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doPost(req, res); } public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session = req.getSession(true); @SuppressWarnings("unchecked") Vector<Book> shoplist = (Vector<Book>)session.getAttribute("ebookshop.cart"); String do_this = req.getParameter("do_this"); // If it is the first time, initialize the list of books, which in // real life would be stored in a database on disk // 不是从form表单发起的post请求,初始化数据dispatch到index.jsp if (do_this == null) { Vector<String> blist = new Vector<String>(); blist.addElement("Learn HTML5 and JavaScript for iOS. Scott Preston $39.99"); blist.addElement("Java 7 for Absolute Beginners. Jay Bryant $39.99"); blist.addElement("Beginning Android 4. Livingston $39.99"); blist.addElement("Pro Spatial with SQL Server 2012. Alastair Aitchison $59.99"); blist.addElement("Beginning Database Design. Clare Churcher $34.99"); session.setAttribute("ebookshop.list", blist); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/"); rd.forward(req, res); } else { // If it is not the first request, it can only be a checkout request // or a request to manipulate the list of books being ordered // checkout请求,从session中获取booklist然后计算价格输出到Checkout.jsp if (do_this.equals("checkout")) { float dollars = 0; int books = 0; for (Book aBook : shoplist) { float price = aBook.getPrice(); int qty = aBook.getQuantity(); dollars += price * qty; books += qty; } req.setAttribute("dollars", new Float(dollars).toString()); req.setAttribute("books", new Integer(books).toString()); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/Checkout.jsp"); rd.forward(req, res); } // if (..checkout.. // Not a checkout request - Manipulate the list of books else { //删除一本书 if (do_this.equals("remove")) { String pos = req.getParameter("position"); shoplist.removeElementAt((new Integer(pos)).intValue()); } else if (do_this.equals("add")) {//添加一本书 boolean found = false; Book aBook = getBook(req); if (shoplist == null) { // the shopping cart is empty shoplist = new Vector<Book>(); shoplist.addElement(aBook); } else { // update the #copies if the book is already there for (int i = 0; i < shoplist.size() && !found; i++) { Book b = (Book)shoplist.elementAt(i); if (b.getTitle().equals(aBook.getTitle())) { b.setQuantity(b.getQuantity() + aBook.getQuantity()); shoplist.setElementAt(b, i); found = true; } } // for (i.. if (!found) { // if it is a new book => Add it to the shoplist shoplist.addElement(aBook); } } // if (shoplist == null) .. else .. } // if (..add.. // 更新图书列表,返回index.jsp session.setAttribute("ebookshop.cart", shoplist); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/"); rd.forward(req, res); } // if (..checkout..else } // if (do_this.. } // doPost private Book getBook(HttpServletRequest req) { String myBook = req.getParameter("book"); int n = myBook.indexOf('$'); String title = myBook.substring(0, n); String price = myBook.substring(n+1); String qty = req.getParameter("qty"); return new Book(title, Float.parseFloat(price), Integer.parseInt(qty)); } // getBook }
(Book.java)
package ebookshop; public class Book { String title; float price; int quantity; public Book(String t, float p, int q) { title = t; price = p; quantity = q; } public String getTitle() { return title; } public void setTitle(String t) { title = t; } public float getPrice() { return price; } public void setPrice(float p) { price = p; } public int getQuantity() { return quantity; } public void setQuantity(int q) { quantity = q; } }
Servlet编译为class文件,移动到classes下面的ebookshop目录下
javac -classpath .:/root/apache/apache-tomcat-6.0.37/lib/servlet-api.jar:/usr/share/java/servlet.jar *.java
最后配置/usr/share/tomcat6/conf/web.xml文件,添加servlet路由
<servlet> <servlet-name>EBookshopServlet</servlet-name> <servlet-class>ebookshop.ShoppingServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EBookshopServlet</servlet-name> <url-pattern>/eshop</url-pattern> </servlet-mapping>
访问http://127.0.0.1:8080/index.jsp或者http://127.0.0.1:8080/eshop即可
相关推荐
学习《Head First Servlet和JSP》这本书,读者将深入理解如何配置和部署Servlet容器(如Tomcat),如何编写Servlet和JSP代码,以及如何利用过滤器和监听器来增强应用的功能。此外,书中还会介绍MVC(Model-View-...
- **MVC模式**:尽管不是直接的编程概念,但理解Model-View-Controller模式有助于你更好地组织Servlet和JSP代码。 通过深入学习和实践这些源代码,你可以逐步建立起对Servlet和JSP的深刻理解,为构建复杂的Java Web...
1. **编写Servlet和Jsp示例代码**:根据实验要求编写Servlet和Jsp代码。 2. **编译Java文件**:使用JDK提供的`javac`命令或者IDE工具(如Eclipse或IntelliJ IDEA)编译Java源代码。 3. **打包成WAR文件**:将编译后...
这份"Servlet 和 Jsp 学习指南+ 代码"资源包显然旨在帮助开发者深入理解和掌握这两项技术。 Servlet是Java提供的一种用于扩展服务器功能的接口,它允许开发者编写Java代码来处理HTTP请求。Servlet生命周期包括加载...
在这个项目中,Eclipse被用来编写、编译、调试和部署Servlet和JSP代码。 6. **JAR包**:项目中可能包含了一些外部的JAR库,例如JDBC驱动(用于连接MySQL)、Servlet API和其他帮助处理特定任务的库。这些JAR包被...
它们通常位于Tomcat的`lib`目录下,因为Tomcat作为Servlet和JSP容器,需要这些API来解析和执行Servlet和JSP代码。开发时,将这两个库添加到项目的类路径中,可以确保编译和运行时的兼容性。 在实际开发中,Servlet...
本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两项核心的Java Web开发技术。 Servlet是Java平台上的一个标准API,用于构建动态Web应用程序。它允许开发者通过Java代码来处理HTTP...
Servlet和JSP是Java Web开发中的核心技术,它们用于构建动态、交互式的Web应用程序。本学习指南的源代码提供了丰富的示例,帮助开发者深入理解这两门技术。以下是对这两个概念的详细解析。 **Servlet概述** Servlet...
10. **最佳实践**:学习如何编写可维护、可扩展的Servlet和JSP代码,包括代码分离、注释规范、异常处理策略等。 通过深入学习以上知识点,并结合提供的"18_SERVLET&JSP02.pdf"文档,你可以逐步掌握Servlet和JSP的...
JSP则是HTML代码和Java代码的混合体,提供了一种更便捷的方式来创建动态网页。 本压缩包中的源代码涵盖了servlet和JSP的核心编程概念,包括多个章节的实例和解释,让我们一一剖析这些文件可能包含的内容: 1. ...
【Servlet和JSP技术概述】 Servlet和JSP(JavaServer Pages)是Java平台上的两种核心技术,主要用于构建动态Web应用程序。它们在Web开发中的角色至关重要,尤其在处理客户端请求和生成响应方面。以下是对Servlet和...
开发者在MyEclipse中编写Servlet和JSP代码,配置Tomcat服务器,设置数据库连接,然后进行测试和运行。 为了实现进销存管理,系统可能包含以下核心功能模块: 1. 商品管理:包括商品的添加、删除、修改和查询。用户...
它可能会讲解如何配置Servlet容器,如Tomcat,如何编写Servlet和JSP代码,以及如何处理HTTP请求和响应。此外,书中可能还会讨论如何使用Servlet过滤器和监听器来增强功能,以及如何利用JSP标签库(JSTL)和自定义...
5. **JSP内置对象**:学习如何使用request、response、session等对象,以及如何在JSP中嵌入Java代码和EL(Expression Language)表达式。 6. **JSP指令和动作**:如`<jsp:include>`, `<jsp:forward>`, `<jsp:...
这个名为“servlet/jsp深入详解源代码”的资料集合可能包含了他在Servlet和JSP领域的深入讲解,以及相关的源代码示例。 Servlet是Java平台上的一个标准接口,它允许开发者编写可被Web服务器调用的Java代码来处理...
《servlet和jsp学习指南》是一本专为Java Web开发初学者量身定制的书籍,它以细致入微的讲解和实例操作,带领读者深入理解Servlet和JSP的基本原理和应用方法。本书将从以下几个方面展开知识点的讲解: 1. Servlet...
Servlet和JSP(JavaServer Pages)是Java Web开发中的核心组件,用于构建动态网页和Web应用程序。Servlet是一种Java编程接口,允许开发人员扩展服务器的功能,处理来自客户端(如浏览器)的请求并返回响应。JSP则是...
- 编写代码:利用RAD提供的编辑器编写Servlet和JSP代码。 - 配置部署:通过web.xml文件或其他方式配置Servlet和JSP。 - 测试与调试:利用内置的服务器进行应用测试,并使用调试工具查找问题。 - 部署发布:将...
在本项目中,MyEclipse用于编写、运行和调试Servlet和JSP代码。 3. **SQL Server 2005**: 数据库管理系统,存储和管理电子书店中的书籍信息、用户信息、订单数据等。开发者需要设置数据库连接,确保项目能与SQL ...
这些工具通常会解析JSP文件,自动提取出所有的Java代码和逻辑,然后生成对应的Servlet类。文件名"将JSP代码转为Servlet"可能就是一个这样的工具,它可以减轻开发者的负担,提高工作效率。 6. 转换的优缺点: - 优点...