登录 or

servlet之servletcontext

servletcontext
request(客户端发送请求,把请求对象包装到request里,实现不同servlet流转数据共享的问题)
cookie(当用户在发送不同请求的时候如果请求头中包含某些相同的参数可以将其保存在客户端)
session(解决同一个用户发送不同请求,数据共享保存服务端问题)
servletcontext解决不同用户数据共享问题
特点:
1.由服务器创建
2.所有用户共享一个ServletContext对象
3.所有的servlet都可以访问到同一个servletcontext中的属性
4.每一个web项目只有一个ServletContext

用法:
获取ServletContext对象(三种方法)
//1
ServletContext context = this.getServletContext();
//2
ServletContext context1 = this.getServletConfig().getServletContext();
//3
ServletContext  context2 = request.getSession().getServletContext();

向ServletContext对象中设置属性值
context.setAttribute(String key,Object value)
获取属性值
context.getAttribute(String key)

其他用途
1.获取web.xml中配置的公共属性
在web.xml中添加公共属性
如果有多组公共属性,使用多个context-param标签
//获取公共属性
context.getInitParameter(String key)


案例:网站计数器
package com.context;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

/*网站计数器使用servletcontext简易实现
* */
public class NumServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求和响应的编码
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("gbk");
        //获取上下文对象
        ServletContext context = this.getServletContext();
        //获取记数属性值
        Integer num = (Integer)context.getAttribute("num");

        //进行逻辑判断
        if (num == null){
            //空的话先设置,初始值为1,因为doget已经调用了一次

            context.setAttribute("num",1);
        }else{

            //不为空则累加1
            num++;
            //再将num设置到servlet对象中
            context.setAttribute("num",num);
            //获取路径
            String realPath = context.getRealPath("nums.txt");

        }

        //响应页面设置
        PrintWriter out = response.getWriter();
        out.write("<html>");
        out.write("<head>");
        out.write("<body>");
        out.write("用户访问次数为"+context.getAttribute("num")+"次");
        out.write("</body>");
        out.write("</head>");
        out.write("</html>");
    }
}

0 个评论

要回复文章请先登录注册