Servlet相关知识

news/2024/10/7 10:13:11
  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");
    

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

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

相关文章

雷达效果

相位阵雷达效果一个简单思路: 在一个扇形范围内,用多个射线检测来每tick判断点击查看代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Components/SphereComponent.h" #include "MyActor.generat…

【初中英语提分神器】中考高频词汇大全002-B/C开头单词高频,轻松掌握,考试无忧!速来围观!

PDF格式公众号回复关键字:ZKGCH002B开头单词高频 连词 1 but 然而 I like apples, but I dont like bananas. 我喜欢苹果,但我不喜欢香蕉。 2 because 因为 I didnt go to school today because I was sick. 我今天没去上学,因为我生病了 3 before 在……之前;先于;以前;在…

字符串Str函数小结

数据结构 字符串Str函数总结 我们学习过很多关于求解字符串相关问题的函数,但是都是每遇到一次算认识了,一定程度上很少进行总结,最近又重新接触到了这类“Str函数”,发现自己还是有点掌握不牢固,以下仅是个人学习总结,有错误之处可指出。如上图所示,在man手册中有许多关…

《自动机理论、语言和计算导论》阅读笔记:p428-p525

《自动机理论、语言和计算导论》学习第 14 天,p428-p525总结,总计 98 页。 一、技术总结 1.Kruskals algorithm(克鲁斯克尔算法) 2.NP-Complete Problems p434, We say L is NP-complete if the following statements are true about L: (1)L is in NP。 (2)For every langu…

xxe-基于Pikachu的学习

XXE漏洞 XML外部实体注入(XXE)的原理和应用_xml注入原理-CSDN博客 XXE(XML外部实体注入)漏洞分析——pikachu靶场复现_pikachu xxe-CSDN博客 原理 XML外部实体注入漏洞(XML External Entity Injection)简称XXE,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载…

vue3.4中KeepAlive的一个bug

KeepAlive可以缓存组件,在不使用include时没有任何问题,可以正常缓存。 但是一旦使用了include,如果动态组件中没有导入ref函数,缓存功能就消失了 比如 editcom.vue <template><input > </template> <script setup> import { ref } from vue </…

已知前中后序遍历的其中两种推断出最后一种序遍历

已知二叉树后序遍历序列是 dabec,中序遍历序列是debac,它的前序遍历序列是? 方法1: 首先可以确定c为根 d为最左子树 由中序debac 假设b为第2排的子树 那么后序的后两位应该是bc yu本题题目后序不符合 由中序debac 假设e为第2排的字数 那么后序的后两位应该是ec 符合本题题目…