`

Servlet和JSP代码

 
阅读更多

下面是《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即可

  • 大小: 20.8 KB
  • 大小: 31.1 KB
  • 大小: 21.7 KB
分享到:
评论

相关推荐

    Head First Servlet and JSP 代码2

    学习《Head First Servlet和JSP》这本书,读者将深入理解如何配置和部署Servlet容器(如Tomcat),如何编写Servlet和JSP代码,以及如何利用过滤器和监听器来增强应用的功能。此外,书中还会介绍MVC(Model-View-...

    Servlet&JSP源代码

    - **MVC模式**:尽管不是直接的编程概念,但理解Model-View-Controller模式有助于你更好地组织Servlet和JSP代码。 通过深入学习和实践这些源代码,你可以逐步建立起对Servlet和JSP的深刻理解,为构建复杂的Java Web...

    WebLogic平台下部署Servlet与Jsp

    1. **编写Servlet和Jsp示例代码**:根据实验要求编写Servlet和Jsp代码。 2. **编译Java文件**:使用JDK提供的`javac`命令或者IDE工具(如Eclipse或IntelliJ IDEA)编译Java源代码。 3. **打包成WAR文件**:将编译后...

    Servlet 和 Jsp 学习指南+ 代码

    这份"Servlet 和 Jsp 学习指南+ 代码"资源包显然旨在帮助开发者深入理解和掌握这两项技术。 Servlet是Java提供的一种用于扩展服务器功能的接口,它允许开发者编写Java代码来处理HTTP请求。Servlet生命周期包括加载...

    Servlet+jsp Java Web开发

    在这个项目中,Eclipse被用来编写、编译、调试和部署Servlet和JSP代码。 6. **JAR包**:项目中可能包含了一些外部的JAR库,例如JDBC驱动(用于连接MySQL)、Servlet API和其他帮助处理特定任务的库。这些JAR包被...

    servlet-api和jsp-api

    它们通常位于Tomcat的`lib`目录下,因为Tomcat作为Servlet和JSP容器,需要这些API来解析和执行Servlet和JSP代码。开发时,将这两个库添加到项目的类路径中,可以确保编译和运行时的兼容性。 在实际开发中,Servlet...

    Head First Servlet & JSP

    本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两项核心的Java Web开发技术。 Servlet是Java平台上的一个标准API,用于构建动态Web应用程序。它允许开发者通过Java代码来处理HTTP...

    servlet与JSP学习指南代码

    Servlet和JSP是Java Web开发中的核心技术,它们用于构建动态、交互式的Web应用程序。本学习指南的源代码提供了丰富的示例,帮助开发者深入理解这两门技术。以下是对这两个概念的详细解析。 **Servlet概述** Servlet...

    Servlet与Jsp入门二

    10. **最佳实践**:学习如何编写可维护、可扩展的Servlet和JSP代码,包括代码分离、注释规范、异常处理策略等。 通过深入学习以上知识点,并结合提供的"18_SERVLET&JSP02.pdf"文档,你可以逐步掌握Servlet和JSP的...

    servlet与JSp核心编程源代码

    JSP则是HTML代码和Java代码的混合体,提供了一种更便捷的方式来创建动态网页。 本压缩包中的源代码涵盖了servlet和JSP的核心编程概念,包括多个章节的实例和解释,让我们一一剖析这些文件可能包含的内容: 1. ...

    Servlet和JSP技术简述(英文翻译)

    【Servlet和JSP技术概述】 Servlet和JSP(JavaServer Pages)是Java平台上的两种核心技术,主要用于构建动态Web应用程序。它们在Web开发中的角色至关重要,尤其在处理客户端请求和生成响应方面。以下是对Servlet和...

    Servlet+Jsp超市进销存管理系统

    开发者在MyEclipse中编写Servlet和JSP代码,配置Tomcat服务器,设置数据库连接,然后进行测试和运行。 为了实现进销存管理,系统可能包含以下核心功能模块: 1. 商品管理:包括商品的添加、删除、修改和查询。用户...

    j2ee技术web层servlet和jsp.zip

    它可能会讲解如何配置Servlet容器,如Tomcat,如何编写Servlet和JSP代码,以及如何处理HTTP请求和响应。此外,书中可能还会讨论如何使用Servlet过滤器和监听器来增强功能,以及如何利用JSP标签库(JSTL)和自定义...

    Servlet和Jsp学习指南源代码.rar

    5. **JSP内置对象**:学习如何使用request、response、session等对象,以及如何在JSP中嵌入Java代码和EL(Expression Language)表达式。 6. **JSP指令和动作**:如`&lt;jsp:include&gt;`, `&lt;jsp:forward&gt;`, `&lt;jsp:...

    servlet/jsp深入详解源代码

    这个名为“servlet/jsp深入详解源代码”的资料集合可能包含了他在Servlet和JSP领域的深入讲解,以及相关的源代码示例。 Servlet是Java平台上的一个标准接口,它允许开发者编写可被Web服务器调用的Java代码来处理...

    servlet和jsp学习指南

    《servlet和jsp学习指南》是一本专为Java Web开发初学者量身定制的书籍,它以细致入微的讲解和实例操作,带领读者深入理解Servlet和JSP的基本原理和应用方法。本书将从以下几个方面展开知识点的讲解: 1. Servlet...

    Servlet与JSP核心编程第二版源代码

    Servlet和JSP(JavaServer Pages)是Java Web开发中的核心组件,用于构建动态网页和Web应用程序。Servlet是一种Java编程接口,允许开发人员扩展服务器的功能,处理来自客户端(如浏览器)的请求并返回响应。JSP则是...

    RAD--J2EE,Servlet and JSP

    - 编写代码:利用RAD提供的编辑器编写Servlet和JSP代码。 - 配置部署:通过web.xml文件或其他方式配置Servlet和JSP。 - 测试与调试:利用内置的服务器进行应用测试,并使用调试工具查找问题。 - 部署发布:将...

    电子书店源代码,使用jsp servlet

    在本项目中,MyEclipse用于编写、运行和调试Servlet和JSP代码。 3. **SQL Server 2005**: 数据库管理系统,存储和管理电子书店中的书籍信息、用户信息、订单数据等。开发者需要设置数据库连接,确保项目能与SQL ...

    将JSP代码转为Servlet

    这些工具通常会解析JSP文件,自动提取出所有的Java代码和逻辑,然后生成对应的Servlet类。文件名"将JSP代码转为Servlet"可能就是一个这样的工具,它可以减轻开发者的负担,提高工作效率。 6. 转换的优缺点: - 优点...

Global site tag (gtag.js) - Google Analytics