JavaWeb开发(五)Servlet-ServletContext

news2025/1/6 1:09:30

1. ServletContext

1.1. ServletContext简介

1.1.1. ServletContext定义

  ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息。

1.1.2. 获取ServletContext对象:

  (1)通过ServletConfig的getServletContext()方法可以得到ServletContext对象。
  (2)HttpServlet中直接通过this.getServletContext()获取。

1.1.3. 域对象

  域对象(域对象就是在不同资源之前来共享数据,保存数据,获取数据)ServletContext对象通常称为Context域对象。ServletContext是我们学习的第一个域对象。

1.2. ServletContext获取

   (1)String getInitParameter(String name);根据名称获取初始化参数。   (2)Enumeration getInitParameterNames();获取所有初始化的参数名称。

1.2.1. 配置文件

  在/web/WEB-INF/web.xml配置全局参数。这样会封装到所有Servlet对象中,每个Servlet都可直接获取到它。

  <context-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </context-param>
    <context-param>
        <param-name>encoding1</param-name>
        <param-value>utf-8</param-value>
    </context-param>

在这里插入图片描述

1.2.2. 实现

   新建MyContextServlet通过this.getServletContext()获取上下文对象。

     //方式一:根据名称获取配置参数
        String encoding=this.getServletContext().getInitParameter("encoding");
        System.out.println("getServletContext=="+encoding);
        //方式二:获取初始化所有配置参数
        Enumeration<String> enumeration=this.getServletContext().getInitParameterNames();
        System.out.println("getServletContext=="+enumeration);
package com.zzs.szy;

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(name = "MyContextServlet",urlPatterns = "/myContext")
public class MyContextServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //方式一:根据名称获取配置参数
        String encoding=this.getServletContext().getInitParameter("encoding");
        System.out.println("getServletContext=="+encoding);
        //方式二:获取初始化所有配置参数
        Enumeration<String> enumeration=this.getServletContext().getInitParameterNames();
        System.out.println("getServletContext=="+enumeration);
    }
}

在这里插入图片描述

1.3. ServletContext在多个Servlet中共享数据

  (1)void setAttribute(String name,Object object);存放数据。
  (2)Object getAttribute(String name); 获取数据。
  (3)void removeAttribute(String name);删除数据。

        //存放数据
        String name="zzs";
        this.getServletContext().setAttribute("name",name);
        //获取数据
        String name = (String) this.getServletContext().getAttribute("name");
        System.out.println("获取数据:" + name);

在这里插入图片描述
在这里插入图片描述

1.4. ServletContext读取web项目的资源文件

1.4.1. db.properties

  新建db.properties文件
在这里插入图片描述

1.4.2. Servlet获取db.properties文件并查询数据

  获取资源文件文件流
  “/db.properties"为放在根部录下
  若文件放在src文件夹下路径则为”/WEB-INF/classes/db.properties"

package com.zzs.szy;
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.InputStream;
import java.util.Enumeration;
import java.util.Properties;
@WebServlet(name = "MyContextServlet",urlPatterns = "/myContext")
public class MyContextServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //方式一:根据名称获取配置参数
        String encoding=this.getServletContext().getInitParameter("encoding");
        System.out.println("getServletContext=="+encoding);
        //方式二:获取初始化所有配置参数
        Enumeration<String> enumeration=this.getServletContext().getInitParameterNames();
        System.out.println("getServletContext=="+enumeration);
        //存放数据
        String nameStr="zzs";
        this.getServletContext().setAttribute("name",nameStr);
        //获取资源文件文件流
        //"/db.properties"为放在根部录下
        //若文件放在src文件夹下路径则为"/WEB-INF/classes/db.properties"
        InputStream resourceAsStream = this.getServletContext()
                .getResourceAsStream("/db.properties");
        Properties properties = new Properties();
        properties.load(resourceAsStream);
        String url = properties.getProperty("ur1");
        String name = properties.getProperty("name");
        String password = properties.getProperty("password");
        System.out.println("url:"+url);
        System.out.println("password:"+password);
        System.out.println("name:"+name);
    }
}

在这里插入图片描述

1.5. 请求转发

1.5.1. Servlet之间可以实现跳转

  Servlet之间可以实现跳转,从一个Servlet跳转到另个-Servlet,利用Servlet的跳转技术酊以很方便的把一块业务模块分开,比如使用一个Servlet接收用户提交数据,使用另个一个Servlet读取数据库,最后跳转到另一个Servlet把处理结果展示出来。这也就是MVC模式(modle,view,controller)
  MVC:用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

1.5.2. 转发Forward简介

  在Serv1et中如果当前的web资源不想处理请求时,可以通过forward方将当前的请求传递给其它的Web资源处理,这种方式称为请求转发。
在这里插入图片描述
  (1)请求转发的相关方法:
  RequestDispatcher对象,可以通过request.getRequestDispatcher()方法获取调用这个对象的foward方法就可以实现请求转发。
  (2)转发过程中携带数据:
  request本身也是一个域对象,request可以携带数据传递给其他web资源
  setAttribute方法:
  getAttribute方法;
  removeAttribute方法:
  getAttributeNames方法:

1.5.3. 案例-登录错误时显示错误界面

  (1)新建LoginServlet

package com.zzs.szy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet(name = "LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userName = "zzs";
        String userPwd = "123456";
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        if (!name.equals(userName)) {
            //账户不存在
            request.setAttribute("errorMessage", "账户不存在");
            request.getRequestDispatcher("/loginError.jsp")
                    .forward(request, response);
        } else if (!password.equals(userPwd)) {
            //密码错误
            request.setAttribute("errorMessage", "密码错误");
            request.getRequestDispatcher("/loginError.jsp")
                    .forward(request, response);
        } else {
//                  response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
//                  response.setHeader("Location","https://www.baidu.com/");
            HttpSession session = request.getSession();
            Cookie cookie = new Cookie("JSESSION", session.getId());
            cookie.setMaxAge(60 * 60 * 24);
            response.addCookie(cookie);
            response.sendRedirect("/hello/home.html");
        }

    }
}

  (2)新建login.html,home.html,loginError.jsp
在这里插入图片描述
  (3)浏览器输入地址展示
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长时间序列预测算法---Informer

目录 一、传统的 Transformer 模型二、Informer原理2.1 Attention计算2.2 “积极”的Q筛选2.2.1 KL散度2.2.2 “懒惰”的q处理 2.3 Encoder结构2.4 Decoder结构2.4.1 Transformer的Decoder操作2.4.2 Informer的Decoder操作 2.5 Informer模型的改进 三、模型应用 时间序列相关参…

点击取消按钮,console出来数据更改了,页面视图没有更新

点击取消按钮&#xff0c;console出来数据更改了&#xff0c;页面视图没有更新 前言 实现效果&#xff1a;点击取消按钮&#xff0c;页面视图全部为空&#xff0c; 遇到的问题&#xff1a; 点击取消按钮&#xff0c;console出来数据更改了&#xff0c;SchemaJson 都是默认值啦…

RFID手持机与RFID工业平板在仓储物流管理系统中的选型

概述 随着物联网技术在仓储物流管理系统中的普及&#xff0c;RFID手持机与RFID工业平板作为基于RFID技术手持式读写器的两种重要终端设备形态&#xff0c;得到了广泛应用。尽管RFID手持机与RFID工业平板都具备读写 RFID标签的基本功能&#xff0c;使用场景较为类似&#xff0c…

UML之泛化、特化和继承

在UML&#xff08;统一建模语言&#xff09;中&#xff0c;泛化&#xff08;Generalization&#xff09;和特化&#xff08;Specialization&#xff09;是面向对象思想中继承&#xff08;Inheritance&#xff09;关系的重要概念&#xff0c;它们描述类与类&#xff08;或用例与…

vue 修改vant样式NoticeBar中的图标,不用插槽可以直接用图片

使用文档中是可以直接使用图片链接的 :left-icon"require(../../assets/newImages/noticeImg.png)" <html> .... <NoticeBarmode""color"#C6C6C6"background""v-if"global_info.site_bulletin":left-icon"r…

【漫话机器学习系列】028.CP

Mallows’ Cp&#xff1a;标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具&#xff0c;用于在一系列候选模型中权衡拟合度和复杂性&#xff0c;帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析&#xff0c;并探讨其应用场景、实现方法、优点与局…

vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用

上图是visual studio 2022 中使用的粘贴功能的菜单位置 在生成的xml 中&#xff0c;有些是类似如下类型的 [System.Serializable] [System.Xml.Serialization.XmlType] public class Item {private bool isVisibleField;private bool isVisibleFieldSpecified;[System.Xml.Se…

数据库自增 id 过大导致前端时数据丢失

可以看到&#xff0c;前端响应参数是没有丢失精度的 但是在接受 axios 请求参数时出现了精度丢失 解决方案一&#xff1a;改变 axios 字符编码 axios.defaults.headers[Content-Type] application/json;charsetUTF-8; 未解决 解决方案二&#xff1a;手动使用 json.parse() …

STM32-笔记19-串口打印功能

复制项目文件夹03-流水灯&#xff0c;重命名为19-串口打印功能 打开项目 在主函数中&#xff0c;添加头文件、和串口初始化函数&#xff08;设置波特率&#xff09;和输出函数&#xff0c;如图所示&#xff1a; 软件部分就设置好了 下面是硬件部分 接线&#xff1a;使用USB…

GPU 进阶笔记(四):NVIDIA GH200 芯片、服务器及集群组网

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 1 传统原厂 GPU 服务器&#xff1a;Intel/AMD x86 CPU NVIDIA GPU2 新一代原厂 GPU 服务器&#xff1a;NVIDIA CPU NVIDIA GPU 2.1 CPU 芯片&#xff1a;Grace (ARM)2.2 GPU 芯片&#xff1a;Hopper/B…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

RSA e与phi不互质(AMM算法进行有限域开根)

e与phi不互质 这一部分学习来自trup师傅的博客 针对CTFer的e与phi不互素的问题 - 跳跳糖 1&#xff1a;m^t<n from Crypto.Util.number import * from secret import flag flag bflag{*********} m bytes_to_long(flag) p getPrime(1024) q getPrime(1024) n p * q …

计算机体系结构期末复习3:GPU架构及控制流问题

目录 一、GPU设计思路 1.简化流水线、增加核数 2.单指令多线程&#xff08;SIMT&#xff09; 3.同时驻留大量线程 4.总思路&#xff1a;多线程单指令多线程 二、GPU的控制流问题 1.什么是控制流问题 2.怎么应对分支分歧 一、GPU设计思路 1.简化流水线、增加核数 2.单指…

【最新】沃德协会管理系统源码+uniapp前端+环境教程

一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0…

《机器学习》——线性回归模型

文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…

数字图像总复习

目录 一、第一章 二、第三章 三、第四章 四、第五章 五、第八章 六、第十章 作业一 作业二 一、第一章 1.图像文件格式由&#xff08;文件头&#xff09;及&#xff08;图像数据&#xff09;组成 2.常见的图像文件格式&#xff1a;&#xff08;JPEG&#xff09;、&…

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心&#xff0c;通过整合各部门业务系统数据&#xff0c;进行建模与加工&#xff0c;以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题&#xff0c;确保数据…

革新排版机产线:一体式IO模块引领自动化高效控制新时代

在瞬息万变的制造业浪潮中&#xff0c;自动化与智能化已成为推动产业升级的关键力量。特别是在印刷行业&#xff0c;排版机的效率与精度直接关系到产品的质量与市场竞争力。近年来&#xff0c;随着技术的不断革新&#xff0c;明达技术MR20一体式IO模块凭借其高度集成、灵活配置…

vulnhub靶场【Hogwarts】之bellatrix

前言 靶机&#xff1a;hotwarts-dobby&#xff0c;ip地址为192.168.1.69 攻击&#xff1a;kali&#xff0c;ip地址为192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24扫描发现主机 信息收集 使用nmap扫描端…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…