目录
何为作用域
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。
作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
web作用域介绍
pageContext::只能在当前页面定义数据,当前页面使用。
request:后端程序和页面有请求关系,则数据可以共享。
session:是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享)
application:是整个服务器有效,所有用户的请求都可以数据共享。
session对象
session对象用来储存有关用户会话的所有信息,它的作用域范围是同一个会话。
session对象常用的方法:
void setAttribute(String key,object value):application:以键/值的方式,将一个对象的值存放到session中
session.setAttribute("name","admin");
Object getAttribute(String key):根据名称去获取session中存放对象的值
String name=(String ) session.getAttribute("name");
域的方法:
存储
//用来存储一个对象,也可以称之为存储一个域属性
void setAttribute(String name, Object value)
Eg:servletContext.setAttribute(“xxx”, “XXX”)
//在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX
获取
//用来获取ServletContext中的数据
Object getAttribute(String name)
//获取名为xx的域属性
Eg:String value = (String)servletContext.getAttribute(“xxx”);
//获取所有域属性的名称;
Enumeration getAttributeNames()
移除
//用来移除ServletContext中的域属性
void removeAttribute(String name)
获取请求头数据
//获取指定名称的请求头
String getHeader(String name)
//获取所有请求头名称
Enumeration getHeaderNames()
//获取值为int类型的请求头
int getIntHeader(String name)
获取请求相关的其他方法
//获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
int getContentLength()
/*
获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认
为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
*/
String getContentType()
//返回请求方法,例如:GET/POST
String getMethod()
//返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
Locale getLocale()
/*
获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用
ISO-8859-1编码;
*/
String getCharacterEncoding()
/*
设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法
只能对POST请求中的参数有效!
*/
void setCharacterEncoding(String code)
//返回上下文路径,例如:/Dmoe1
String getContextPath()
//返回请求URL中的参数,例如:username=zhangSan
String getQueryString()
//返回请求URI路径,例如:/Demo1/ServletDemo1
String getRequestURI()
/*
返回请求URL路径,例如:http://localhost/Demo1/ServletDemo1即返回除了参数
以外的路径信息;
*/
StringBuffer getRequestURL()
//返回Servlet路径,例如:/ServletDemo1
String getServletPath()
//返回当前客户端的IP地址
String getRemoteAddr()
//返回当前客户端的主机名,但这个方法的实现还是获取IP地址
String getRemoteHost()
//返回请求协议,例如:http
String getScheme()
//返回主机名,例如:localhost
String getServerName()
//返回服务器端口号,例如:8080
int getServerPort()
mvc增删改查(只有增删改查)
数据库结构如图:前提小皮面板打开(下载地址小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn))
数据库内容请看(42条消息) javaweb idea 链接数据库(分层结构)MVC模型_এ᭄༊空旧黎梦ღꦿ࿐的博客-CSDN博客
GoodsDaoimpl包
package com.guang.dao.Impl;
import com.guang.bean.Goods;
import com.guang.bean.User;
import com.guang.dao.GoodsDao;
import com.guang.util.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class GoodsDaoimpl implements GoodsDao {
Connection con=null; //数据库连接对象
ResultSet rs=null; //结果集对象
PreparedStatement pstm=null; //预处理对象
User login=null;
private int row=0;
public int delect(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) {
throw new RuntimeException(e);
}finally {
JDBCUtil.close(con,pstm,null);
}
return row;
}
public List<Goods> GoodSelect(){
List<Goods> list=new ArrayList<>();
try {
con= JDBCUtil.Getcon();
String sql="select * from t_goods";
pstm=con.prepareStatement(sql);
rs=pstm.executeQuery();
while (rs.next()){
Goods goods=new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getString("price"));
goods.setMark(rs.getString("mark"));
list.add(goods);
};
} catch (Exception e) {
throw new RuntimeException(e);
}
return list;
};
public int goodsAdd(Goods goods){
int n=0;
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());
//执行sql语句
n= pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(con,pstm,null);
}
return n;
}
public int update(Goods goods,int gid){
int s=0;
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,gid);
//执行sql语句
s= pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(con,pstm,rs);
}
return s;
}
/**
* @param gid
* @return
*/
public Goods selectbyid(int gid) {
Goods goods=null;
try {
con=JDBCUtil.Getcon();
//3.定义登灵的sql语句
String sql="select * from t_goods where gid=?";
//4.获取预处理对象
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.getString("price"));
goods.setMark(rs.getString("mark"));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
finally {
JDBCUtil.close(con,pstm,rs);
}
return goods;
}
}
Goodsdao接口
package com.guang.dao;
import com.guang.bean.Goods;
import com.guang.bean.User;
import java.util.List;
public interface GoodsDao {
int delect(int gid);
List<Goods> GoodSelect();
int update(Goods goods,int gid);
Goods selectbyid(int gid);
}
GoodsAdd包----增加
package com.guang.servlet;
import com.guang.bean.Goods;
import com.guang.dao.GoodsDao;
import com.guang.dao.Impl.GoodsDaoimpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/goodsAdd")
public class GoodsAdd 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.设置请求和响应的编码
request.setCharacterEncoding("utf-8");//设置请求的编码
response.setCharacterEncoding("utf-8");//设置响应的编码
//获取请求参数
String name = request.getParameter("name");
String price = request.getParameter("price");
String show = request.getParameter("show");
//封装到Goods对象中
Goods goods=new Goods();
goods.setGname(name);
goods.setPrice(price);
goods.setMark(show);
System.out.println(goods);
GoodsDao goodsDao=new GoodsDaoimpl();
int n = ((GoodsDaoimpl) goodsDao).goodsAdd(goods);
if (n>0){
System.out.println("添加成功");
//请求转发
request.getRequestDispatcher("Servlet").forward(request,response);
}else{
response.sendRedirect("error.jsp");
}
}}
del包---删除
package com.guang.servlet;
import com.guang.bean.Goods;
import com.guang.dao.GoodsDao;
import com.guang.dao.Impl.GoodsDaoimpl;
import com.guang.dao.Impl.UserDaoImpl;
import com.guang.dao.UserDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/del")
public class del extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int gid=Integer.parseInt(req.getParameter("gid"));
//根据id执行数据库的删除
GoodsDao goodsDao=new GoodsDaoimpl();
int row=goodsDao.delect(gid);
if (row>0){
req.getRequestDispatcher("Servlet").forward(req,resp);
}else {
req.setAttribute("error_msg","删除出现问题");
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
}
}
GoodSelect----查询
package com.guang.servlet;
import com.guang.bean.Goods;
import com.guang.dao.GoodsDao;
import com.guang.dao.Impl.GoodsDaoimpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet("/Servlet")
public class GoodSelect 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 {
GoodsDao goodsDao=new GoodsDaoimpl();
List<Goods> goodsList= goodsDao.GoodSelect();
System.out.println(goodsList);
HttpSession session=req.getSession();
session.setAttribute("goodsList",goodsList);
resp.sendRedirect("zhuye.jsp");
}
}
zhuye.jsp---主页
<%@ page import="com.guang.bean.Goods" %>
<%@ page import="java.util.List" %><%--
Created by IntelliJ IDEA.
User: 86157
Date: 2023/2/17
Time: 20:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<h1>${user.username}成功</h1>
<table>
<a href="add.jsp">添加商品</a>
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品价格</th>
<th>商品说明</th>
<th>操作</th>
</tr>
<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="funid">修改</a>
<a href="del?gid=${goods.gid}">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
add.jsp--增加页面
<%--
Created by IntelliJ IDEA.
User: 86157
Date: 2023/2/23
Time: 19:11
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="goodsAdd" method="post">
商品名称:<input type="text" name="name" value="" placeholder="商品名称"/><br/>
商品价格:<input type="number" step="0.01" name="price" value="" placeholder="商品价格"/><br/>
商品说明:<input type="text" name="show" value="" placeholder="商品说明"/><br/>
<input type="submit" value="添加"/>
<a href="zhuye.jsp">返回主页</a>
</form>
</body>
</html>