`

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics