day02- ServletrContext对象三个作用

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("登录失败");
        }
    }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值