Servlet技术j详解1

发布时间:2023年12月21日

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
Servlet技术j详解1


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
本博客以 Servlet 为主题,旨在分享关于 Servlet 技术的知识、经验和见解。Servlet 作为 Java Web 开发中的重要组成部分,它为我们提供了一种强大的方式来处理 HTTP 请求和生成动态网页内容。通过 Servlet,我们可以构建高效、安全和可扩展的 Web 应用程序。
在这里,你将找到关于 Servlet 的各种教程、实践案例以及最新的技术动态。我们将深入探讨 Servlet 的核心概念、生命周期、请求处理机制等方面的内容,帮助你理解如何使用 Servlet 开发 Web 应用程序。同时,我们还将分享一些实际项目中的经验和最佳实践,以帮助你避免常见的陷阱和错误。
无论你是刚刚开始学习 Servlet 的新手,还是已经有一定经验的开发者,本博客都将为你提供有价值的内容。我们鼓励读者积极参与讨论,提出问题和分享自己的经验。通过交流和互动,我们可以共同学习和进步。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Servlet简介

Servlet是Server Applet的简称,称为服务端小程序,是JavaEE平台下的技术标准,基于Java语言编写的服务端程序。Servlet 是一种服务器端的 Java 编程组件,用于处理客户端请求并生成动态网页内容。它运行在 Web 服务器上,可以接收和处理来自客户端的 HTTP 请求,并返回相应的响应。Servlet使用单进程多线程的方式运行。
Servlet 可以理解为一种运行在服务器端的小程序,它接收来自客户端(通常是浏览器)的请求,并根据请求的类型做出相应的处理,然后将处理结果返回给客户端。可以把 Servlet 想象成一个餐厅的服务员。当客人(客户端)走进餐厅并向服务员点菜时,服务员(Servlet)会接受客人的请求并将其传递给厨师(服务器端的其他组件)。厨师根据客人的要求准备食物,然后服务员将食物送给客人。
在 Web 应用中,Servlet 扮演着类似的角色。它接收来自客户端的 HTTP 请求(比如 GET 请求或 POST 请求),并根据请求的类型执行相应的操作,例如查询数据库、生成动态网页内容或处理用户提交的数据。然后,Servlet 将处理结果以 HTTP 响应的形式返回给客户端,客户端(浏览器)接收到响应后,会将其显示给用户。
总的来说,Servlet 是 Web 应用中的一个重要组成部分,它负责处理客户端的请求并生成相应的响应,从而实现动态网页和交互式应用的功能。

二、Servlet继承结构

Servlet的继承结构如下:
Servlet(顶层接口) -----> GenericServlet(抽象类) -----> HttpServlet(抽象类) ----->自定义的Servlet
Servlet接口:

  1. init(),创建Servlet对象后立即调用该方法完成一些初始化工作。
  2. service(),处理客户端请求,执行业务操作,利用响应对象响应客户端请求。
  3. destroy(),在销毁Servlet对象之前调用该方法,释放资源。
  4. getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
  5. getServletInfo(),获取servlet相关信息。
    ServletConfig接口:
  6. getServletName(),返回 Servlet 的名字,即 web.xml 中 元素的值。
  7. ServletContext getServletContext(),返回一个代表当前 Web 应用的 ServletContext 对象。
  8. String getInitParameter(String name),根据初始化参数名返回对应的初始化参数值。
  9. Enumeration getInitParameterNames(),返回一个 Enumeration 对象,其中包含了所有的初始化参数名。

GenericServle抽象类:GenericServlet是实现了Servlet接口的抽象类。在GenericServlet中进一步的定义了Servlet接口的具体实现,其设计的目的是为了和应用层协议解耦,在GenericServlet中包含一个Service抽象方法。
HttpServlet类:继承自 GenericServlet,针对于处理 HTTP 协议的请求所定制。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。

三、Servlet的生命周期

Servlet 的生命周期包括以下几个阶段:

  1. 初始化:在加载 Servlet 类后,服务器会调用 Servlet 的 init()方法。这个方法只会被调用一次,用于初始化 Servlet 的状态。
  2. 服务:当客户端发送请求到服务器时,服务器会将请求传递给相应的 Servlet。Servlet 的 service()方法会被调用,用于处理请求。在这个方法中,你可以获取请求的参数、读取请求的头部信息、生成响应等。
  3. 销毁:当服务器决定停止或重新加载 Servlet 时,服务器会调用 Servlet 的 destroy()方法。这个方法用于释放 Servlet 占用的资源,如关闭数据库连接、释放文件句柄等。

注:Servlet 的生命周期是由服务器来管理的,而不是由客户端来控制的。因此,Servlet 可能会在服务器的整个运行期间持续存在,直到服务器关闭或重新加载为止。

四、Servlet的性能分析

在某些情况下,使用 Servlet 可能会对性能产生一定的影响。以下是一些可能影响性能的因素:

  • 数据库操作:如果你的 Servlet 需要执行大量的数据库查询或写入操作,这可能会导致性能下降。优化数据库查询和减少不必要的数据库交互可以提高性能。
  • 服务器负载:当大量并发请求到达服务器时,服务器需要处理这些请求并为每个请求创建一个新的 Servlet 实例。如果服务器的负载过高,可能会导致性能下降。可以考虑使用负载均衡器、缓存机制或优化代码来提高性能。
  • 资源消耗:如果你的 Servlet 占用了大量的内存、CPU 资源或文件句柄等,这可能会影响服务器的性能。确保合理使用资源,并在不需要时释放它们。
  • 网络延迟:如果你的 Servlet 需要与其他远程服务进行通信,如调用第三方 API 或访问外部数据库,网络延迟可能会对性能产生影响。尽量减少远程调用的次数,并优化网络通信。
  • 代码效率:如果你的 Servlet 代码效率低下,存在性能瓶颈或不必要的循环等,这可能会导致性能下降。进行性能分析和优化代码可以提高性能。

四、Servlet处理请求的原理

Servlet 是一种运行在服务器端的 Java 程序,它用于处理客户端发送的 HTTP 请求。当客户端发送一个 HTTP 请求到服务器时,服务器会将该请求传递给相应的 Servlet 进行处理。
以下是 Servlet 处理请求的原理:

  • 客户端发送 HTTP 请求:客户端(通常是浏览器)通过发送 HTTP 请求到服务器,请求特定的资源或服务。请求中包含了请求的方法(GET、POST 等)、请求的路径以及其他相关的请求头部信息。
  • 服务器接收请求:服务器接收到客户端发送的请求,并将其传递给 Web 容器(如 Tomcat、Jetty 等)。
  • Web 容器创建 HttpServletRequest 对象:Web 容器创建一个 HttpServletRequest 对象,该对象封装了客户端发送的请求信息,包括请求的方法、请求的路径、请求的参数、请求的头部等。
  • Web 容器创建 HttpServletResponse 对象:Web 容器同时创建一个 HttpServletResponse 对象,该对象用于向客户端发送响应。响应中包含了响应的状态码、响应的头部信息以及响应的内容。
  • 调用 Servlet 的 service()方法:Web 容器根据请求的路径映射到相应的 Servlet,并调用该 Servlet 的 service()方法。在 service()方法中,你可以获取 HttpServletRequest 对象和 HttpServletResponse 对象,并处理请求。
  • 处理请求:在 service()方法中,你可以通过 HttpServletRequest 对象获取请求的参数、读取请求的头部信息、获取请求的输入流等,并根据请求的类型(GET、POST 等)执行相应的操作。你可以进行业务逻辑处理、查询数据库、生成响应内容等。
  • 生成响应:在处理请求后,你可以通过 HttpServletResponse 对象设置响应的状态码、响应的头部信息,并将响应的内容写入响应的输出流中。你可以生成 HTML 页面、JSON 数据、文件下载等响应内容。
  • 发送响应:最后,Servlet 将生成的响应发送给客户端。客户端接收到响应后,浏览器将根据响应的内容进行显示或处理。

五、Servlet的作用

  • 获取用户提交的数据
  • 获取浏览器附加的信息
  • 处理数据(访问数据库或调用接口)
  • 给浏览器产生一个响应
  • 在响应中添加附加信息

六、Servlet的方法使用

Servlet的只用需要引入Jar包servlet-api.jar,这个大家去网上自行下载,当Jar包引进后,需要创建一个类继承HttpServlet,成功后大概是这样

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class HelloWorld extends HttpServlet{


    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        
    }
}

HttpServletRequest对象

HttpServletRequest对象代表客户端浏览器的请求,当客户端浏览器通过HTTP协议访问服务器时,HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

request.getRequestURL()
//返回客户端浏览器发出请求时的完整URL。
request.getRequestURI()
//返回请求行中指定资源部分。
request.getRemoteAddr()
//返回发出请求的客户机的IP地址。
request.getLocalAddr()
//返回WEB服务器的IP地址。
request.getLocalPort()
//返回WEB服务器处理Http协议的连接器所监听的端口。

获取请求数据

根据key获取指定value

String str = request.getParameter("key");

获取复选框(checkbox组件)中的值

String[] userlikes = request.getParameterValues("checkboxkey");

获取所有提交数据的key

Enumeration<String> parameterNames = request.getParameterNames();

使用Map结构获取提交数据

获取请求中所有的数据并存放到一个Map结构中,该方法返回一个Map,其中key为String类型value为String[]类型。

Map<String, String[]> parameterMap = req.getParameterMap()

设置请求编码

请求的数据包基于字节在网络上传输,Tomcat接收到请求的数据包后会将数据包中的字节转换为字符。在Tomcat中使用的是ISO-8859-1的单字节编码完成字节与字符的转换,所以数据中含有中文就会出现乱码,可以通过req.setCharacterEncoding(“utf-8”)方法来对提交的数据根据指定的编码方式重新做编码处理。

req.setCharacterEncoding("utf-8");

获取请求头信息

根据请求头中的key获取对应的value。

String headerValue = req.getHeader("headerKey");

获取请求头中所有的key,该方法返回枚举类型。

Enumeration<String> headerNames = req.getHeaderNames();

设置响应类型

HttpServletResponse对象代表服务器的响应。这个对象中封装了响应客户端浏览器的流对象,以及向客户端浏览器响应的响应头、响应数据、响应状态码等信息。

resp.setContentType("MIME");
TypeMeaning
application/mswordMicrosoft Word document
application/octet-streamUnrecognized or binary data
application/pdfAcrobat (.pdf) file
application/postscriptPostScript file
application/vnd.lotus-notesLotus Notes file
application/vnd.ms-excel Excelspreadsheet
application/vnd.ms-powerpointPowerPoint presentation
application/x-gzipGzip archive
application/x-java-archiveJAR file
application/x-java-serialized-objectSerialized Java object
application/x-java-vmJava bytecode (.class) file
application/zipZip archive
application/jsonJSON
audio/basicSound file in .au or .snd format
audio/midiMIDI sound file
audio/x-aiffAIFF sound file
audio/x-wavMicrosoft Windows sound file
image/gifGIF image
image/jpegJPEG image
image/pngPNG image
image/tiffTIFF image
image/x-xbitmapX Windows bitmap image
text/cssHTML cascading style sheet
text/htmlHTML document
text/plainPlain text
text/xmlXML
video/mpegMPEG video clip
video/quicktimeQuickTime video clip

设置字符型响应

//常见的字符型响应类型:
resp.setContentType("text/html")
//设置响应类型为文本型,内容含有html字符串,是默认的响应类型
resp.setContentType("text/plain")
//设置响应类型为文本型,内容是普通文本。
resp.setContentType("application/json")
//设置响应类型为JSON格式的字符串。

设置字节型响应

//常见的字节型响应:
resp.setContentType("image/jpeg")
//设置响应类型为图片类型,图片类型为jpeg或jpg格式。
resp.setContentType("image/gif")
//设置响应类型为图片类型,图片类型为gif格式。

设置响应编码

response.setContentType("text/html;charset=utf-8");
//不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文
response.setCharacterEncoding("utf-8");
//仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动指定浏览器编码。

重定向响应

response.sendRedirect(URL地址)

总结

提示:这里对文章进行总结:

Servlet技术现在已经不怎么使用了,只有在一些老项目中才能看见,所以大家只需理解就行

文章来源:https://blog.csdn.net/liubopro666/article/details/135129788
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。