一、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+" ");
%>
</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);;
}
}