作用域对象ServletContext(添加、删除和修改,模糊查询)

  1. ServletContext

ServetContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

一个web应用对应一个ServletContext实例,这个实例是应用部署启动后,servlet容器为应用创建的。ServletContext实例包含了所有servlet共享的资源信息。通过提供一组方法给servlet使用,用来和servlet容器通讯。

ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web缓存----把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。

session默认的生存时间是1800秒。

有没有生存时间更长的对象来实现页面间或不同的Servlet间的数据共享呢?

在Servet AP操供了ServletContext接口来实现上述功能,运行在同一个容器中的Servlet使用ServletContext来共享存在于其中的信息和属性。

ServletContext接口中定义了用于处理上下文的方法

方法

说明

Object getAttribute(String

name)

根据name属性返回在上下文中绑定的对象,如果指定的属性不存在,则返回null

void setAttribute(Stringname, Object object)

把一个对象和属性名绑定在一起,并保存到Servlet上下文中。如果名字属性已经存在,则先把它从上下文中删除,并将名字同新属性值绑定在一起

void removeAttribute(String

name)

根据name属性从Servlet上下文中删除对象

Enumeration

getAttributeNames()

返回一个Enumeration对象,包含了所有存储在Servelt上下文中的属性名

  1. 上下文的作用

web容器在启动时,它会为每个web程序都创建一个对应的ServletContext对象,它代表当前的web应用。 事实上SpringMVC封装的ApplicationContext 以及Struts2封装的ApplicationContext里面都是保存着原本的ServletContext

作用:Web应用范围内存取共享数据;访问web应用的静态资源;Servlet对象之间通过ServletContext对象来实现通讯。

  1. 下文接口的方法

在Servlet中通过

final ServletContext application = request.getServletContext();

获取上下文对象application

上下文的常用方法如下:

getInitParameter(String name) 获取name名称的初始化参数的值
getResourceAsStream(String path) 输入流的形式返回path对应的资源,path参数必须以“/”
getInitParameterNames() 获取所有初始化参数的名称,返回的结果是一个枚举值
getRequestDispatcher(String name) 根据转发的地址获取 RequestDispatcher对象
setAttribute() 设置属性值
getAttributeNames() 获取所有属性值名称
  1. 上下文参数

在web.xml中配置初始化参数:

<context-param>
   <param-name>adminEmail</param-name>
   <param-value>webmaster</param-value>
<context-param>

元素是针对整个应用的,所以并不嵌套在某个<servlet>元素中,该元素是<web-app>元素的直接子元素。

从Servlet中访问初始化参数:

final ServletContext application=this.getServletContext();
application.getInitParameter("email");
  1. 上下文属性

ServletContext application=this.getServletContext();
application.setAttribute("name","value");
application.getAttribute("name"); 
Enumberation p=application.getAttributeNames();
  1. 作用域对象

2.1pageContext

pageContext对象:它的生命周期即page域,指存储在pageContext对象的数据只在当前页面有效,当发生页面跳转时,则在pageContext域的数据进行销毁。

2.2request

request对象主要用于处理客户端请求,同时request对象也是作用域对象,它的作用域范围是同一个请求。

方法

说明

void setAttribute(String name, Object value)

把name属性储存到request对象

Object getAttribute(String name)

返回name属性的值

void removeAttribute(String name)

从request对象中移除name属性

String getParameter(String name)

返回指定name的参数值

Enumeration getParameterNames()

以枚举类型返回所有的参数名称

String []getParameterValues(String name)

以字符数组类型返回所有指定name参数值

Map getParameterMap( )

以java.util.Map类型返回请求参数

2.3session

session对象用来存储有关用户会话的所有信息,它的作用域范围是同一个会话。

session对象常用方法:

void setAttribute(String key,object value):以键/值的方式,将一个对象的值存放到session中
session.setAttribute("name","admin");

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 key)通过键的方式,把对应的值取出来。

<%
//设置
pageContext,setAttribute("name1","zhangshan001");
request.setAttribute("name2"zhangshan001");
session.setAttribute("name3""zhangshan001");
applicationsetAttribute("name4""zhangshan001");
//取值
string namel=(string)pageContext.getAttribute("namel");
string name2=(String)request.getAttribute("name2”);
String name3=(string)session.getAttribute("name3”);
string name4=(string)application.getAttribute("name4");
%>

pageContext域:<%=name1 %><br/>
request域:<%=name2 %><br/>
session域:<%=name3 %><br/>
application域:<%=name4 %><br/>

3.作用域对象测试

package com.zhao.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class Test01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.pageContext
        //2.request
        request.setAttribute("name","request");
        //3.session
        HttpSession session=request.getSession();
        session.setAttribute("name","session");
        //4.application
        ServletContext application = request.getServletContext();
        application.setAttribute("name","application");

        //重定向

    }
}
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2023/2/23
  Time: 11:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>作用域对象测试</title>
</head>
<body>
<%--
EL表达式获取作用域对象得顺序是:pageContext(当前页面)、request(请求问)、session(当前会话)、application(应用程序)
--%>
<h2>
    pageContext只能当前页面定义数据,当前页面使用
    request后端程序和页面有情关系,则数据可以共享
    session是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享)
    application是整个服务器有效,所有用户得请求可以数据共享
</h2>
${name}
</body>
</html>

主页信息

<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: hcyns
  Date: 2023/2/17
  Time: 19:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在页面导入jstl的核心类库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
<a href="addGoods.jsp">添加商品</a>
<table>
    <thead>
    <tr>
        <th>商品编号</th>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品说明</th>
        <th>操作</th>
    </tr>
    </thead>

    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.gid}</td>
            <td>${goods.gname}</td>
            <td>${goods.price}</td>
            <td>${goods.mark}</td>
            <td>
                <a href="#">修改</a>
                <a href="del?gid=${goods.gid}">删除</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
  </table>
</body>
</html>

4.添加信息操作

<%--
  Created by IntelliJ IDEA.
  User: hcyns
  Date: 2023/2/23
  Time: 18:42
  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="" placeholder="商品名称"><br/>
    商品价格:<input type="number" step="0.01" name="price" value="" placeholder="商品价格"><br/>
    商品说明:<input type="text" name="mark" value="" placeholder="商品说明"><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>
package com.zhao.dao;

import com.zhao.bean.Goods;
import com.zhao.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class GoodsDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement pstm=null;//预处理对象
    private ResultSet rs=null;//结果集对象

    private int row=0;//增删改受影响的行数

    public List<Goods> selectAll(){
        List<Goods> goodsList=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods";
            pstm=con.prepareStatement(sql);
            rs=pstm.executeQuery();
            while (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                //把Goods对象存储到集合中
                goodsList.add(goods);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,pstm,con);

        }
        return goodsList;
    }

    public int add(Goods goods){
        try {
            con= JDBCUtil.getCon();
            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;
    }

    public int deleteById(int gid){
        try {
            con= JDBCUtil.getCon();
            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;
    }


}
package com.zhao.servlet;


import com.zhao.bean.Goods;
import com.zhao.dao.GoodsDao;

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")));//获取字符串数字转换为double数据
        goods.setMark(req.getParameter("mark"));

        GoodsDao goodsDao=new GoodsDao();
        int row=goodsDao.add(goods);

        if(row>0){
            req.getRequestDispatcher("selectAllGoods").forward(req,resp);
        }else {
            req.setAttribute("error_msg","添加商品信息失败!");
            req.getRequestDispatcher("error.jsp").forward(req,resp);
        }
    }
}

1.展示页面效果

登录账号

跳转到商品信息页面

然后点击添加商品

录入商品信息

然后点击提交,跳转到主页

控制台添加信息成功

5.删除信息操作

1.在主页点击删除跳转到servlet,后端根据id查询到该商品的信息;

<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: hcyns
  Date: 2023/2/17
  Time: 19:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在页面导入jstl的核心类库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
<a href="addGoods.jsp">添加商品</a>
<table>
    <thead>
    <tr>
        <th>商品编号</th>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品说明</th>
        <th>操作</th>
    </tr>
    </thead>

    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.gid}</td>
            <td>${goods.gname}</td>
            <td>${goods.price}</td>
            <td>${goods.mark}</td>
            <td>
                <a href="#">修改</a>
                <a href="del?gid=${goods.gid}">删除</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
  </table>
</body>
</html>
package com.zhao.dao;

import com.zhao.bean.Goods;
import com.zhao.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class GoodsDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement pstm=null;//预处理对象
    private ResultSet rs=null;//结果集对象

    private int row=0;//增删改受影响的行数

    public List<Goods> selectAll(){
        List<Goods> goodsList=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods";
            pstm=con.prepareStatement(sql);
            rs=pstm.executeQuery();
            while (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                //把Goods对象存储到集合中
                goodsList.add(goods);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,pstm,con);

        }
        return goodsList;
    }

    public int add(Goods goods){
        try {
            con= JDBCUtil.getCon();
            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;
    }

    public int deleteById(int gid){
        try {
            con= JDBCUtil.getCon();
            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;
    }


}

2.把商品信息添加到request作用域中请求转发到信息展示页面;

package com.zhao.servlet;


import com.zhao.dao.GoodsDao;

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"));
        //根据id执行数据库的删除
        GoodsDao goodsDao=new GoodsDao();
        int row=goodsDao.deleteById(gid);
        if(row>0){
            //请求转发,查询所有商品信息(刷新)
                req.getRequestDispatcher("selectAllGoods").forward(req,resp);
            }else {
                req.setAttribute("error_msg","删除出现了问题!!");
                req.getRequestDispatcher("error.jsp").forward(req,resp);
        }
    }
}

3.展示页面效果

原来的商品信息

现在的商品信心

数据库中的表删除成功

6.修改信息操作

修改逻辑:

1.点击修改跳转到servlet,后端根据id查询到该商品的信息;
2.把商品信息添加到request作用域中请求转发到信息展示页面;
3.用户根据需求修改表单中的字段,重新提交表单;
4.编写后端servlet获取用户最新修订的商品信息,执行数据库的修改操作;
5.重新请求查询所有商品,跳转到商品信息主页;

1.在主页点击修改跳转到servlet,后端根据id查询到该商品的信息;

<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: hcyns
  Date: 2023/2/17
  Time: 19:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在页面导入jstl的核心类库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
<a href="addGoods.jsp">添加商品</a>
<table>
    <thead>
    <tr>
        <th>商品编号</th>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品说明</th>
        <th>操作</th>
    </tr>
    </thead>

    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.gid}</td>
            <td>${goods.gname}</td>
            <td>${goods.price}</td>
            <td>${goods.mark}</td>
            <td>
                <a href="findById?gid=${goods.gid}">修改</a>
                <a href="del?gid=${goods.gid}">删除</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
  </table>
</body>
</html>

2.把商品信息添加到request作用域中请求转发到信息展示页面;

package com.zhao.dao;

import com.zhao.bean.Goods;
import com.zhao.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class GoodsDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement pstm=null;//预处理对象
    private ResultSet rs=null;//结果集对象

    private int row=0;//增删改受影响的行数

    public List<Goods> selectAll(){
        List<Goods> goodsList=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods";
            pstm=con.prepareStatement(sql);
            rs=pstm.executeQuery();
            while (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                //把Goods对象存储到集合中
                goodsList.add(goods);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,pstm,con);

        }
        return goodsList;
    }

    public int add(Goods goods){
        try {
            con= JDBCUtil.getCon();
            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;
    }

    public int deleteById(int gid){
        try {
            con= JDBCUtil.getCon();
            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;
    }


    public Goods selectById(int gid) {
        Goods goods=null;
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods where gid=?";
            pstm=con.prepareStatement(sql);
            pstm.setObject(1,gid);
            rs=pstm.executeQuery();
            if (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                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(pstm,con);
        }
        return goods;
    }
}
package com.zhao.servlet;

import com.zhao.bean.Goods;
import com.zhao.dao.GoodsDao;

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("/findById")
public class FindById extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int gid = Integer.parseInt(request.getParameter("gid"));
        //根据gid查询商品信息
        GoodsDao goodsDao=new GoodsDao();
        Goods goods=goodsDao.selectById(gid);
        if (goods!=null){
            //查询商品信息成功,存入request域中,然后请求转发到页面展示数据
            request.setAttribute("goods",goods);
            request.getRequestDispatcher("showGoods.jsp").forward(request,response);
        }else {
            request.setAttribute("error_msg","修改出了异常!");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }

    }
}

3.在商品信息中点击update跳转到serlvet,用户根据需求修改表单中的字段,重新提交表单;

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2023/2/25
  Time: 10:09
  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="update" method="post">
    商品编号:<input type="text" name="gid" value="${goods.gid}" readonly="readonly" placeholder="商品编号"><br/>
    商品名称:<input type="text" name="gname" value="${goods.gname}" placeholder="商品名称"><br/>
    商品价格:<input type="number" step="0.01" name="price" value="${goods.price}" placeholder="商品价格"><br/>
    商品说明:<input type="text" name="mark" value="${goods.mark}" placeholder="商品说明"><br/>
    <input type="submit" value="修改">
</form>
</body>
</html>
package com.zhao.servlet;

import com.zhao.bean.Goods;

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("/update")
public class UpdateGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        //获取表单提交的数据,封装到goods对象中
        Goods goods=new Goods();
        goods.setGid(Integer.parseInt(request.getParameter("gid")));
        goods.setGname(request.getParameter("gname"));
        goods.setPrice(Double.parseDouble(request.getParameter("price")));
        goods.setMark(request.getParameter("mark"));

        System.out.println(goods);
        //执行数据库JDBC的修改操作

    }
}

4.编写后端servlet获取用户最新修订的商品信息,执行数据库的修改操作;

package com.zhao.dao;

import com.zhao.bean.Goods;
import com.zhao.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class GoodsDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement pstm=null;//预处理对象
    private ResultSet rs=null;//结果集对象

    private int row=0;//增删改受影响的行数

    public List<Goods> selectAll(){
        List<Goods> goodsList=new ArrayList<>();
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods";
            pstm=con.prepareStatement(sql);
            rs=pstm.executeQuery();
            while (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                //把Goods对象存储到集合中
                goodsList.add(goods);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(rs,pstm,con);

        }
        return goodsList;
    }

    public int add(Goods goods){
        try {
            con= JDBCUtil.getCon();
            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;
    }

    public int deleteById(int gid){
        try {
            con= JDBCUtil.getCon();
            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;
    }


    public Goods selectById(int gid) {
        Goods goods=null;
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods where gid=?";
            pstm=con.prepareStatement(sql);
            pstm.setObject(1,gid);
            rs=pstm.executeQuery();
            if (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                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(pstm,con);
        }
        return goods;
    }

    public int update(Goods goods){
        try {
            con= JDBCUtil.getCon();
            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.重新请求查询所有商品,跳转到商品信息主页;

package com.zhao.servlet;

import com.zhao.bean.Goods;
import com.zhao.dao.GoodsDao;

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("/update")
public class UpdateGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        //获取表单提交的数据,封装到goods对象中
        Goods goods=new Goods();
        goods.setGid(Integer.parseInt(request.getParameter("gid")));
        goods.setGname(request.getParameter("gname"));
        goods.setPrice(Double.parseDouble(request.getParameter("price")));
        goods.setMark(request.getParameter("mark"));

        System.out.println(goods);
        //执行数据库JDBC的修改操作
        GoodsDao goodsDao=new GoodsDao();
        int row = goodsDao.update(goods);

        if (row>0){
            request.getRequestDispatcher("selectAllGoods").forward(request,response);
        }else {
            request.setAttribute("error_msg","修改时出现了问题!!");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }

    }
}

6.展示页面效果

点击去登录

点击登录

跳转到商品信息页面

然后点击id1修改,跳转到修改页面

然后点击修改,跳转到主页,查看修改信息是否成功

控制台修改成功

数据库修改成功

7.模糊查询操作

1.在主页定义搜索的表单页面请求seach地址

<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: hcyns
  Date: 2023/2/17
  Time: 19:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在页面导入jstl的核心类库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
<form action="seach" method="post">
    <input type="text" name="keyword" value="">
    <input type="submit" value="搜索">
</form>
<a href="addGoods.jsp">添加商品</a>
<table>
    <thead>
    <tr>
        <th>商品编号</th>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品说明</th>
        <th>操作</th>
    </tr>
    </thead>

    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.gid}</td>
            <td>${goods.gname}</td>
            <td>${goods.price}</td>
            <td>${goods.mark}</td>
            <td>
                <a href="findById?gid=${goods.gid}">修改</a>
                <a href="del?gid=${goods.gid}">删除</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
  </table>
</body>
</html>

注意事项:

2.点击主页里的seach跳转到Seach类中,获取关键词并执行模糊查询

package com.zhao.servlet;

import com.zhao.bean.Goods;
import com.zhao.dao.GoodsDao;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

@WebServlet("/seach")
public class Seach extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        String keyword = request.getParameter("keyword");
        //执行jdbc的模糊查询
        GoodsDao goodsDao=new GoodsDao();
        List<Goods> goodsList=goodsDao.seach(keyword);
        System.out.println(goodsList);
        //把模糊查询到的商品信息集合存储到session中
        HttpSession session=request.getSession();
        session.setAttribute("goodsList",goodsList);
        //跳转到主页进行信息显示
        response.sendRedirect("zhuye.jsp");
    }
}

注意事项:

3.在GoodsDao中定义一个seach方法

List<Goods> goodsList=new ArrayList<>();
    public List<Goods> seach(String keyword){
        try {
            con= JDBCUtil.getCon();
            String sql="select * from t_goods where gname like concat('%',?,'%')";//concat()函数表示字符串的拼接
            pstm=con.prepareStatement(sql);
            pstm.setObject(1,keyword);
            rs=pstm.executeQuery();
            while (rs.next()){
                //把当前数据行中的数据取出来,存储到Goods对象中
                Goods goods=new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));

                //把Goods对象存储到集合中
                goodsList.add(goods);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(pstm,con);
        }
        return goodsList;
    }

4.展示页面效果

点击去登录

登录账号

在搜索框里搜索关键字,进行模糊查询

显示搜索后的页面,模糊查询成功!

数据库模糊查询成功


版权声明:本文为m0_73671382原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。