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
- Servlet及其使用
- Java Servlet及其特点
- Servlet生命周期及其配置
- jsp及其servlet
- servlet容器及其架构
- Servlet及其生命周期
- 什么是servlet及其生命周期
- 【Servlet开发】Servlet开发及其原理(一)
- Servlet的生命周期及其调用
- servlet的应用及其他
- servlet的定义及其生命周期
- servlet的定义及其生命周期
- servlet的定义及其生命周期
- servlet的定义及其生命周期
- servlet的定义及其生命周期
- Servlet实现方式及其生命周期
- servlet的定义及其生命周期
- servlet的定义及其生命周期
- 后台经典ui
- 5.4面向对象(构造函数的重载和初始化顺序)
- 目标函数与损失函数的差别
- 分数化小数
- Binder VS socket
- Servlet及其使用
- UVA 11020 Efficient Solutions(STL,set)
- android Recyclerview使用解析!
- [HDU]1286 找新朋友 [欧拉函数]
- 基于canvas的二维码邀请函生成插件
- Leetcode-414. Third Maximum Number
- GDKOI2017酱油记
- 火焰跳动小案例
- 理解哈希表算法