返回顶部
首页 > 资讯 > 精选 >JavaWeb中ServletContext的介绍和应用
  • 388
分享到

JavaWeb中ServletContext的介绍和应用

2023-06-20 16:06:56 388人浏览 八月长安
摘要

本篇内容主要讲解“javaweb中ServletContext的介绍和应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWEB中ServletContext的介绍和应用”吧!目录获取we

本篇内容主要讲解“javaweb中ServletContext的介绍和应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWEB中ServletContext的介绍和应用”吧!

目录
  • 获取web 程序启动时初始化参数

  • 实现多个Servlet 对象共享数据

  • 读取web应用下的资源

    • 请求转发

      • 总结

        当Servlet 容器启动的时候 会为每个web应用创建一个ServletContext 对象代表当前的web应用。

        在web.xml 文件中不止可以配置Servlet的初始化信息 还可以给整个web应用配置初始化信息。

        1、获取web 程序启动时初始化参数

        web.xml 设置需要初始化的参数

        <!--1、获取web应用程序初始化参数--><context-param>    <param-name>name</param-name>    <param-value>crush</param-value></context-param><context-param>    <param-name>school</param-name>    <param-value>hngy</param-value></context-param>

        写一个Servlet继承httpservlet

        @WebServlet("/servlet")public class ServletContextTest extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //设置响应头        resp.setContentType("text/html;charset=utf-8");        PrintWriter writer = resp.getWriter();        ServletContext servletContext = this.getServletContext();        // 根据名称 获取单个初始化参数        String parameter = servletContext.getInitParameter("name");        writer.print(parameter);        writer.print("<br><hr>");        // 获取全部初始化参数        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();        while (initParameterNames.hasMoreElements()){            String name = initParameterNames.nextElement();            String value = servletContext.getInitParameter(name);            writer.print(name+":"+value);            writer.print("<hr>");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        @WebServlet("/servlet6") 作用等于

        <servlet>    <servlet-name>/servlet1</servlet-name>    <servlet-class>com.crush.servlet.ServletContextTest</servlet-class></servlet><servlet-mapping>    <servlet-name>/servlet1</servlet-name>    <url-pattern>/servlet1</url-pattern></servlet-mapping>

        2、实现多个Servlet 对象共享数据

        一个web 应用中所有Servlet都共享ServletContext对象。在一定时候,ServletContext 也可以拿来传递信息

        或者全局都需要的对象或者数据可以放进ServletContext中。

        ServletContext接口的方法:这里讲解增加、获取、删除、设置ServletContext 域属性四个方法。

        方法描述
        Enumeration getAttributeNames();返回一个Enumeration其中包含该ServletContext中所有的属性名称
        Object getAttribute(String name);返回具有给定名称的servlet容器属性;
        void removeAttribute(String name);从此ServletContext中删除具有给定名称的属性。
        setAttribute(String name,Object obj)在此ServletContext中将对象绑定到给定的属性名称。
        如果指定的名称已经用于属性,则此方法将使用新的属性替换该属性。
        如果在ServletContext上配置了侦听器,则容器会相应地通知它们。

        设置值: ServletContextTest1

        @WebServlet("/servlet1")public class ServletContextTest1 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 获取ServletContext对象        ServletContext servletContext = this.getServletContext();        //设置值  ServletContext 域属性 name 域属性名 obj是值        // 往ServletContext 中放进 username=crush 这个键值对        servletContext.setAttribute("username","crush");        // 在控制台给出提示        System.out.println("值已经设置完成");        // 重定向//        resp.sendRedirect("/servlet2");        // 转发        req.getRequestDispatcher("servlet2").forward(req, resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        取出值 :ServletContextTest2

        @WebServlet("/servlet2")public class ServletContextTest2 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 获取ServletContext对象        ServletContext servletContext = this.getServletContext();        // 通过之前的设置的名字 取出username 的值        String username =(String) servletContext.getAttribute("username");        PrintWriter writer = resp.getWriter();        writer.print(username);        //返回一个Enumeration其中包含该ServletContext中可用的属性名称        // Enumeration<String> attributeNames = servletContext.getAttributeNames();        //从此ServletContext中删除具有给定名称的属性。//        servletContext.removeAttribute("");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        测试:

        先访问 /servlet1 存值进去

        再访问 /servlet2 取值出来

        3、读取web应用下的资源

        使用ServletContext 可以读取web应用下的资源

        常用方法

        方法描述
        String getRealPath(String path);获取与给定虚拟路径相对应的真实路径。
        InputStream getResourceAsStream(String path);返回位于指定路径处的资源作为InputStream对象。
        URL getResource(String path)返回映射到给定路径的资源的URL。

        mysql.properties

        user=rootpassWord=123456url=jdbc:Mysql://localhost:3306/mysqldrive=com

        读取资源文件

        @WebServlet("/servlet3")public class ServletContextTest3 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html;charset=utf-8");        ServletContext servletContext = this.getServletContext();        // 获取相对路径中的输入流对象  是要获取web应用程序的路径        InputStream inputStream = servletContext.getResourceAsStream("\\WEB-INF\\classes\\mysql.properties");        // 资源类对象        Properties properties = new Properties();        // load 从输入字节流中读取属性列表(键和元素对)        properties.load(inputStream);        PrintWriter writer = resp.getWriter();        writer.print("user"+properties.getProperty("user")+"<br>");        writer.print("password"+properties.getProperty("password")+"<br>");        writer.print("url"+properties.getProperty("url")+"<br>");        writer.print("drive"+properties.getProperty("drive")+"<br>");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        对于mysql. properties 为什么是从WEB-INF/classes/ 目录下取的解释

        resources和java文件夹下的 在web程序下的路径都是classes的路径下的 到之后我们会学到classpath的 一个路径

        会更了解一些。

        JavaWeb中ServletContext的介绍和应用

        第二种方式

        直接将mysql.properties文件放在WEB-INF/目录下

        JavaWeb中ServletContext的介绍和应用

        这个时候取的路径就产生了变化了,可以直接那么取到

        这个时候我们发现 如果文件是放在WEB-INF 下面 的话 编译完后 是直接就在WEB-INF 下面 而不是在classes目录下的。这个内容是Maven 里的内容,好奇可以去查一查。

        JavaWeb中ServletContext的介绍和应用

        4、请求转发

        ServletContextTest5 转发到 ServletContextTest 去

        @WebServlet("/servlet5")public class ServletContextTest5 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html;charset=utf-8");        ServletContext servletContext = this.getServletContext();        // RequestDispatcher对象可用于将请求转发到资源或将资源包括在响应中。 资源可以是动态的也可以是静态的。        //路径名必须以/开头,并被解释为相对于当前上下文根。 使用getContext获取外部上下文中资源的RequestDispatcher        servletContext.getRequestDispatcher("/servlet").forward(req,resp);        //forward:将请求从servlet转发到服务器上的另一个资源(servlet,jsP文件或HTML文件)    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        乱码解决

        @WebServlet("/servlet6")public class ServletContextTest6 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 解决乱码 只是解决单独的响应乱码 如果有请求 还要设置请求的编码        req.setCharacterEncoding("utf-8");        resp.setContentType("text/html;charset=utf-8");        PrintWriter writer = resp.getWriter();        writer.print("你好啊,JavaWeb");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

        到此,相信大家对“JavaWeb中ServletContext的介绍和应用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

        --结束END--

        本文标题: JavaWeb中ServletContext的介绍和应用

        本文链接: https://lsjlt.com/news/298230.html(转载时请注明来源链接)

        有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

        猜你喜欢
        • JavaWeb中ServletContext的介绍和应用
          本篇内容主要讲解“JavaWeb中ServletContext的介绍和应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWeb中ServletContext的介绍和应用”吧!目录获取we...
          99+
          2023-06-20
        • JavaWeb入门:ServletContext详解和应用
          目录1、获取web程序启动时初始化参数2、实现多个Servlet对象共享数据测试:3、读取web应用下的资源4、请求转发总结当Servlet 容器启动的时候 会为每个web应用创建一...
          99+
          2024-04-02
        • JavaWeb Hibernate使用全面介绍
          目录前言一、实体关联之间的映射1、单向多对一的关联2、多对一双向关联3、一对一主键关联4、一对一外键关联5、多对多关联6、级联操作二、实体继承关系映射1、类继承树映射成一张表2、每个...
          99+
          2022-11-13
          JavaWeb Hibernate JavaWeb Hibernate框架
        • Spring aop的介绍和应用
          这篇文章主要讲解了“Spring aop的介绍和应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring aop的介绍和应用”吧! 前言前几...
          99+
          2024-04-02
        • Node.js的特点和应用场景介绍
          Node.js应该是当今最火热的技术之一。本文主要介绍Node.js的特点及应用场景。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的 易于扩展的网络应...
          99+
          2022-06-04
          场景 Node js
        • Java Web中ServletContext对象详解与应用
          目录 ServletContext对象 获取上下文初始化参数的相关方法创建ServletContext对象  上下文初始化参数局部参数全局参数 ...
          99+
          2023-05-17
          javaweb servletcontext对象 java servletcontext
        • Redis中锁的介绍和使用
          其实说多线程修改数据也不合适,毕竟redis服务端是单线程的,所有命令串行执行,只是在客户端并发发送命令的时候,导致串行的命令一些排列问题和网络时间差等造成数据不一致。本文虽然是数字的加减,但是为了说明锁的...
          99+
          2024-04-02
        • Go中Sync.Cond的介绍和使用
          本篇内容介绍了“Go中Sync.Cond的介绍和使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 程序中的通信方式GO语言中有句名言:...
          99+
          2023-06-15
        • Node中的Events模块介绍及应用
          目录Node 中的 Events1. 事件和监听器2. 处理 error 事件3. 继承 Events 模块4. 手写 EventEmitterNode 中的 Events Node...
          99+
          2022-11-13
          Node Events Node Events模块
        • React组件的应用介绍
          目录1. 介绍2. 组件的创建方式2.1 函数创建组件2.2 类组件3. 父子组件传值3.1 函数组件3.2 类组件1. 介绍 组件允许你将 UI 拆分为独立可复用的代码片段,并对每...
          99+
          2024-04-02
        • Javaweb中的Request(请求)和Response(响应)
          目录 一、概念 二、请求(Request) 1.例子简介 2.Request继承体系 3.Request获取请求数据   (1)请求行 (2)请求头 (3)请求体  4.优化请求体参数的获取 5.解决请求参数乱码问题  6.请求转发  请求...
          99+
          2023-09-12
          servlet 服务器 response request 请求响应
        • jQuery中toggle和hover的用法介绍
          这篇文章主要介绍“jQuery中toggle和hover的用法介绍”,在日常操作中,相信很多人在jQuery中toggle和hover的用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
          99+
          2024-04-02
        • MySQL中GROUP_CONCAT()的介绍和用法
          摘要:本文详细介绍MySQL数据库中GROUP_CONCAT()函数的概念和用法。通过示例和输出结果展示如何使用GROUP_CONCAT()函数将分组后的数据以字符串形式拼接起来,帮助读者更好地理解和应用这一功能。 1. 什...
          99+
          2023-10-23
          mysql 数据库
        • PHP8简要介绍:新特性和应用
          PHP8的新特性和用途简介 近年来,PHP语言一直在持续发展和更新,为了满足不断变化的开发需求和提高效率,PHP8版本带来了一系列令人期待的新特性。本文将对PHP8的新特性进行简要介绍,并给出相应的代码示例,以帮助读者更好地了解...
          99+
          2024-01-13
        • Redis的数据类型和应用场景介绍
          1.string类型...
          99+
          2024-04-02
        • Java中工厂模式的介绍及应用
          本篇内容介绍了“Java中工厂模式的介绍及应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍意图:提供一个创建一系列相关或相互依赖对象的...
          99+
          2023-06-05
        • JavaScript中的useRef和useState介绍
          目录1、useState hook2、useRef hook3、useRef 与 useState4、何时使用 Refs 和 States1、useState hook useSta...
          99+
          2024-04-02
        • LangChain:Prompt Templates介绍及应用
          ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但...
          99+
          2023-09-15
          人工智能 python 开发语言 chatgpt transformer
        • Python Ast介绍及应用
          Abstract Syntax Trees即抽象语法树。Ast是python源码到字节码的一种中间产物,借助ast模块可以从语法树的角度分析源码结构。此外,我们不仅可以修改和执行语法树,还可以将Source生成的语法树unparse成py...
          99+
          2023-01-30
          Python Ast
        • SpringCache框架应用介绍
          目录介绍常用注解实际测试介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache提供了一层抽象,底层可...
          99+
          2024-04-02
        软考高级职称资格查询
        编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
        • 官方手机版

        • 微信公众号

        • 商务合作