1、ServletContext
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象,所以叫全局应用程序共享对象。
一个web应用对应一个ServletContext实例,这个实例是应用部署启动后,servlet容器为应用创建的。ServletContext实例包含了所有 servlet共享的资源信息。通过提供一组方法给servlet使用,用来和serviet容器通讯。
Session默认的生存时间是1800秒。
有没有生存时间更长的对象来实现页面间或不同的Servlet间的数据共享呢?
在ServletAPI提供了ServletContext接口来实现上述功能,运行在同一个容器中的Servlet使用ServletContext来共享存在于其中的信息和属性。
ServletContext接口中定义了用于处理上下文的方法
2、作用域对象
2、1 pageContext
pageContext对象:它的生命周期即page域,指存储在pageContext对象的数据只在当前页面有效,当发生页面跳转时,则在 pageContext域的数据进行销毁。
2、2 request
reguest对象主要用于处理客户端请求,同时request对象也是作用域对象,它的作用域范围是同一个请求。
request对象常用方法
方法 | 说明 |
void setAttribute(String name, Object value) | 把name属性储存到request对象 |
Oblect getAttribute(String name) | 返回name 属性的值 |
void removeAttribute(String name ) | 从request对象中移除name 属性 |
String getParameter(String name) | 返回指定name 的参数值 |
Enumeration getParameterNames() | 以枚举类型返回所有的参数名称 |
String 0 getParameterValues(String name) | 以字符数组类型返回所有指定name 参数值 |
Map getParameterMap() | 以iava.util.Map类型返回请求参数 |
2、3 session
session对象用来存储有关用户会话的所有信息,它的作用域范围是同一个会话。
session对象常用方法:
void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到session中
session.setAttribute("name","admin");Object getAttribute(String key):根据名称去获取session中存放对象的值
Object getAttribute(String key):根据名称去获取session中存放对象的值
string name=(string)session.getAttribute("name");
2、4 application
application类似于系统的“全局变量”,用于实现用户之间的数据共享,它的作用域范围是在服务器一开始执行服务,到服务器关闭为止, application 对象实现了javax.servlet.ServletContext接口
application对象的常用方法:
void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中
void getAttribute(String kev)通过键的方式,把对应的值取出来
EL表达式获取作用域对象的顺序是:pageContext(当前页面)、request(请求间)、session(当前会调)、application(应用程序)
pageContext只能当前页面定义数据,当前页面使用;
request后端程序和页面有请求关系,则数据可以共享:
session是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享);application是整个服务器有效,所有用户的请求都可以数据共享:
添加操作
1.在zhuye.jsp中的<h2>标签下添加一个<a>
2.创建一个addGoods.jsp页面写添加的表单
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2023/2/23
Time: 12:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>商品信息添加</title>
</head>
<body>
<h2>商品信息录入</h2>
<form action="addGoods" method="post">
商品名称:<input type="text" name="gname" value=""/><br/>
商品价格:<input type="number" step="0.01" name="price" value=""/><br/>
商品说明:<input type="text" name="mark" value=""/><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
3.servlet编写数据库
package com.chen.servlet;
import com.chen.bean.Goods;
import com.chen.dao.impl.GoodsDaoimpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/addGoods")
public class AddGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取编码格式
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
Goods goods=new Goods();
goods.setGname(req.getParameter("gname"));
goods.setPrice(Double.parseDouble(req.getParameter("price")));
goods.setMark(req.getParameter("mark"));
//jdbc操作
GoodsDaoimpl goodsDaoimpl=new GoodsDaoimpl();
int row= goodsDaoimpl.add(goods);
if(row>0){
req.getRequestDispatcher("selectAll").forward(req,resp);
}else{
req.setAttribute("error_msg","添加商品失败");
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
}
}
jdbc操作
public int add(Goods goods){
try {
//获取连接
con= JDBCUtil.getCon();
//编写sql语句
String sql="insert into t_goods(gname,price,mark)values(?,?,?)";
//获取预处理对象
pstm=con.prepareStatement(sql);
pstm.setObject(1,goods.getGname());
pstm.setObject(2,goods.getPrice());
pstm.setObject(3,goods.getMark());
//获取结果集
row= pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(pstm,con);
}
return row;
}
删除操作
1.在zhuye.jsp中的写删除代码
2.servlet编写数据库
package com.chen.servlet;
import com.chen.dao.impl.GoodsDaoimpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/del")
public class DelGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int gid=Integer.parseInt(req.getParameter("gid"));
GoodsDaoimpl goodsDaoimpl=new GoodsDaoimpl();
int row= goodsDaoimpl.del(gid);
if(row>0){
req.getRequestDispatcher("selectAll").forward(req,resp);
}else{
req.setAttribute("error_msg","删除商品失败");
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
}
}
jdbc操作
public int del(int gid){
try {
//获取连接
con= JDBCUtil.getCon();
//编写sql语句
String sql="delete from t_goods where gid=?";
//获取预处理对象
pstm=con.prepareStatement(sql);
pstm.setObject(1,gid);
//获取结果集
row= pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(pstm,con);
}
return row;
}
修改操作
1.点击修改跳转到servlet(FindGoods页面),后端根据id查询到该商品的信息;
//根据id查询
public Goods selectByid(int gid){
Goods goods=null;
try {
//获取连接
con= JDBCUtil.getCon();
//编写sql语句
String sql="select * from t_goods where gid=?";
//获取预处理对象
pstm=con.prepareStatement(sql);
//传参
pstm.setObject(1,gid);
//获取结果集
rs=pstm.executeQuery();
//处理结果集
if (rs.next()){
goods=new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getDouble("price"));
goods.setMark(rs.getString("mark"));
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(rs,pstm,con);
}
return goods;
}
2.把商品信息添加到request作用域中请求转发到信息展示页面;
3.用户根据需求修改表单中的字段,重新提交表单;
4.编写后端servlet获取用户最新修订的商品信息,执行数据库的修改操作;
//修改
public int update(Goods goods){
try {
//获取连接
con= JDBCUtil.getCon();
//编写sql语句
String sql="update t_goods set gname=?,price=?,mark=? where gid=?";
//获取预处理对象
pstm=con.prepareStatement(sql);
pstm.setObject(1,goods.getGname());
pstm.setObject(2,goods.getPrice());
pstm.setObject(3,goods.getMark());
pstm.setObject(4,goods.getGid());
//获取结果集
row= pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(pstm,con);
}
return row;
}
5.重新请求查询所有商品,跳转到商品信息主页;
模糊查询