Servlet

一、Servlet基础

1、手工编写第一个Servlet

重写doGet()还是doPost()方法取决于用户提交请求的方式,采用get方式提交请求,重写doGet()方法;采用post方式提交请求,重写doPost()方法。

例如:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>
  <head>
  </head>
  
  <body>
    <a href="servlet/HelloServlet1">doGet方法</a>    <!--href与web.xml中的url-pattern一致-->
    <form name="myServlet" action="servlet/HelloServlet1" method="post">    <!--action与web.xml中的url-pattern一致-->
    	<input type="submit" name="doPost方法">
    </form>
  </body>
</html>

src下创建servlet包,新建HelloServlet.java类

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;

public class HelloServlet extends HttpServlet{//继承HttpServlet方法

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("doGet方法...");
		PrintWriter pw=response.getWriter();
		response.setCharacterEncoding("text/html;charset=utf-8");
		pw.print("<h1>aaaa</h1>");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("doPost方法...");
		PrintWriter pw=response.getWriter();
		response.setCharacterEncoding("text/html;charset=utf-8");
		pw.print("<h1>bbbbb</h1>");

        //也可以使用doGet(request,response);代替上面的4行,意思是让doPost()执行与doGet()相同的操作
	}
	
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>MyFirstServletDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>myServlet</servlet-name>
  	<servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>myServlet</servlet-name>        <!--两个servlet-name一致-->
  	<url-pattern>/servlet/HelloServlet1</url-pattern>        <!--第一个/表示根目录-->
  </servlet-mapping>
</web-app>

 

2、使用MyEclipse编写Servlet

在src下新建一个servlet,其余基本同上,MyEclipse自己创建

 

3、Servlet的执行流程和生命周期

Servlet生命周期:

1)初始化阶段,调用init()方法(先创建实例,所以构造方法在init()方法之前被调用)

2)响应客户端请求,调用service方法。由service方法根据提交方式选择执行deGet()或者doPost()方法

3)终止阶段,调用destory()方法

 

4、Servlet与JSP内置对象的对应关系

 

5、servlet获取表单数据

例如:

注册页面reg.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<html>
  <head> 
    <title>My JSP 'index.jsp' starting page</title>
	<script type="text/javascript" src="js/My97DatePicker/WdatePicker.js"></script>
  </head>
  
  <body>
    <h1>用户注册</h1>
    <hr>
    <form action="servlet/regServlet" method="post">
    	<table>
    		<tr>
    			<td>用户名</td>
    			<td><input name="username" type="text"></td>
    		</tr>
    		<tr>
    			<td>密码</td>
    			<td><input name="password" type="password"></td>
    		</tr>
    		<tr>
    			<td>
    				<input name="sex" type="radio" value="male" checked="checked">男
    				<input name="sex" type="radio" value="female">女
    			</td>
    		</tr>
    		<tr>
    			<td>邮箱</td>
    			<td><input name="email" type="text"></td>
    		</tr>
    		<tr>
    			<td>生日</td>
    			<td><input type="text" name="birthday" onclick="WdatePicker({dateFmt:'yyyy-MM-dd'});"/>
    		</tr>
    		<tr>
    			<td>爱好</td>
    			<td>
    				<input name="hobby" type="checkbox" value="travel">旅游
    				<input name="hobby" type="checkbox" value="reading">读书
    				<input name="hobby" type="checkbox" value="sports">运动
    				<input name="hobby" type="checkbox" value="movie">电影
    			</td>
    		</tr>
    		<tr>
    			<td>自我介绍</td>
    			<td><textarea name="introduce" rows="10" cols="40"></textarea></td>
    		</tr>
    		<tr>
    			<td><input name="flag" type="checkbox" value="true">是否同意某某协议</td>
    		</tr>
    		<tr>
    			<td><input type="submit" value="注册"></td>
    		</tr>
    	</table>
    </form>
  </body>
</html>

src下entity包里的User.java

package entity;

import java.util.Date;

public class User {
	private String username;
	private String password;
	private String sex;
	private String email;
	private Date birthday;
	private String[] hobby;
	private String introduce;
	private boolean flag;
	/*private boolean isAccept;*/
	
	public User(){
		
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}

	public String getIntroduce() {
		return introduce;
	}

	public void setIntroduce(String introduce) {
		this.introduce = introduce;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}
/*	public boolean isAccept() {
		return isAccept;
	}

	public void setAccept(boolean isAccept) {
		this.isAccept = isAccept;
	}*/
}

servlet包下的regServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import entity.User;

public class regServlet extends HttpServlet {
	public regServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); 
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try {
			User u=new User();
			request.setCharacterEncoding("utf-8");
			String myuserName=request.getParameter("username");
			String mypassWord=request.getParameter("password");
			String mySex=request.getParameter("sex");
			String myEmail=request.getParameter("email");
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Date myBirthday=sdf.parse(request.getParameter("birthday"));
			String[] myHobby=request.getParameterValues("hobby");
			String myIntroduce=request.getParameter("introduce");
			String flag;

			u.setUsername(myuserName);
			u.setPassword(mypassWord);
			u.setSex(mySex);
			u.setEmail(myEmail);
			u.setBirthday(myBirthday);
			u.setHobby(myHobby);
			u.setIntroduce(myIntroduce);
			if(request.getParameterValues("flag")!=null){
				u.setFlag(true);
			}
			else{	
				u.setFlag(false);
			}
			request.getSession().setAttribute("mySession", u);
			//../表示当前目录的上一级目录,也就是userinfo.jsp文件在这个java文件的上一级目录下
			//?
			request.getRequestDispatcher("../inform.jsp").forward(request, response);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void init() throws ServletException {
		
	}
}

显示注册信息页inform.jsp

<%@ page language="java" import="java.util.*,java.text.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'inform.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>

<body>
	<h1>显示用户信息</h1>
	<hr>
	<jsp:useBean id="mySession" class="entity.User" scope="session"></jsp:useBean>
	<table>
		<tr>
			<td>用户名</td>
			<td><jsp:getProperty name="mySession" property="username"/></td>
		</tr>
		<tr>
			<td>密码</td>
			<td><jsp:getProperty name="mySession" property="password"/></td>
		</tr>
		<tr>
			<td>性别</td>
			<td><jsp:getProperty name="mySession" property="sex"/></td>
		</tr>
		<tr>
			<td>邮箱</td>
			<td><jsp:getProperty name="mySession" property="email"/></td>
		</tr>
		<tr>
			<td>生日</td>
			<td>
				<%-- <jsp:getProperty name="mySession" property="birthday"/> --%>
				<%
					SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
					String date=sdf.format(mySession.getBirthday());
					out.print(date);
				%>
			</td>
		</tr>
		<tr>
			<td>爱好</td>
			<td>
			<% 
				String[] hobbies=mySession.getHobby();
				for(String hobby:hobbies)
					out.print(hobby+"&nbsp");
			%>
			</td>
		</tr>
		<tr>
			<td>自我介绍</td>
			<td><jsp:getProperty name="mySession" property="introduce"/></td>
		</tr>
		<tr>
			<td>是否同意某某协议</td>
			<td><jsp:getProperty name="mySession" property="flag"/></td>
		</tr>
	</table>
</body>
</html>

 

 

 

二、综合案例

实现添加商品到购物车,显示购物车中的商品,删除购物车中的商品

com.entity下的Items.java

package com.entity;

//商品类
public class Items {
	private int id;
	private String name;
	private String city;
	private int price;
	private int number;
	private String picture;
	
	public Items(){}

	public Items(int id,String name,String city,int price,int number,String picture){
		this.id=id;
		this.name=name;
		this.city=city;
		this.price=price;
		this.number=number;
		this.picture=picture;
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public String getPicture() {
		return picture;
	}

	public void setPicture(String picture) {
		this.picture = picture;
	}
	
	
	
	@Override
	public int hashCode() {
		return this.getId()+this.getName().hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Items))
			return false;
		Items other = (Items) obj;
		if (id != other.id)
			return false;
		return true;
	}

	public String toString(){
		return "商品ID:"+this.getId()+"\t商品名称:"+this.getName();
	}
}

com.entity下的Cart.java

package com.entity;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

//购物车类
public class Cart {
	//商品作为键,购买商品的数量作为值
	private HashMap<Items,Integer> goods=new HashMap<Items,Integer>();
	private double totalPrice=0.0;
	
	public Cart(){
		
	}

	public HashMap<Items, Integer> getGoods() {
		return goods;
	}

	public void setGoods(HashMap<Items, Integer> goods) {
		this.goods = goods;
	}

	public double getTotalPrice() {
		return totalPrice;
	}

	public void setTotalPrice(double totalPrice) {
		this.totalPrice = totalPrice;
	}
	
	//增加商品
	public boolean addGoodsInCart(Items item,int number){
		if(goods.get(item)!=null)
			goods.put(item, goods.get(item)+number);
/*		if(goods.containsKey(item)){
			goods.put(item, goods.get(item)+number);
		}*/else
			goods.put(item, number);
		calTotalPrice();
		return true;
	}
	
	//删除商品
	public boolean deleteGoodsInCart(Items item){
		goods.remove(item);
		calTotalPrice();
		return true;
	}
	
	//计算总价
	public double calTotalPrice(){
		double sum=0.0;
		Set<Items> keys=goods.keySet();
		Iterator<Items> it=keys.iterator();
		while(it.hasNext()){
			Items item=it.next();
			sum+=item.getPrice()*goods.get(item);
		}
		this.setTotalPrice(sum);
		return this.getTotalPrice();
/*		for(Items item:keys){
			sum+=item.getPrice()*goods.get(item);
		}
		return sum;*/
	}
	
/*	public static void main(String[] args) {
		Cart c=new Cart();
		Items item1=new Items(1,"沃特篮球鞋","温州",200,500,"001.jpg");
		Items item2=new Items(2,"李宁运动鞋","广州",300,500,"002.jpg");
		//添加重复商品,重写Items类的equals和toString方法
		Items item3=new Items(1,"沃特篮球鞋","温州",200,500,"001.jpg");
		c.addGoodsInCart(item1, 2);
		c.addGoodsInCart(item2, 2);
		c.addGoodsInCart(item3, 3);
		
		//重写Items的toString方法
		Set<Entry<Items, Integer>> items=c.getGoods().entrySet();
		System.out.println(items);
		
		double totalPrice=c.calTotalPrice();
		System.out.println(totalPrice);
	}*/
}

com.util下的DBHelper.java

package com.util;

import java.sql.*;

//获得数据库连接
public class DBHelper {
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/test";// test是数据库名
	private static final String USER = "root";// 用户名
	private static final String PASSWORD = "root";// 密码
	private static Connection con = null;
	
	// 静态块执行最早
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() throws Exception{
		if(con==null){
			con = DriverManager.getConnection(URL, USER, PASSWORD);
		}
		return con;
	}
	
	public static void main(String[] args) {
		try {
			Connection con=DBHelper.getConnection();
			if(con==null)
				System.out.println("连接失败");
			else
				System.out.println("连接成功");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

com.dao下的ItemsDAO.java

package com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.entity.Items;
import com.util.DBHelper;

public class ItemsDAO {
	private Connection con=null;
	private ResultSet rs=null;
	private PreparedStatement ptmt;

    //显示所有商品信息
	public List<Items> getAllItems(){
		List<Items> allItems=new ArrayList<Items>();
		try {
			con=DBHelper.getConnection();
			String sql="select * from items";
			ptmt=con.prepareStatement(sql);
			rs=ptmt.executeQuery();
			while(rs.next()){
				Items item=new Items();
				item.setId(rs.getInt("id"));
				item.setName(rs.getString("name"));
				item.setCity(rs.getString("city"));
				item.setNumber(rs.getInt("number"));
				item.setPrice(rs.getInt("price"));
				item.setPicture(rs.getString("picture"));
				allItems.add(item);
			}
				
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(ptmt!=null){
				try {
					ptmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return allItems;
	}
	
	//根据商品编号获得商品信息
	public Items getItemsById(int id){
		try {
			con=DBHelper.getConnection();
			String sql="select * from items where id=?";
			ptmt=con.prepareStatement(sql);
			ptmt.setInt(1,id);
			rs=ptmt.executeQuery();
			if(rs.next()){
				Items item=new Items();
				item.setId(rs.getInt("id"));
				item.setName(rs.getString("name"));
				item.setCity(rs.getString("city"));
				item.setNumber(rs.getInt("number"));
				item.setPrice(rs.getInt("price"));
				item.setPicture(rs.getString("picture"));
				return item;
			}else{
				return null;
			}		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(ptmt!=null){
				try {
					ptmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	public List<Items> showDetail(String s){
    	List<Items> itemsList=new ArrayList<Items>();
    	int iCount=5;
    	if(s!=null && s.length()>0){
    		String[] arr=s.split(",");     		
    		if(arr.length>=5){
	    		for(int i=arr.length-1;i>=arr.length-iCount;i--){
	    			itemsList.add(getItemsById(Integer.parseInt(arr[i])));
	    		}
    		}
    		else{
	    		for(int i=arr.length-1;i>=0;i--){
	    			itemsList.add(getItemsById(Integer.parseInt(arr[i])));
	    		}
    		}
    		return itemsList;
    	}else{
    		return null;
    	}
	}
}

servlet下的CartServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.ItemsDAO;
import com.entity.Cart;
import com.entity.Items;

public class CartServlet extends HttpServlet {
	private String action;
	private ItemsDAO itemsdao=new ItemsDAO();
	
	public CartServlet() {
		super();
	}

	public void destroy() {
		super.destroy();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		action=request.getParameter("action");
		if(action.equals("add")){
			if(addToCart(request,response)){
				request.getRequestDispatcher("../success.jsp").forward(request, response);
			}else{
				request.getRequestDispatcher("../fail.jsp").forward(request, response);
			}	
		}
		if(action.equals("show")){
			request.getRequestDispatcher("../cart.jsp").forward(request, response);
		}
		if(action.equals("delete")){
			if(deleteFormCart(request,response)){
				request.getRequestDispatcher("../cart.jsp").forward(request, response);
			}else{
				request.getRequestDispatcher("../cart.jsp").forward(request, response);
			}	
		}
	}
	
	public boolean addToCart(HttpServletRequest request, HttpServletResponse response){
		int id=Integer.parseInt(request.getParameter("id"));
		int number=Integer.parseInt(request.getParameter("num"));		
		Items item=itemsdao.getItemsById(id);
		if(request.getSession().getAttribute("cart")==null){
			Cart cart=new Cart();
			request.getSession().setAttribute("cart", cart);
		}
		Cart c=(Cart) request.getSession().getAttribute("cart");
		if(c.addGoodsInCart(item, number))
			return true;
		else 
			return false;
	}

	public boolean deleteFormCart (HttpServletRequest request, HttpServletResponse response){
		int id=Integer.parseInt(request.getParameter("id"));
		Items item=itemsdao.getItemsById(id);
		Cart c=(Cart) request.getSession().getAttribute("cart");
		if(c.deleteGoodsInCart(item))
			return true;
		else
			return false;
	}
	
	public void init() throws ServletException {
		
	}
}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.dao.ItemsDAO,com.entity.Items" %>

<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
  	<h1>商品详细信息</h1>
  	<br>
    <%
    	ItemsDAO itemsDao=new ItemsDAO();
 		List<Items> allItems=itemsDao.getAllItems();
    	if(allItems!=null && allItems.size()>0){
	    	for(int i=0;i<allItems.size();i++){
	    		Items item=allItems.get(i);
    %>
    <div>
    	<a href="detail.jsp?id=<%=item.getId()%>"><image src="images/<%=item.getPicture() %>" width="120px" height="200px"></a>
    	<br>
    	商品名称:<span><%=item.getName() %></span><br>
    	生产地:<span><%=item.getCity() %></span><br>
    	剩余数量:<span><%=item.getNumber() %></span><br>
    	价格:<span><%=item.getPrice() %></span>
    </div>
    <%} }%>
  </body>
</html>

detal.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.dao.ItemsDAO,com.entity.Items" %>

<html>
  <head>
    <title>My JSP 'detail.jsp' starting page</title>
    
    <script type="text/javascript" src="js/lhgcore.js"></script>
    <script type="text/javascript" src="js/lhgdialog.js"></script>
    <script type="text/javascript">
      function selflog_show(id)
      { 
         var num =  document.getElementById("number").value; 
         J.dialog.get({id: 'haoyue_creat',title: '购物成功',width: 600,height:400, link: '<%=path%>/servlet/CartServlet?id='+id+'&num='+num+'&action=add', cover:true});
      }
      function sub(){
    	  var num =  parseInt(document.getElementById("number").value); 
    	  if(num>1)
    		  document.getElementById("number").value=--num;
      }
      function add(){
    	  var num =  parseInt(document.getElementById("number").value); 
    	  if(num<100)
    		  document.getElementById("number").value=++num;
      }
      
    </script>
  </head>
  
  <body>
  	<%
  		ItemsDAO itemsDao=new ItemsDAO();
  		Items item=itemsDao.getItemsById(Integer.parseInt(request.getParameter("id")));
  		if(item!=null){
  	%>
    <div>
    	<image src="images/<%=item.getPicture() %>" width="120px" height="200px">
    	<br>
    	<%-- id:<span><%=item.getId()%></span><br> --%>
    	商品名称:<span><%=item.getName() %></span><br>
    	生产地:<span><%=item.getCity() %></span><br>
    	剩余数量:<span><%=item.getNumber() %></span><br>
    	价格:<span><%=item.getPrice() %></span><br>
    	购买数量:<span id="sub" onclick="sub();">-</span><input type="text" id="number" name="number" value="1" size="2"/><span id="add" onclick="add();">+</span>
    </div>
    <div id="cart">
   		<a href="javascript:selflog_show(<%=item.getId()%>)"><img src="images/in_cart.png"></a><a href="servlet/CartServlet?action=show"><img src="images/view_cart.jpg"/></a>
    </div>
    <%} %>
    
    <%
    	String s="";
    	Cookie[] cookies=request.getCookies();
    	if(cookies!=null && cookies.length>0){
    		for(Cookie c:cookies){
    			//listCookies是之前保存的Cookie的名字
    			if(c.getName().equals("listCookies"))
    				s=c.getValue();	
    		}
    	}
    	//追加当前商品编号
    	s+=request.getParameter("id")+",";
    	//超过1000条记录清0
    	String[] arr=s.split(",");
    	if(arr!=null && arr.length>0){
    		if(arr.length>=1000)
    			s="";
    	}
    	Cookie cookie=new Cookie("listCookies",s);
    	response.addCookie(cookie);
    %>  
    <h1>浏览记录</h1>
    <%	
		List<Items> items=itemsDao.showDetail(s);
		if(items!=null && items.size()>0){
			for(Items i:items){	
    %>
    <div>
    	<image src="images/<%=i.getPicture() %>" width="120px" height="200px"/>
    	<br>
    	商品名称:<p><%=i.getName() %></p>
    </div>
    <%} }%>
  </body>
</html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'success.jsp' starting page</title>
  </head>
  
  <body>
  <%
  	String id=request.getParameter("id");
  	String num=request.getParameter("num");
  %>
     成功购买ID为<%=id %>的商品<%=num %>件
  </body>
</html>

fail.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>
  <head>
    <title>My JSP 'fail.jsp' starting page</title>
  </head>
  
  <body>
    添加到购物车失败!
  </body>
</html>

cart.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.entity.Cart,com.entity.Items"%>

<html>
<head>
	<title>My JSP 'cart.jsp' starting page</title>
	<script language="javascript">
	    function delcfm() {
	        if (!confirm("确认要删除?")) {
	            window.event.returnValue = false;
	        }
	    }
   </script>
</head>

<body>
	<h1>我的购物车</h1>
	<a href="index.jsp">首页</a>
	<hr>
	<div id="shopping">
		<table>
			<tr>
				<th>商品名称</th>
				<th>商品单价</th>
				<th>商品总价</th>
				<th>购买数量</th>
				<th>操作</th>
			</tr>
			
			<%
				if(request.getSession().getAttribute("cart")!=null){
					Cart cart=(Cart)request.getSession().getAttribute("cart");
					HashMap<Items, Integer> goods=cart.getGoods();
					Set<Items> items=goods.keySet();
					Iterator<Items> item=items.iterator();
					while(item.hasNext()){
						Items i=item.next();
			%>
			<tr name="products" id="product_id_1">
				<td class="thumb"><img src="images/<%=i.getPicture()%>" width="120px" height="200px"/><%=i.getName()%></td>
				<td class="number"><%=i.getPrice()%></td>
				<td class="price" id="price_id_1"><span><%=i.getPrice() * goods.get(i)%></span><input type="hidden" value="" /></td>
				<td class="number"><%=goods.get(i)%></td>
				<td class="delete"><a href="servlet/CartServlet?action=delete&id=<%=i.getId()%>" onclick="delcfm();">删除</a></td>
			</tr>
			<%} %>
		</table>
		<div class="total">
			<span id="total">总计:<%=cart.getTotalPrice()%>¥</span>
		</div>
		<%} %>
	</div>
</body>
</html>

数据库的表结构:

 

 

 

三、Servlet实现文件上传和下载

文件上传例子:

show.jsp

    <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
    	请选择要上传的文件:<input id="myfile" name="myfile" type="file"/><br>
    	<input type="submit" value="提交"><%=request.getAttribute("result") %>
    </form>

UploadServlet.java

package com.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UploadServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		InputStream is=request.getInputStream();
		String tempFileDir="D:/tempFile";
		File tempFile=new File(tempFileDir);
		FileOutputStream fos=new FileOutputStream(tempFile);
		byte b[]=new byte[1024];
		int n;
		while((n=is.read(b))!=-1){
			fos.write(b,0,n);
		}
		fos.close();
		is.close();
		
		RandomAccessFile raf=new RandomAccessFile(tempFile,"r");
		raf.readLine();//第一行数据没有用
		String str=raf.readLine();//第二行数据,截取文件名
		int beginIndex=str.lastIndexOf("\\")+1;
		int endIndex=str.lastIndexOf("\"");
		String filename=str.substring(beginIndex,endIndex);
		System.out.println("filename:"+filename);
		
		//重新定位文件指针到文件头
		raf.seek(0);
		long startPosition=0;
		int i=1;
		//获取文件内容开始位置
		while((n=raf.readByte())!=-1 && i<=4){
			if(n=='\n'){
				startPosition=raf.getFilePointer();
				i++;
			}
		}
		//startPosition--;
		//获取文件内容结束位置
		raf.seek(raf.length());
		long endPosition=raf.getFilePointer();
		int j=1;
		while(endPosition>=0 && j<=2){
			endPosition--;
			raf.seek(endPosition);
			if(raf.readByte()=='\n'){
				j++;
			}
		}
		endPosition--;
		
		
		String realPath=getServletContext().getRealPath("/")+"images";
		File dir=new File(realPath);
		if(!dir.exists()){
			dir.mkdir();
		}
		File myFile=new File(dir,filename);
		RandomAccessFile raf1=new RandomAccessFile(myFile,"rw");
		raf.seek(startPosition);
		while(startPosition<endPosition){
			raf1.write(raf.readByte());
			startPosition=raf.getFilePointer();
		}
		raf1.close();
		raf.close();
		tempFile.delete();
		
		request.setAttribute("result", "成功");
		request.getRequestDispatcher("/jsp/show.jsp").forward(request, response);;
		
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值