欢迎光临
我们一直在努力

Java Web中ServletContext对象怎么应用

这篇文章主要讲解了“Java Web中ServletContext对象怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Web中ServletContext对象怎么应用”吧!

     ServletContext对象

    Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯,因此 ServletContext 对象也被称为 Context 域对象。

    域对象是服务器在内存上创建的存储空间,该空间用于不同动态资源(例如 Servlet、JSP)之间传递与共享数据。

     获取上下文初始化参数的相关方法

    String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参 数值。
    Enumeration getInitParameterNames() 返回 Web 应用所有上下文初始化参数名的枚举 集合,如果没有上下文初始化参数,则返回一个空的枚举集合。

    创建ServletContext对象  

    1)通过 GenericServlet 提供的 getServletContext() 方法

    //通过 GenericServlet的getServletContext方法获取ServletContext对象
    ServletContext servletContext = this.getServletContext();

    2)通过 ServletConfig 提供的 getServletContext() 方法

    //通过 ServletConfig的 getServletContext方法获取ServletContext对象
    ServletContext servletContext = this.getServletConfig().getServletContext();
    //通过 Config的 getServletContext方法获取ServletContext对象
    ServletContext context = config.getServletContext();

    3)通过 HttpSession 提供的 getServletContext() 方法

    //通过 Session的 getServletContext方法获取ServletContext对象
    ServletContext context = req.getSession().getServletContext();

    4)通过 HttpServletRequest 提供的 getServletContext() 方法

    //通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
    ServletContext servletContext = req.getServletContext();

    上下文初始化参数

    局部参数

        <servlet>
            <init-param>
                <param-name>name</param-name>
                <param-value>Lungcen</param-value>
            </init-param>
            <init-param>
                <param-name>password</param-name>
                <param-value>110120130</param-value>
            </init-param>
        </servlet>

    全局参数

        <context-param>
            <param-name>姓名</param-name>
            <param-value>Lungcen</param-value>
        </context-param>
        <context-param>
            <param-name>年龄</param-name>
            <param-value>19</param-value>
        </context-param>

     获取ServletContext的全局参数

    Enumeration<String> names = this.context.getInitParameterNames();
            
            while (names.hasMoreElements())
            {
                String s = names.nextElement();
                writer.write(s + "->" + context.getInitParameter(s) + "<br/>");
            }

    ServletContext 属性与上下文初始化参数对比

    不 同 点 ServletContext 的属性 上下文初始化参数
    创 建 方 式 ServletContext 的属性通过调用 ServletContext 接口的 setAttribute() 方法 创建 上下文初始化参数通过 web.xml 使用 元素配置
    可 进 行 的 操 作 ServletContext 的属性可以通过 ServletContext 接口的方法进行读取、新 增、修改、移除等操作 上下文初始化参数在容器启动后只能被 读取,不能进行新增、修改和移除操作
    生 命 周 期 ServletContext 中属性的生命周期从创建开 始,到该属性被移除(remove)或者容器关 闭结束 上下文初始化参数的生命周期,从容器 启动开始,到 Web 应用被卸载或容器 关闭结束
    作 用 使用 ServletContext 中的属性可以实现 Servlet 之间的数据通讯 使用上下文初始化参数无法实现数据通讯

    实现数据通讯

    在 Servlet 中,调用 ServletContext 接口的 setAttribute() 方法可以创建一些属性,这些属性被存 放在 ServletContext 对象中。应用中所有 Servlet 都可以对这些属性进行访问和操作,通过它们可以实现应用内不同 Servlet 之间的数据通讯。

    void setAttribute(String name, Object object) 把一个 Java 对象与一个属性名绑定,并将它作为一个属 性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。
    void removeAttribute(String name) 从 ServletContext 中移除属性名为 name 的属性。
    Object getAttribute(String name) 根据指定的属性名 name,返回 ServletContext 中对应 的属性值。

    数据通讯的程序实例:

    package com.zpark.servlet;
     
    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;
    import java.io.PrintWriter;
     
    @WebServlet(urlPatterns = "/LLL.do")
    public class MyServlet04 extends HttpServlet {
     
        @Override
        public void init() throws ServletException {
            getServletContext().setAttribute("count", 0);
        }
     
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            Integer count = (Integer) getServletContext().getAttribute("count");
            count++;
            getServletContext().setAttribute("count", count);
     
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter writer = resp.getWriter();
            writer.write("欢迎来到界面" + count);
            writer.close();
        }
     
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            doGet(req, resp);
        }
    }
    package com.zpark.servlet;
     
    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;
    import java.io.PrintWriter;
     
    @WebServlet("/Lun5.do")
    public class MyServlet05 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter writer = resp.getWriter();
            Integer count = (Integer) getServletContext().getAttribute("count");
            writer.write("今天是一个好日子" + count);
            writer.close();
        }
     
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
            resp.setCharacterEncoding("utf-8");
            doGet(req, resp);
        }
    }

    在浏览器中的操作

    感谢各位的阅读,以上就是“Java Web中ServletContext对象怎么应用”的内容了,经过本文的学习后,相信大家对Java Web中ServletContext对象怎么应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云搜网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    赞(0)
    【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。