什么是作用域
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。
作用域是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。
ServletContext:ServletContext代表当前web应用
作用域对象有:pageContext;request;session;application
pageContext对象:它的生命周期即page域,指存储在pageContext对象的数据只在当前页面有效,当发生页面跳转时,则在pageContext域的数据进行销毁。
request对象主要用于处理客户端请求,同时request对象也是作用域对象,它的作用域范围是同一个请求。
session对象用来存储有关用户会话的所有信息,它的作用域范围是同一个会话。
session对象常用方法。
application类似于系统的“全局变量”,用于实现用户之间的数据共享,它的作用域范围是在服务器一开始执行服务,到服务器关闭为止。
基于MVC模型使用分层模式完成添加
主页内容
<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>
添加商品信息页面
<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.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);
}
}
}
删除信息操作
<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;
}
}
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;
}
}