百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

JavaWeb编程之Servlet servlet javabean

yuyutoo 2024-11-05 13:27 4 浏览 0 评论

Servlet 简介

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

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

Servlet 架构

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  1. Servlet 初始化后调用 init () 方法。
  2. Servlet 调用 service() 方法来处理客户端的请求。
  3. Servlet 销毁前调用 destroy() 方法。
  4. 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

init() 方法

init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化。

Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是也可以指定 Servlet 在服务器第一次启动时被加载。

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。

init 方法的定义如下:

public void init() throws ServletException {

// 初始化代码...

}

service() 方法

Service()方法的定义如下:

public void service(ServletRequest request,ServletResponse response)

throws ServletException, IOException{}

service()方法是执行实际任务的主要方法。Servlet 容器调用 service() 方法来处理来自客户端的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。所以,不用对 service() 方法做任何动作,只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

doGet() 方法

GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {

// Servlet 代码

}

doPost() 方法

POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {

// Servlet 代码

}

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以释放链接、清除缓存、。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

destroy 方法定义如下所示:

public void destroy() {

// 终止化代码...

}

Servlet 客户端 HTTP 请求

  1. 请求头重要信息

头信息

描述

Accept

这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常见的两种可能值。

Accept-Charset

这个头信息指定浏览器可以用来显示信息的字符集。例如 ISO-8859-1。

Accept-Encoding

这个头信息指定浏览器知道如何处理的编码类型。值 gzip 或 compress 是最常见的两种可能值。

Accept-Language

这个头信息指定客户端的首选语言,在这种情况下,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。

Authorization

这个头信息用于客户端在访问受密码保护的网页时识别自己的身份。

Connection

这个头信息指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值 Keep-Alive 意味着使用了持续连接。

Content-Length

这个头信息只适用于 POST 请求,并给出 POST 数据的大小(以字节为单位)。

Cookie

这个头信息把之前发送到浏览器的 cookies 返回到服务器。

Host

这个头信息指定原始的 URL 中的主机和端口。

If-Modified-Since

这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个 304 代码,表示 Not Modified 头信息。

If-Unmodified-Since

这个头信息是 If-Modified-Since 的对立面,它指定只有当文档早于指定日期时,操作才会成功。

Referer

这个头信息指示所指向的 Web 页的 URL。例如,如果您在网页 1,点击一个链接到网页 2,当浏览器请求网页 2 时,网页 1 的 URL 就会包含在 Referer 头信息中。

User-Agent

这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

  1. 读取 HTTP 头的方法

通过 HttpServletRequest 对象获取相应方法。

序号

方法 & 描述

1

Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。

2

Enumeration getAttributeNames()
返回一个枚举,包含提供给该请求可用的属性名称。

3

Enumeration getHeaderNames()
返回一个枚举,包含在该请求中包含的所有的头名。

4

Enumeration getParameterNames()
返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。

5

HttpSession getSession()
返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。

6

HttpSession getSession(boolean create)
返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。

7

Locale getLocale()
基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。

8

Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。

9

ServletInputStream getInputStream()
使用 ServletInputStream,以二进制数据形式检索请求的主体。

10

String getAuthType()
返回用于保护 Servlet 的身份验证方案的名称,例如,"BASIC" 或 "SSL",如果JSP没有受到保护则返回 null。

11

String getCharacterEncoding()
返回请求主体中使用的字符编码的名称。

12

String getContentType()
返回请求主体的 MIME 类型,如果不知道类型则返回 null。

13

String getContextPath()
返回指示请求上下文的请求 URI 部分。

14

String getHeader(String name)
以字符串形式返回指定的请求头的值。

15

String getMethod()
返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。

16

String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。

17

String getPathInfo()
当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。

18

String getProtocol()
返回请求协议的名称和版本。

19

String getQueryString()
返回包含在路径后的请求 URL 中的查询字符串。

20

String getRemoteAddr()
返回发送请求的客户端的互联网协议(IP)地址。

21

String getRemoteHost()
返回发送请求的客户端的完全限定名称。

22

String getRemoteUser()
如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。

23

String getRequestURI()
从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。

24

String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。

25

String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。

26

String[] getParameterValues(String name)
返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。

27

boolean isSecure()
返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。

28

int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。

29

int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。

30

int getServerPort()
返回接收到这个请求的端口号。

31

int getParameterMap()
将参数封装成 Map 类型。

Servlet 服务器 HTTP 响应

  1. 响应信息描述

头信息

描述

Allow

这个头信息指定服务器支持的请求方法(GET、POST 等)。

Cache-Control

这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存。

Connection

这个头信息指示浏览器是否使用持久 HTTP 连接。值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。

Content-Disposition

这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。

Content-Encoding

在传输过程中,这个头信息指定页面的编码方式。

Content-Language

这个头信息表示文档编写所使用的语言。例如,en、en-us、ru 等。

Content-Length

这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。

Content-Type

这个头信息提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型。

Expires

这个头信息指定内容过期的时间,在这之后内容不再被缓存。

Last-Modified

这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。

Location

这个头信息应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。

Refresh

这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。

Retry-After

这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。

Set-Cookie

这个头信息指定一个与页面关联的 cookie。

  1. 设置 HTTP 响应报头的方法

通过 HttpServletResponse 对象获取。

序号

方法 & 描述

1

String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。

2

String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。

3

boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。

4

boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。

5

void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。

6

void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。

7

void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。

8

void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。

9

void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。

10

void reset()
清除缓冲区中存在的任何数据,包括状态码和头。

11

void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。

12

void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。

13

void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。

14

void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。

15

void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。

16

void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。

17

void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。

18

void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。

19

void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。

20

void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。

21

void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。

22

void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。

23

void setStatus(int sc)
为该响应设置状态码。

状态码

  1. 状态码描述

代码

消息

描述

100

Continue

只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。

101

Switching Protocols

服务器切换协议。

200

OK

请求成功。

201

Created

该请求是完整的,并创建一个新的资源。

202

Accepted

该请求被接受处理,但是该处理是不完整的。

203

Non-authoritative Information


204

No Content


205

Reset Content


206

Partial Content


300

Multiple Choices

链接列表。用户可以选择一个链接,进入到该位置。最多五个地址。

301

Moved Permanently

所请求的页面已经转移到一个新的 URL。

302

Found

所请求的页面已经临时转移到一个新的 URL。

303

See Other

所请求的页面可以在另一个不同的 URL 下被找到。

304

Not Modified


305

Use Proxy


306

Unused

在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。

307

Temporary Redirect

所请求的页面已经临时转移到一个新的 URL。

400

Bad Request

服务器不理解请求。

401

Unauthorized

所请求的页面需要用户名和密码。

402

Payment Required

您还不能使用该代码。

403

Forbidden

禁止访问所请求的页面。

404

Not Found

服务器无法找到所请求的页面。.

405

Method Not Allowed

在请求中指定的方法是不允许的。

406

Not Acceptable

服务器只生成一个不被客户端接受的响应。

407

Proxy Authentication Required

在请求送达之前,您必须使用代理服务器的验证。

408

Request Timeout

请求需要的时间比服务器能够等待的时间长,超时。

409

Conflict

请求因为冲突无法完成。

410

Gone

所请求的页面不再可用。

411

Length Required

"Content-Length" 未定义。服务器无法处理客户端发送的不带 Content-Length 的请求信息。

412

Precondition Failed

请求中给出的先决条件被服务器评估为 false。

413

Request Entity Too Large

服务器不接受该请求,因为请求实体过大。

414

Request-url Too Long

服务器不接受该请求,因为 URL 太长。当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。

415

Unsupported Media Type

服务器不接受该请求,因为媒体类型不被支持。

417

Expectation Failed


500

Internal Server Error

未完成的请求。服务器遇到了一个意外的情况。

501

Not Implemented

未完成的请求。服务器不支持所需的功能。

502

Bad Gateway

未完成的请求。服务器从上游服务器收到无效响应。

503

Service Unavailable

未完成的请求。服务器暂时超载或死机。

504

Gateway Timeout

网关超时。

505

HTTP Version Not Supported

服务器不支持"HTTP协议"版本。

  1. 设置 HTTP 状态代码的方法

通过 HttpServletResponse 对象获取。

序号

方法 & 描述

1

public void setStatus ( int statusCode )
该方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果您的响应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。

2

public void sendRedirect(String url)
该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。

3

public void sendError(int code, String message)
该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息。

相关推荐

【Socket】解决UDP丢包问题

一、介绍UDP是一种不可靠的、无连接的、基于数据报的传输层协议。相比于TCP就比较简单,像写信一样,直接打包丢过去,就不用管了,而不用TCP这样的反复确认。所以UDP的优势就是速度快,开销小。但是随之...

深入学习IO多路复用select/poll/epoll实现原理

Linux服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。0.结论...

25-1-Python网络编程-基础概念

1-网络编程基础概念1-1-基本概念1-2-OSI七层网络模型OSI(开放系统互联)七层网络模型是国际标准化组织(ISO)提出的网络通信分层架构,用于描述计算机网络中数据传输的过程。...

Java NIO多路复用机制

NIO多路复用机制JavaNIO(Non-blockingI/O或NewI/O)是Java提供的用于执行非阻塞I/O操作的API,它极大地增强了Java在处理网络通信和文件系统访问方面的能力。N...

Python 网络编程完全指南:从零开始掌握 Socket 和网络工具

Python网络编程完全指南:从零开始掌握Socket和网络工具在现代应用开发中,网络编程是不可或缺的技能。Python提供了一系列高效的工具和库来处理网络通信、数据传输和协议操作。本指南将从...

Rust中的UDP编程:高效网络通信的实践指南

在实时性要求高、允许少量数据丢失的场景中,UDP(用户数据报协议)凭借其无连接、低延迟的特性成为理想选择。Rust语言凭借内存安全和高性能的特点,为UDP网络编程提供了强大的工具支持。本文将深入探讨如...

Python 网络编程的基础复习:理解Socket的作用

计算机网络的组成部分在逻辑上可以划分为这样的结构五层网络体系应用层:应用层是网络协议的最高层,解决的是具体应用问题...

25-2-Python网络编程-TCP 编程示例

2-TCP编程示例应用程序通常通过“套接字”(socket)向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通信。Python语言提供了两种访问网络服务的功能。...

linux下C++ socket网络编程——即时通信系统(含源码)

一:项目内容本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室。目的是学习C++网络开发的基本概念,同时也可以熟悉下Linux下的C++程序编译和简单MakeFile编写二:需...

Python快速入门教程7:循环语句

一、循环语句简介循环语句用于重复执行一段代码块,直到满足特定条件为止。Python支持两种主要的循环结构:for循环和while循环。...

10分钟学会Socket通讯,学不会你打我

Socket通讯是软硬件直接常用的一种通讯方式,分为TCP和UDP通讯。在我的职业生涯中,有且仅用过一次UDP通讯。而TCP通讯系统却经常写,正好今天写了一个TCP通讯的软件。总结一下内容软件使用C#...

Python 高级编程之网络编程 Socket(六)

一、概述Python网络编程是指使用Python语言编写的网络应用程序。这种编程涉及到网络通信、套接字编程、协议解析等多种方面的知识。...

linux网络编程Socket之RST详解

产生RST的三个条件:1.目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;2.TCP想取消一个已有的连接;3.TCP接收到一个根本不存在的连接上的分节;现在模拟上面的三种情况:cl...

ABB机器人编程实用技巧,多项案例

...

Python中实现Socket通讯(附详细代码)

套接字(socket)是一种在计算机网络中进行进程间通信的方法,它允许不同主机上的程序通过网络相互通信。套接字是网络编程的基础,几乎所有的网络应用程序都使用某种形式的套接字来实现网络功能。套接字可以用...

取消回复欢迎 发表评论: