Servlet及其使用

主要内容:

  • 创建Servlet
  • 配置Servlet
  • Servlet的生命周期
  • Servlet的应用案例:商品信息浏览及商品详情、历史访问记录展示。
    详细记录:

1 创建Servlet

(1)自定义类继承HttpServlet,实现doGet、doPost方法
(2)利用模板定义Servlet

2 配置Servlet

举例:在web.xml中进行配置。

<servlet>
<servlet-name>QueryAllProduct</servlet-name>
<servlet-class>cn.sdut.servlet.product.QueryAllProduct</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>QueryAllProduct</servlet-name>
<url-pattern>/servlet/QueryAllProduct</url-pattern>
</servlet-mapping>

3 Servlet的生命周期

Init()方法和destroy()方法

4 Servlet的应用案例:商品信息浏览及商品详情、历史访问记录展示。

第一步 创建数据库shopping和表product
第二步 创建Web project——Shopping,增加数据库连接JAR包支持。将图片复制到项目中
第三步 在src下创建包cn.sdut.po,里面放置Product
第四步 在src下创建包cn.sdut.dao,里面放置BaseDao,ProductDao
第五步在src下创建包cn.sdut.servlet创建Servlet
第六步 创建页面
第七步 执行

具体代码为:

第一步 创建数据库shopping和表product

create table product
(
   proid int PRIMARY key auto_increment, -- 商品编号
   proname varchar(30) not null,         -- 商品名称
   proprice double not null,   -- 商品价格
   procount  int not null,     -- 商品数量
   prosupplier varchar(50)  ,  -- 供货商
   propic varchar(30)          -- 商品图片
);

-- 向product表中增加记录
insert into product(proname,proprice,procount,prosupplier,propic) values(’沃特篮球鞋’,230.2,100,’北京’,’001.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’安踏运动鞋’,300.7,100,’福州’,’002.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’耐克’,122.2,100,’上海’,’003.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’ADDIDAS’,45.24,100,’广州’,’004.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’李宁’,788.27,100,’深圳’,’005.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’小米2S’,1254.20,100,’天津’,’006.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’小米3’,1565.4,100,’济南’,’007.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’THINKPAD’,5853.89,100,’淄博’,’008.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’DELL’,4665.0,100,’青岛’,’009.jpg’);
insert into product(proname,proprice,procount,prosupplier,propic) values(’iPAD’,3368.3,100,’美国’,’010.jpg’);

第二步 创建Web project——Shopping,增加数据库连接JAR包支持。将图片复制到项目中

第三步 在src下创建包cn.sdut.po,里面放置Product

package cn.sdut.po;
public class Product {
    private int proid;
    private String proname;
    private double proprice;
    private int procount;
    private String prosupplier;
    private String propic;

    public int getProid() {
        return proid;
    }

    public void setProid(int proid) {
        this.proid = proid;
    }

    public String getProname() {
        return proname;
    }

    public void setProname(String proname) {
        this.proname = proname;
    }

    public double getProprice() {
        return proprice;
    }

    public void setProprice(double proprice) {
        this.proprice = proprice;
    }

    public int getProcount() {
        return procount;
    }

    public void setProcount(int procount) {
        this.procount = procount;
    }

    public String getProsupplier() {
        return prosupplier;
    }

    public void setProsupplier(String prosupplier) {
        this.prosupplier = prosupplier;
    }

    public String getPropic() {
        return propic;
    }

    public void setPropic(String propic) {
        this.propic = propic;
    }

    @Override
    public String toString() {
        return "Product [proid=" + proid + ", proname=" + proname
                + ", proprice=" + proprice + ", procount=" + procount
                + ", prosupplier=" + prosupplier + ", propic=" + propic + "]";
    }
}

第四步 在src下创建包cn.sdut.dao,里面放置BaseDao,ProductDao

BaseDao.java
 package cn.sdut.dao;

import java.sql.*;

public class BaseDao {
    Connection con;
    PreparedStatement pst;
    ResultSet rs;

    public  Connection getConn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager
                    .getConnection(
                            "jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf-8",
                            "root", "123321");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
    }

    public void closeAll() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            if (con != null) {

                con.close();

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

ProductDao

package cn.sdut.dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.sdut.po.Product;
public class ProductDao extends BaseDao {
  //锟矫碉拷锟斤拷锟斤拷锟斤拷品锟斤拷息
         public List<Product> queryAllProducts()
         {
                   List<Product> productList=new ArrayList<Product>();
                   con=getConn();
                   String sql="select * from product";

                   try {
                            pst=con.prepareStatement(sql);
                            rs=pst.executeQuery();
                            while(rs.next())
                            {
                                     Product product=new Product();
                                     product.setProid(rs.getInt("proid"));
                                     product.setProname(rs.getString("proname"));
                                     product.setProprice(rs.getDouble("proprice"));
                                     product.setProcount(rs.getInt("procount"));
                                     product.setProsupplier(rs.getString("prosupplier"));
                                     product.setPropic(rs.getString("propic"));
                                     productList.add(product);
                            }
                   } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                   }
                   finally
                   {
                            closeAll();
                   }
                   return productList;          
         }

         public List<Product> queryProducts(String historyList)
         {
                   String[] productIds=historyList.split(",");
                   List<Product> productList=new ArrayList<Product>();
                   int len=productIds.length;
                   for(int i=0;i<len;i++)
                   {
                            productList.add(queryProductById(Integer.parseInt(productIds[i])));
                   }
                   return productList;          
         }

         //锟斤拷锟斤拷锟斤拷锟矫碉拷锟斤拷品锟斤拷息
                   public Product queryProductById(int id)
                   {
                            Product product=null;
                            con=getConn();
                            String sql="select * from product where proid=?";

                            try {
                                     pst=con.prepareStatement(sql);
                                     pst.setInt(1, id);
                                     rs=pst.executeQuery();
                                     if(rs.next())
                                     {       
                                               product=new Product();
                                               product.setProid(rs.getInt("proid"));
                                               product.setProname(rs.getString("proname"));
                                               product.setProprice(rs.getDouble("proprice"));
                                               product.setProcount(rs.getInt("procount"));
                                               product.setProsupplier(rs.getString("prosupplier"));
                                               product.setPropic(rs.getString("propic"));                                          
                                     }
                            } catch (SQLException e) {
                                     // TODO Auto-generated catch block
                                     e.printStackTrace();
                            }
                            finally
                            {
                                     closeAll();
                            }
                            return product;                 
                   }
}

第五步在src下创建包cn.sdut.servlet.product创建Servlet——QueryAllProduct.java 和QueryProductById.java

QueryAllProduct.java

package cn.sdut.servlet.product;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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

import cn.sdut.dao.ProductDao;
import cn.sdut.po.Product;

public class QueryAllProduct extends HttpServlet {

         public void doGet(HttpServletRequest request, HttpServletResponse response)
                            throws ServletException, IOException {
                   ProductDao productDao=new ProductDao();
                   List<Product> productList= productDao.queryAllProducts();
                   request.setAttribute("proList", productList);
                   request.getRequestDispatcher("/product/showAllProduct.jsp").forward(request, response);
         }


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

}

QueryProductById.java

package cn.sdut.servlet.product;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.sdut.dao.ProductDao;
import cn.sdut.po.Product;

public class QueryProductById extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //1 根据商品编号proid取出商品,放入request作用域
        int id=Integer.parseInt(request.getParameter("productid"));
        ProductDao productDao=new ProductDao();
        Product product=productDao.queryProductById(id);
        request.setAttribute("product", product);
        //2 处理Cookie——历史访问记录
        /*
         * 读取Cookie中名称为histroy的数据
         * 重新组织histroy: (1,2,3,4,5)的形式
         *   若为空,表示未曾访问过,将现有的商品编号加入历史访问记录
         *   若不为空,重新组织数据:将现有商品编号+“,”加在前面
         *      如果该商品刚刚访问过,则不加入,保持原来的访问记录
         * 重写Cookie的同时,根据histroy取得表中的记录,放入request作用域
         * */
        String historyList = null;
        //从cookie中取出历史访问记录数据,形式为:1,2,3,4,5或null的形式
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie c : cookies) {
                if (c.getName().equals("histroy")) {
                    historyList = c.getValue(); //得到历史记录
                }
            }
        }
        if (historyList == null) {
            historyList = product.getProid()+"";       
        } else if (!historyList.startsWith(product.getProid() + "")) {
            historyList = product.getProid() + "," + historyList;      
        }

        //保留5条
        String[] productIds=historyList.split(",");//以逗号为分隔符,分离历史记录
        int len=productIds.length;
        len=len>5?5:len;
        StringBuffer buffer=new StringBuffer();
        for(int i=0;i<len;i++)
        {
            buffer.append(productIds[i]).append(",");
        }
        //重写Cookie
        response.addCookie(new Cookie("histroy", buffer.toString()));
        //根据访问记录中的id从表中取出数据置于request作用域
        ProductDao dao = new ProductDao();
        List<Product> productList = dao.queryProducts(buffer.toString());
        request.setAttribute("proList", productList);
        //转向显示页面
        request.getRequestDispatcher("/product/showProductDetails.jsp").forward(request, response);
    }


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

}

第六步 创建页面

新建WebRoot/product路径,建立 showAllProduct.jsp 和showProductDetails.jsp。

showAllProduct.jsp

<%@page import="cn.sdut.po.Product"%>
<%@ page language="java" import="java.util.*" 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 ’showAllProduct.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">
    -->
<style>
div {
    float: left;
    margin: 10px;
    width:180;
    height:180;
}
div dd{
   margin: 0px;
   font-size:10pt;
}
div dd.dd_name {
    color: blue;
}

div dd.dd_city {
    color: #000;
}
</style>

</head>
<%
    List<Product> productList = (List<Product>) request
            .getAttribute("proList");
%>
<body>
    <table>
        <tr>
            <td>
                <%
                    for (Product product : productList) {
                %>
                <div>
                    <dl>
                        <dt>
                            <a href="servlet/QueryProductById?productid=<%=product.getProid()%>"><img src="images/<%=product.getPropic()%>" width="150"
                                height="120" /></a>
                        </dt>
                        <dd class="dd_name">
                            名称:
                            <%=product.getProname()%>
                        </dd>
                        <dd class="dd_city">
                            供应商:<%=product.getProsupplier()%>
                            价格:<%=product.getProprice()%>
                        </dd>

                    </dl>

                </div> <%
    }
 %>

            </td>
        </tr>

    </table>
</body>
</html>

showProductDetails.jsp
<%@page import="cn.sdut.dao.ProductDao"%>
<%@page import="cn.sdut.po.Product"%>
<%@ page language="java" import="java.util.*" 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 ’productDetails.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">
    -->
<style>
div {
    float: left;
    margin: 10px;
}

div dd {
    margin: 0px;
    font-size: 10pt;
}

div dd.dd_name {
    color: blue;
}

div dd.dd_city {
    color: #000;
}
</style>
</head>
<%
    Product product = (Product) request.getAttribute("product");
    List<Product> productList = (List<Product>) request
            .getAttribute("proList");
%>
<body>
    <h1>商品详情</h1>
    <hr>
    <table width="750" height="60">
        <tr>
            <td width="70%" valign="top">
                <table>
                    <tr>
                        <td rowspan="4"><img width="160" height="120"
                            src="images/<%=product.getPropic()%>" /></td>
                    </tr>
                    <tr>
                        <td><b>商品名称:<%=product.getProname()%></b></td>
                    </tr>
                    <tr>
                        <td>生产商:<%=product.getProsupplier()%></td>
                    </tr>
                    <tr>
                        <td>价格:<%=product.getProprice()%> 库存数量:<%=product.getProcount()%></td>
                    </tr>

                </table>
            </td>
            <td align="center">
                <!-- 商品浏览记录 -->
                <h3>商品浏览记录</h3>
 <%
    for (Product prod : productList) {
 %>
                <div>
                    <dl>
                        <dt>
                            <img
                                src="images/<%=prod.getPropic()%>" width="150" height="120" />
                        </dt>
                        <dd class="dd_name">
                            名称:
                            <%=prod.getProname()%>
                        </dd>
                        <dd class="dd_city">
                            供应商:<%=prod.getProsupplier()%>
                            价格:<%=prod.getProprice()%>
                        </dd>

                    </dl>

                </div> <%
                    }
                    %>
            </td>
        </tr>
    </table>
</body>
</html>

第七步 执行

http://localhost:8080/Shopping/servlet/QueryAllProduct

点击商品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值