一、什麼是作用域:
變量可以起作用的區域
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;
}