首页 > 编程语言 >Javaweb开发核心之应用上下文知识(笔记)

Javaweb开发核心之应用上下文知识(笔记)

时间:2024-11-17 23:17:47浏览次数:3  
标签:Web 应用 作用域 页面 笔记 ServletContext 上下文 数据 Javaweb

 什么是应用上下⽂ServletContext

简介:讲解Javaweb作⽤用域对象介绍和ServletContext讲解

1.理解应用上下文

  • 定义: 应用上下文是一个ServletContext对象,表示整个Web应用的全局信息和状态。它在Web应用启动时创建,在应用停止时销毁。
  • 作用:
    • 全局信息共享: 可存储应用范围内的共享数据。
    • 配置管理: 提供访问全局初始化参数的接口。
    • 资源管理: 用于获取Web应用中的资源(如文件、数据库连接等)。

2.什么是作用域对象:

就是对象的生命周期,在javaweb开发里⾯有多个不同⽣命周期的对象
⽐比如:PageContext,ServletRequest,HttpSession,ServletContext;
对象里面包含属性和对应的数据,所以不同作用域对象使⽤场景会不同

PageContext

  • 生命周期:
    • 存在于JSP页面的处理过程中。当前JSP页面处理结束后,PageContext对象即被销毁。
  • 作用域: 仅限于当前JSP页面(不可跨页面传递)。
  • 使用场景:
    • 用于存储仅在当前页面内需要的临时数据。
    • 管理JSP页面中的各种资源,比如out对象、request对象。
  • 示例:
<%
    pageContext.setAttribute("tempData", "Hello, Page!");
%>
<p>${pageScope.tempData}</p>

2. ServletRequest

  • 生命周期:
    • 每次客户端请求到达服务器时创建,服务器处理请求并返回响应后销毁。
  • 作用域: 限于一次请求内(包括请求转发的多个页面)。
  • 使用场景:
    • 用于传递数据给同一次请求中的其他页面(如请求转发)。
    • 适合短期数据存储,比如表单输入、查询参数。
  • 示例:
    request.setAttribute("message", "Welcome to JavaWeb!");
    RequestDispatcher dispatcher = request.getRequestDispatcher("nextPage.jsp");
    dispatcher.forward(request, response);
    

    3. HttpSession

  • 生命周期:
    • 从用户第一次访问服务器时创建,直到会话超时或被手动销毁。
    • 默认会话超时时间通常为30分钟(可在web.xml中配置)。
  • 作用域: 跨多个请求(同一用户会话内)。
  • 使用场景:
    • 存储与特定用户会话相关的数据,如用户登录信息、购物车数据。
    • 适合需要在多个请求间共享的用户数据

4. ServletContext

  • 生命周期:
    • 随Web应用启动时创建,随着Web应用停止而销毁。
  • 作用域: 整个Web应用范围内共享(所有用户、所有请求)。
  • 使用场景:
    • 用于存储全局配置或共享数据,如应用名称、资源路径。
    • 适合需要在整个应用中使用的静态或全局信息。
  • 示例:
    ServletContext context = getServletContext();
    context.setAttribute("appName", "JavaWebApp");
    

    总结:不同作用域对象的对比

    对象生命周期作用范围使用场景
    PageContext当前JSP页面执行期间当前页面临时数据存储,用于当前页面中的局部变量
    ServletRequest请求开始 -> 响应返回一次请求内短期数据存储,如表单数据、查询参数
    HttpSession会话开始 -> 会话超时或手动销毁用户会话内存储用户特定的数据,如登录信息、购物车数据
    ServletContext应用启动 -> 应用停止整个Web应用全局共享数据,如应用配置、统计信息
  • 为什么不同作用域对象有不同的使用场景?

  • 生命周期不同:

    • 短生命周期对象(如ServletRequest)适合短期任务,长生命周期对象(如ServletContext)适合全局任务。
  • 作用范围不同:

    • 仅在当前页面需要的数据,适合用PageContext
    • 跨页面或组件共享的数据,使用ServletRequestHttpSession
    • 全局范围的数据使用ServletContext
  • 并发性和安全性:

    • HttpSessionServletContext需要考虑多用户访问的线程安全问题。
    • ServletRequestPageContext是线程私有的,无需担心并发。
  •  加载应⽤用默认参数
  • Web.xml
<context-param>
<param-name>url</param-name>
<param-value>gaze.com</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>jack</param-value>
</context-param>

获取api
 

ServletContext servletContext = req.getServletContext();
String url = servletContext.getInitParameter("url");
System.out.println(url)

存储全局数据(只要是同个应⽤用,都可以共享这些数据,类似map结构)

servletContext.setAttribute("appInfo","gaze.com info");
String appInfo = (String)servletContext.getAttribute("appInfo");
System.out.println("TestServlet appInfo="+appInfo);

标签:Web,应用,作用域,页面,笔记,ServletContext,上下文,数据,Javaweb
From: https://blog.csdn.net/weixin_67996964/article/details/143840263

相关文章

  • 《Django 5 By Example》阅读笔记:p211-p236
    《Django5ByExample》学习第7天,p211-p236总结,总计26页。一、技术总结1.messages(消息推送)django.contrib.messages。2.OAuth2Django里使用的是social-app-django这个package进行认证操作。3.开发环境使用HTTPS使用django-extensions,werkzeug,pyOpenSSL实现。4.第三方......
  • C++ stl chrono 学习笔记
    chronosinceC++11库的参考手册(英文)|cppreferencechrono库定义了三种(直到c++20)五种(从c++20开始)主要类型以及实用函数和常用类型:cokckstimepointsdurationscalendardates(sinceC++20)timezoneinformation(sinceC++20)clocks时钟由起点(或历元)和滴答率组成......
  • 【预训练-微调】采用迁移学习的方式完成肺部感染识别-学习笔记
    本学习笔记来源于B站:04-1轻松学PyTorch肺部感染识别简介 中第04-1到04-6这六个视频。在本预训练-微调代码中,重点要学习的内容包括:加载官方提供的经典网络架构resnet50和对应的预训练模型,对ResNet最后的两层网络(池化层和全连接层)进行修改,改为适合自己任务的网络架构。对......
  • 【预训练-微调】迁移学习项目实战自定义数据集宝可梦精灵-学习笔记
    本学习笔记来源于B站:深度学习—迁移学习项目实战自定义数据集宝可梦精灵。在本预训练-微调代码中,重点要学习的内容包括:加载官方提供的经典网络架构resnet18和已经训练好的模型,对最后一层全连接层进行修改,改为适合自己任务的网络架构。在此基础上,训练最后一层全连接层,并保存最......
  • 【预训练-微调】基于经典网络架构训练图像分类模型-学习笔记
    本学习笔记来源于B站: 迪哥128集强力打造:深度学习PyTorch从入门到实战 的第30-41个视频。在本预训练-微调代码中,重点要学习的内容包括:1、加载官方提供的经典网络架构和已经训练好的模型,对最后一层全连接层进行修改,改为适合自己任务的网络架构。在此基础上,训练最后一层全......
  • python的debug—pdb的使用笔记
    相关:【python】来学学debugger吧,不能只会用print调试呀!虽然写了这么多年的代码,不论是C++还是python,我几乎都没有使用过debug,当然这并不是说我写的代码从来不出问题,而是我几乎都是用print的方法,或者直接头脑风暴,但是我并不是不认为debug没有用,而是我一直没有遇到需要debug的代码......
  • NOIP2021 做题笔记
    这次又被抓过去写noip2021了\(qaq\)P7960[NOIP2021]报数可以用类似于质数筛的方法筛一遍,做到\(\mathcalO(\)值域\()\)的预处理,以及\(\mathcalO(1)\)的查询。#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definemxn10000010#definemxm200......
  • GObject学习笔记(一)类和实例
    前言最近阅读Aravis源码,其中大量运用了GObject,于是打算学习一下。此系列笔记仅主要面向初学者,不会很深入探讨源码的细节,专注于介绍GObject的基本用法。此系列笔记参考GObjectTutorialforbeginners本文可在个人博客中阅读,体验更加套个盾:文中定义的名词只是为了更好地理解GO......
  • python学习笔记1
    *args:不定长参数,特点:可以接受[0.+无穷大)的实参print(*values,sep='',end='\n',file=sys.stdout,flush=False)values:会将实参转换成字符串,再输出sep:输出多个对象时用什么间隔,默认为一个空格字符,若要改变其他方式间隔,则需要关键词参数。end:用什么结尾,默认为换行‘\n’......
  • 计算机网络技术02141考试笔记【第三章考试重点笔记】
    第三章 网络协议和体系结构【重点】第一节 网络协议和体系结构概述一、网络协议的概念    为了保证通信正常进行,必须事先做一些规定,而且通信双方要正确执行这些规定。同时,只有通信双方在这些规定上达成一致,彼此才能够互相“理解”,从而确保通信的正常进行。这种通信......