JavaWeb开发(五)Servlet-ServletContext

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)浏览器输入地址展示
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…

2024秋语法分析作业-B(满分25分)

特别注意&#xff1a;第17条产生式改为 17) Stmt → while ( Cond ) Stmt 【问题描述】 本次作业只测试一个含简单变量声明、赋值语句、输出语句、if语句和while语句的文法&#xff1a; 0) CompUnit → Block 1) Block → { BlockItemList } 2) BlockItemList → BlockItem…

SQL-leetcode-197. 上升的温度

197. 上升的温度 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是该表具有唯一值的列。 没有具有相同 recordDate 的不同行。 该表包…

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍&#xff1a; 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行&#xff0c;并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换&#xff0c;例如焦点已…

【Blackbox Exporter】prober.Handler源码详细分析

http.HandleFunc(path.Join(*routePrefix, "/probe"), func(w http.ResponseWriter, r *http.Request) {sc.Lock()conf : sc.Csc.Unlock()prober.Handler(w, r, conf, logger, rh, *timeoutOffset, nil, moduleUnknownCounter, allowedLevel)})我们了解到blackbox_ex…

SpringMVC核心、两种视图解析方法、过滤器拦截器 “ / “ 的意义

SpringMVC的执行流程 1. Spring MVC 的视图解析机制 Spring MVC 的核心职责之一是将数据绑定到视图并呈现给用户。它通过 视图解析器&#xff08;View Resolver&#xff09; 来将逻辑视图名称解析为具体的视图文件&#xff08;如 HTML、JSP&#xff09;。 核心流程 Controlle…

基于动力学的MPC控制器设计盲点解析

文章目录 Apollo MPC控制器的设计架构误差模型和离散化预测模型推导目标函数和约束设计优化求解优化OSQP求解器参考文献 Apollo MPC控制器的设计架构 误差模型和离散化 状态变量和控制变量 1、Apollo MPC控制器中状态变量主要有如下6个 matrix_state_ Matrix::Zero(basic_stat…

DC-DC 降压转换器设计提示和技巧

基本 DC-DC 降压转换器电路 在开始之前&#xff0c;我们先回顾一下DC-DC降压转换器的电路&#xff1a; 为了帮助您&#xff0c;我开发了降压设计中“什么影响什么”的矩阵&#xff1a; 主要的权衡是电感&#xff08;与 k 因子成反比&#xff0c;即峰峰值与平均电感电流之比&a…

Unity3D仿星露谷物语开发9之创建农场Scene

1、目标 绘制农场的场景。通过不同Sorting Layer控制物体的显示优先级&#xff0c;绘制Tilemap地图&#xff0c;添加Tilemap Collider碰撞器&#xff0c;同时添加Composite Collider碰撞器优化性能。 ps&#xff1a;绘制Tilemap的技巧&#xff1a;通过"Shift [" 可…

Linux 定时任务:轻松创建与精准执行

Linux 定时任务&#xff1a;轻松创建与精准执行 在 Linux 系统的运维与自动化管理领域&#xff0c;定时任务扮演着举足轻重的角色。它能够让系统在预设的时间点或周期性时段&#xff0c;自动执行特定的脚本、命令&#xff0c;极大地减轻了管理员的工作负担&#xff0c;提升工作…

Linux驱动开发:深入理解I2C时序(二)

在Linux驱动开发中,I2C时序的理解和正确处理是保证I2C设备正常工作和通信的关键。I2C协议的时序特性决定了数据的有效传输和设备间的协作。因此,掌握I2C的时序细节,以及如何在Linux内核中进行时序处理,能够让开发者更好地处理设备通信问题。 本文将继续深入探讨I2C通信协议…

国产编辑器EverEdit - 常用资源汇总

1 国产编辑器EverEdit-常用资源汇总 EverEdit是一款国产文本编辑器&#xff0c;历经超过15年的更新和维护&#xff0c;拥有不输业界顶级商业文本编辑器(EmEditor、UltraEdit)的实力&#xff0c;甚至在某些方面的功能更强(当然&#xff0c;各有千秋)&#xff0c;开发者对文本编辑…

解决uniapp H5页面限制输入框只能输数字问题

工作记录 最最近在做 uniapp 开发的移动端 H5 页面&#xff0c;有个需求是金额输入框只能输入数字&#xff0c;不能输入小数点和其他字符&#xff0c;经过各种尝试&#xff0c;发现其他字符可以通过正则过滤掉&#xff0c;但是输入小数点的话&#xff0c;因为没有触发 input 和…

面试准备备备备

职业技能 放到简历的黄金位置&#xff08;HR刷选简历的重要参考&#xff09; 基本准则&#xff1a;写在简历上的必须能聊&#xff0c;不然就别写 参考公式&#xff1a;职业技能 必要技术 其他技术 针对性的引导面试官&#xff08;让他问一些你想让他问的&#xff09; 寻找合…

npm install --global windows-build-tools --save 失败

注意以下点 为啥下载windows-build-tools&#xff0c;是因为node-sass4.14.1 一直下载不成功&#xff0c;提示python2 没有安装&#xff0c;最终要安装这个&#xff0c;但是安装这个又失败&#xff0c;主要有以下几个要注意的 1、node 版本 14.21.3 不能太高 2、管理员运行 …

Jenkins 中自动化部署 Spring Boot 项目

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【DSP/matlab】fftshift 是什么意思?在信号处理中有什么作用?

文章目录 前言一、定义什么是 fftshift&#xff1f;fftshift 在信号处理中的作用&#xff1a; 前言 dsp_paper 一、定义 fftshift 是一个在信号处理和数字信号处理中常用的函数&#xff0c;特别是在使用快速傅里叶变换&#xff08;FFT&#xff09;时。这个函数的主要作用是将…

【PCIe 总线及设备入门学习专栏 4.2 -- PCI 总线的三种传输模式 】

文章目录 OverviewProgrammed I/O&#xff08;PIO&#xff09;Direct Memory Access (DMA)Peer-to-Peer 本文转自&#xff1a;https://blog.chinaaet.com/justlxy/p/5100053095 Overview 本文来简单地介绍一下PCI Spec规定的三种数据传输模型&#xff1a;Programmed I/O&…

SpringBoot_第二天

SpringBoot_第二天 学习目标 Mybatis整合&数据访问 使用SpringBoot开发企业项目时&#xff0c;持久层数据访问是前端页面数据展示的基础&#xff0c;SpringBoot支持市面上常见的关系库产品(Oracle,Mysql,SqlServer,DB2等)对应的相关持久层框架&#xff0c;当然除了对于关系…