提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
Servlet技术j详解1
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
本博客以 Servlet 为主题,旨在分享关于 Servlet 技术的知识、经验和见解。Servlet 作为 Java Web 开发中的重要组成部分,它为我们提供了一种强大的方式来处理 HTTP 请求和生成动态网页内容。通过 Servlet,我们可以构建高效、安全和可扩展的 Web 应用程序。
在这里,你将找到关于 Servlet 的各种教程、实践案例以及最新的技术动态。我们将深入探讨 Servlet 的核心概念、生命周期、请求处理机制等方面的内容,帮助你理解如何使用 Servlet 开发 Web 应用程序。同时,我们还将分享一些实际项目中的经验和最佳实践,以帮助你避免常见的陷阱和错误。
无论你是刚刚开始学习 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(顶层接口) -----> GenericServlet(抽象类) -----> HttpServlet(抽象类) ----->自定义的Servlet
Servlet接口:
GenericServle抽象类:GenericServlet是实现了Servlet接口的抽象类。在GenericServlet中进一步的定义了Servlet接口的具体实现,其设计的目的是为了和应用层协议解耦,在GenericServlet中包含一个Service抽象方法。
HttpServlet类:继承自 GenericServlet,针对于处理 HTTP 协议的请求所定制。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。
Servlet 的生命周期包括以下几个阶段:
注:Servlet 的生命周期是由服务器来管理的,而不是由客户端来控制的。因此,Servlet 可能会在服务器的整个运行期间持续存在,直到服务器关闭或重新加载为止。
在某些情况下,使用 Servlet 可能会对性能产生一定的影响。以下是一些可能影响性能的因素:
Servlet 是一种运行在服务器端的 Java 程序,它用于处理客户端发送的 HTTP 请求。当客户端发送一个 HTTP 请求到服务器时,服务器会将该请求传递给相应的 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对象代表客户端浏览器的请求,当客户端浏览器通过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");
String[] userlikes = request.getParameterValues("checkboxkey");
Enumeration<String> parameterNames = request.getParameterNames();
获取请求中所有的数据并存放到一个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");
Type | Meaning |
---|---|
application/msword | Microsoft Word document |
application/octet-stream | Unrecognized or binary data |
application/pdf | Acrobat (.pdf) file |
application/postscript | PostScript file |
application/vnd.lotus-notes | Lotus Notes file |
application/vnd.ms-excel Excel | spreadsheet |
application/vnd.ms-powerpoint | PowerPoint presentation |
application/x-gzip | Gzip archive |
application/x-java-archive | JAR file |
application/x-java-serialized-object | Serialized Java object |
application/x-java-vm | Java bytecode (.class) file |
application/zip | Zip archive |
application/json | JSON |
audio/basic | Sound file in .au or .snd format |
audio/midi | MIDI sound file |
audio/x-aiff | AIFF sound file |
audio/x-wav | Microsoft Windows sound file |
image/gif | GIF image |
image/jpeg | JPEG image |
image/png | PNG image |
image/tiff | TIFF image |
image/x-xbitmap | X Windows bitmap image |
text/css | HTML cascading style sheet |
text/html | HTML document |
text/plain | Plain text |
text/xml | XML |
video/mpeg | MPEG video clip |
video/quicktime | QuickTime 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技术现在已经不怎么使用了,只有在一些老项目中才能看见,所以大家只需理解就行