首页 > 其他分享 >Servlet相关知识

Servlet相关知识

时间:2024-05-06 22:12:15浏览次数:17  
标签:Web context 知识 getServletContext 应用程序 ServletContext 相关 Servlet

  1. 什么是servlet?

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

    使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

  2. Servlet 架构

  3. Servlet 任务

    • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
    • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
    • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
    • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
    • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
  4. Servlet 生命周期

    • Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
    • Servlet 初始化后调用 init () 方法,在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
    • Servlet 调用 service() 方法来处理客户端的请求,调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
    • Servlet 销毁前调用 destroy() 方法,destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。
    • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
  5. Servlet 实例

    // 导入必需的 java 库
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    // 扩展 HttpServlet 类
    public class HelloWorld extends HttpServlet {
     
      private String message;
    
      public void init() throws ServletException
      {
          // 执行必需的初始化
          message = "Hello World";
      }
    
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 设置响应内容类型
          response.setContentType("text/html");
    
          // 实际的逻辑是在这里
          PrintWriter out = response.getWriter();
          out.println("<h1>" + message + "</h1>");
      }
      
      public void destroy()
      {
          // 什么也不做
      }
    }
    
    Servlet 部署(web.xml):
    <web-app>      
      <servlet>
          <servlet-name>HelloWorld</servlet-name>
          <servlet-class>HelloWorld</servlet-class>
      </servlet>
    
      <servlet-mapping>
          <servlet-name>HelloWorld</servlet-name>
          <url-pattern>/HelloWorld</url-pattern>
      </servlet-mapping>
    
  1. ServleContext

    代表了当前Web应用程序的上下文(Context)。
    这个上下文包括了整个Web应用程序的信息,可以被Web应用中的所有Servlet共享。
    可以将ServletContext看作是一个全局存储区,用于存储和访问Web应用中的全局数据和资源。

    • 获取:

    • 通过Servlet的getServletContext方法

    ServletContext context = getServletContext();
    
    • 通过ServletConfig的getServletContext方法
    ServletContext context = getServletConfig().getServletContext();
    
    • 应用
    • 共享数据
      可以在ServletContext中存储全局配置信息、共享的数据库连接池、全局计数器等。这些数据可以在不同的Servlet之间共享,而不仅仅在同一个Servlet内部。
    context.setAttribute("counter", counter);
    //不同的servlet可以获取值
    int counter = (int) context.getAttribute("counter");
    
    • 访问资源文件
      允许访问Web应用程序中的资源文件,如HTML、CSS、JavaScript等。这意味着可以轻松地在不同的Servlet中引用这些资源。
     ServletContext context = getServletContext();
     InputStream cssStream = context.getResourceAsStream("/css/styles.css");
    
    • 获取初始化参数
      可以在web.xml文件中配置初始化参数,然后使用ServletContext获取它们。可以在应用程序级别配置和定制自己的应用程序。
     在web.xml中配置初始化参数:
     <context-param>
       <param-name>databaseUrl</param-name>
       <param-value>jdbc:mysql://localhost/mydb</param-value>
     </context-param>
     在Servlet中获取初始化参数:
     ServletContext context = getServletContext();
     String dbUrl = context.getInitParameter("databaseUrl");
    
    • 设置全局上下文属性
      设置全局上下文属性,这些属性可以在整个Web应用程序中使用。这些属性可以用于存储应用程序的配置信息、状态信息或其他全局数据。
     设置一个全局上下文属性来存储应用程序的名称:
     ServletContext context = getServletContext();
     context.setAttribute("appName", "MyWebApp");
     在其他Servlet中,可以获取这个全局属性:
     ServletContext context = getServletContext();
     String appName = (String) context.getAttribute("appName");
    
    • 获取Web应用程序信息
      ServletContext提供了许多方法来获取关于Web应用程序的信息,如Web应用程序的名称、服务器信息、Servlet API版本等。
     ServletContext context = getServletContext();
     String appName = context.getServletContextName();
     String serverInfo = context.getServerInfo();
     int majorVersion = context.getMajorVersion();
     int minorVersion = context.getMinorVersion();
    
    • 获取文件路径
      通过ServletContext,可以获取Web应用程序中的文件的绝对路径。这对于读取和写入文件非常有用。
     ServletContext context = getServletContext();
     String realPath = context.getRealPath("/WEB-INF/config.properties");
     File file = new File(realPath);
    
    • 获取资源路径
      获取Web应用程序中的资源文件的URL路径。这对于构建链接和访问资源文件非常有用。
     ServletContext context = getServletContext();
     URL resourceUrl = context.getResource("/images/logo.png");
    

标签:Web,context,知识,getServletContext,应用程序,ServletContext,相关,Servlet
From: https://www.cnblogs.com/hytip/p/18176039

相关文章

  • Python基础知识——缩进、标识符、保留字
    标识符标识符就是程序中,使用的各种名称,例如:变量名、常量名、类名等等。在Python中,对标识符格式的要求与C/C++、Java等差不多:第一个字符必须是字母表中的字母或下划线_;标识符的其他的部分,由字母、数字和下划线组成;标识符对大小写敏感;标识符不能与保留字相同。比如:nu......
  • (搬运)碳知识大全
    碳交易的一个小例子:年初,有两个公司A和B,A公司每年规定排放二氧化碳100吨/年,B也是规定排放二氧化碳100吨/年;政府发放给A的碳配额是100吨/年,发放给B的碳配额也是100吨/年;2)年底,A公司通过节能改造,仅排放二氧化碳80吨,多余的20吨二氧化碳配额,就可以在碳交易市场上出售获得利润。反观B公......
  • 路由跳转、相关api、路由守卫、路由两种工作模式
    【router基本使用(路由跳转,携带数据)】#######跳转#######-js跳转this.$router.push(路径)this.$router.push(对象)-this.$router.push({name:'路由别名'})-this.$router.push({path:'路径'})-组件跳转......
  • maven相关
    maven:apache组织提供的一个顶级项目,由Java开发作用:管理项目构建生命周期管理项目中jar(核心功能)。自动帮程序员甄别和下载第三方库(jar)管理项目基础信息(文档管理、测试报告)配置环境变量:为了在任何路径下都可以使用Maven命令,所以需要配置JAVA_HOME:安装jdk时已......
  • Java Web 相关
    页面静态页面:即静态网页,是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。静态页面需要占一定的服务器空间,且不能自主管理发布更新的页面,如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外)。常见的静态页面举例:.html扩......
  • Spring bean 相关
    beanId:bean的唯一标识beanName:applicationContext.getBean("userService")参数传递的其实是beanName。如果设置<bean>时没有设置beanName,会将beanId转化为beanName,没有beanId会将全类名设置为beanName,即com.xx.xx.UserServiceImplbean也可以设置多个别名bean设置作用范......
  • H.264学习笔记——相关概念
    基本概念frame:帧,相当于一幅图像,包含一个亮度矩阵和两个色度矩阵。field:场,一帧图像,通过隔行扫描得到奇偶两场,分别称为顶场和底场或奇场和偶场。macroblock/MB:宏块,H.264中处理(预测、变换、量化)的基本单元,大小16*16个像素。slicegroup:条带组,每一帧/场图像中,按照光栅扫面的顺序......
  • JDBC相关
    什么是JDBC,为什么要使用JDBC?在web开发中,不可避免的地要使用数据库来存储和管理数据。为了在java语言中提供数据库访问的支持,Sun公司于1996年提供了一套访问数据的标准Java类库,即JDBC。JDBC,全称是JavaDatabaseConnectivity,它是一套统一的、基于Java语言的关系数据库编程接口......
  • 对C语言符号的一些冷门知识运用的剖析和总结
    符号目录符号注释奇怪的注释C风格的注释无法嵌套一些特殊的注释注释的规则建议反斜杠'\'反斜杠有续行的作用,但要注意续行后不能添加空格回车也能起到换行的作用,那续行符的意义在哪?反斜杠的转义功能单引号和双引号字面值,字符串,字符,字符变量的大小为什么sizeof('1')的大小是4?c......
  • 深度学习相关理论
    一、深度学习相关理论1.神经网络概述     2.卷积神经网络CNN ①卷积层——计算方法是大矩阵内部×小矩阵=较小矩阵,作用是特征提取  ②池化层——计算方法是大矩阵通过选取最大值或是平均值变成小矩阵,作用是降维、提高计算效率    3.激活函......