下面是《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即可
相关推荐
servlet与JSP学习指南的源代码 完整版,供各位学习使用
jsp 上传图片并保存到数据库里的servlet代码和jsp代码 在ORACRE中存储任何文件
Servlet和Jsp学习指南源代码.rar
jsp加servlet分页代码,jsp加servlet分页代码jsp加servlet分页代码jsp加servlet分页代码jsp加servlet分页代码jsp加servlet分页代码jsp加servlet分页代码
servlet/jsp深入详解源代码
《Servlet 和 JSP 学习指南》的源代码 《Servlet & JSP:A Tutorial》 作者:Budi Kurniawan 于2015.8.10从官网下载 官网:http://books.brainysoftware.com/download 目录概览: apps |__app01a |__app02b |__app...
Head First Servlet and JSP 一书所用代码(一个例子)
韩顺平servlet与jsp代码:包括用户管理与网上购物系统
servlet与JSp核心编程源代码,官网上下载的,代码都在里面
本书全面深入地介绍了servlet和JSP技术。本书重点介绍核心技术, 同时对相关的内容。对于初学者,非常适用。本次提供下载是本书配的源代码
一个工具,能将JSP代码转为Servlet代码
带有 Servlet 和 JSP 代码的简单聊天框。 没有使用数据库。 使用的Servlet、Filter、Listener、JSP、JSTL的核心概念。 国际化:通过调用在登录页面更改区域设置: 日期时间格式和货币可以在美国和澳大利亚演示: ...
servlet代码转jsp代码
只为分享开发技术, 大家一起学习, 正版书买不到了, 只好电子版了
Servlet与JSP核心编程第二版代码
本源代码主要是由JSP+Servlet+javaBean做的BBS源代码,供初学者学习使用。
JSP page指令 12、 在JSP页面中包含文件和applet 13、JavaBean组件在JSP文档中的应用 14、Servlet和JSP的集成:模型-视图-控制器构架 15、简化对Java代码的访问 JSP 2.0表达式语言 <br>
JSP SERVLET代码参考
Servlet,JSP和Spring MVC 初学指南源码
《Servlet和Jsp学习指南》的书和源码,一共两个压缩包(必须都下载下来才能解压成功的),这是第二个包。