Servlet及其使用

来源:互联网 发布:淘宝隐形降权查询 编辑:程序博客网 时间:2024/06/06 02:57

主要内容:

  • 创建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

点击商品

0 0