一、什么是作用域:
变量可以起作用的区域
1.1pageContext
pageContext对象:它的生命周期即page域,指储存在pageContext对象的数据只在当前页面有效,当页面跳转时,则在pageContext域的数据进行销毁。
1.2request
request对象主要用于处理客户端请求,同时request对象也是作用域对象,它的作用域范围是同一个请求。request后端程序和页面有请求关系,则数据可以共享
requset对象的常用方法
方法 | 说明 |
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类型返回请求参数 |
1.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");
1.4application
application类似于系统的“全局变量”,用于实现用户之间的数据共享,它的作用域范围是在服务器一开始执行服务,到服务器关闭为止。即整个服务器有效,所有用户的请求都可以共享数据
application 对象实现了javax.servlet.ServletContext 接口
application对象的常用方法:
void setAttribute(String key,Object value): 以键/值的方式,将一个对象的值存放到application中
void getAttribute(String key)通过键的方式,把对应的值取出来 。
请求转发:会保留原来的地址不变。
重定向:地址栏会发生变化。
添加
package com.chen.servlet;
import com.chen.bean.Goods;
import com.chen.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 {
//1.设置请求和响应的编码
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);
}
}
}
删除:
package com.chen.servlet;
import com.chen.bean.Goods;
import com.chen.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 {
//1.设置请求和响应的编码
req.setCharacterEncoding("utf-8");//设置请求的编码
resp.setCharacterEncoding("utf-8");//设置响应的编码
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);
}
}
}
修改:
设计修改页面:修改数据分为两部分 先查询到数据,然后修改数据,再次更新数据
点击跳转到查询
public Goods selectById(int gid) {
Goods goods = null;
try {
connection = JDBCUtil.getCon();
String sql = "select * from t_goods where gid=?";
pstm = connection.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(rs, pstm, connection);
}
return goods;
}
public int update(Goods goods) {
try {
connection = JDBCUtil.getCon();
String sql = "update t_goods set gname=?,price=?,mark=? where gid=?";
pstm = connection.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, connection);
}
return row;
}
跳转到查询页面,重新更新数据
模糊查询:
主页定义表单页面,设计搜索框
servlet代码获取关键字
public List<Goods> seach(String keyword){
List<Goods> goodsList = new ArrayList<>();
try {
connection = JDBCUtil.getCon();
String sql = "select * from t_goods where gname like concat('%',?,'%')";
pstm = connection.prepareStatement(sql);
pstm.setObject(1,keyword);
rs = pstm.executeQuery();
while (rs.next()) {
//把当前数据行中的数据取出来,储存到Googs对象中
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, connection);
}
return goodsList;
}