ServletrContext对象三个作用
(1)什么是ServletContext
1:ServletContext是Servlet中自带一个对象
2:ServletContext对象时在第一次访问Servlet时,自动创建
3:一个项目中只有一个ServletContext对象
作用1:ServletContext可以实现多个Servlet之间数据的共享
getServletContext()
setAttribute(key,value)
getAttribute(key)
第一次访问初始化servletContex(非创建时)
例子:一个servlet放数据。另一个servlet取数据
存数据
@WebServlet("/set")
public class Demo01SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1:获取ServletContext
ServletContext context = super.getServletContext();
//2:添加数据 key-value 集合 Map
context.setAttribute("name","jack");
context.setAttribute("age",22);
System.out.println("setServlet");
}
}
取数据:
@WebServlet("/get")
public class Demo02GetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取servletContext
ServletContext context = getServletContext();
//2.根据键获取值
String name = (String) context.getAttribute("name");
Integer age = (Integer) context.getAttribute("age");
System.out.println(name);
System.out.println(age);
}
}
ServletContext作用2:读取web项目中文件的内容
src下的文件: java InputStream is = Demo3FileServlet.class.getClassLoader().getResourceAsStream("a.txt");
web目录下文件:
InputStream is = getServletContext().getResourceAsStream("a.txt");
1:加载src目录下的文件
目录结构:
@WebServlet("/file")
public class Demo03FileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1:java使用类加载器去读取
//InputStream inputStream = Demo03FileServlet.class.getClassLoader().getResourceAsStream("a.txt");
InputStream inputStream = getServletContext().getResourceAsStream("b.txt");
//2:将字节流转成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line = br.readLine();
response.setCharacterEncoding("utf-8");
response.getWriter().println(line);
System.out.println(line);
}
}
2加载web目录下的文件
加载在web目录下的文件,不在同一个目录下(即Src目录下)不能用类加载器
用servletContext加载
目录结构:
package com.rh;
import jdk.internal.util.xml.impl.Input;
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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
//加载在web目录下的文件,不在同一个目录下(即Src目录下)不能用类加载器
//用servletContext加载
@WebServlet("/day01Read2Servlet")
public class day01Read2Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1:java使用ServletContext去读取
InputStream inputStream=getServletContext().getResourceAsStream("b.txt");
//2:将字节流转换成字符流
BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
String line=br.readLine();
response.setCharacterEncoding("utf-8");
response.getWriter().println(line);
System.out.println(line);
}
}
ServletContext作用3:获取初始化参数,读取web.xml中配置的特殊参数
ServletContext可以读取整个项目的初始化数据
<context-param>
<param-name>ip</param-name>
<param-value>192.168.31.72</param-value>
</context-param>
一般不是特殊的直接代码加载文件即可
读取web.xml中配置的特殊参数
目录结构
package com.rh;
import javax.servlet.ServletContext;
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;
//读取web.xml中配置的特殊参数
@WebServlet("day01paramServlet")
public class day01paramServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1:获取ServletContext
ServletContext context= getServletContext();
//打印
String value=context.getInitParameter("ip");
System.out.println(value);
}
}
案例:一个登陆网站,一个用户登陆成功一次记录次数加一:count++,记录有多少用户访问网站
Dao层集合模拟数据库
package com.rh.db;
import com.rh.bean.User01;
import java.util.ArrayList;
import java.util.List;
//当前这个DB类用集合来模拟数据库
public class DB01 {
private static List<User01> list=new ArrayList<>();
static {
User01 user01=new User01("jack","1234");
list.add(user01);
User01 user02=new User01("rose","1234");
list.add(user02);
User01 user03=new User01("tom","1234");
list.add(user03);
}
public static boolean query(User01 user) {
User01 result=null;
for(User01 u:list){
//遍历每个用户,判断哪个用户的账号和密码符合田间
if(u.getUsername().equals(user.getUsername())&&u.getPassword().equals(user.getPassword())){
result=u;
}
}
if(result!=null){
System.out.println("登录成功");
return true;
}else{
return false;
}
}
}
servlet业务逻辑
package com.rh.Servlet;
import com.rh.service.UserService01;
import javax.servlet.ServletContext;
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("/UDDServlet01")
public class UDDServlet01 extends HttpServlet {
@Override
public void init() throws ServletException {
//servlet创建出来,sevletContext也会创建出来
//1:获取sevletContext
ServletContext context=getServletContext();
//2:添加一个count变量,默认值为0
context.setAttribute("count",0);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//登陆成功,数量加1
// 1:获取参数
String username=request.getParameter("username");
String password=request.getParameter("password");
response.setCharacterEncoding("utf-8");
//2:处理参数
//2:业务逻辑
UserService01 userService=new UserService01();
//登录就是拿着账号、密码去数据库判断,存在就返回true,否则就返回false
boolean result=userService.login(username,password);
//3:响应给浏览器
if(result){
response.getWriter().println("success");
System.out.println("登录成功");
//登陆成功,对count值加1
//a:获取sevletContext
ServletContext context=getServletContext();
//b:获取里面的count
Integer count=(Integer) context.getAttribute("count");
//c:count+1
count+=1;
//d:放回sevletContext
context.setAttribute("count",count);
//3:响应给浏览器
response.getWriter().println("你是第"+count+"登录的");
}else{
response.getWriter().println("false");
System.out.println("登录失败");
}
}