servlet请求和响应

liushiqiang123 liushiqiang123     2022-12-21     582

关键词:

在Java Web中Servlet、请求和响应是最基本的三个对象,在Web容器的管理下,这三者能够完成基本的HTTP请求处理。

Servlet的作用是为客户提供服务。servlet的角色是接受一个客户的请求,再返回一个响应。请求可能非常简单,例如:给我提供一个欢迎页面;也可能非常复杂,例如:为当前的购物车结账,这个请求会带一些客户端传来的参数,servlet需要知道自己如何使用请求中的参数,还需要知道该返回什么样的响应。

一、Servlet

1. Servlet受容器管理

Java Web服务器处理用户请求的基本过程:用户在客户端点击一个链接,浏览器会向Web应用服务器发送一个URL请求,该URL会指向一个servlet;Web容器看出这个请求指向某个servlet A,就会创建两个对象(HttpServletRequest和HttpServletResponse),并分配或创建一个线程,调用servlet A对应的service方法(上述请求和响应对象作为参数);service根据HTTP请求区分出客户端发来的是GET还是POST请求,并调用对应的doGet()或doPost()方法;在doGet()或doPost()方法中进行业务逻辑的处理,处理完成后的结果通过响应对象返回写回给客户端。

2. Servlet的生命周期

在容器启动时,XXXServlet在JVM的管理下被实例化为一个对象,这时候它还不是servlet,需要在容器的管理下调用init()方法进行初始化,获得ServletConfig和ServletContext对象的引用后,才称为一个真正的Servlet。

1)init()

  • 何时调用?servlet实例创建后,并在servlet能为客户请求提供服务之前,容器需要通过init方法初始化servlet。

  • 作用?初始化servlet实例,使之获得web容器的相关信息

  • 是否会被覆盖?有可能

2)service()

  • 何时调用?当一个客户请求到来时,容器会创建(或从线程池分配一个线程),并调用servlet的service方法

  • 作用?这个方法会确定HTTP方法(GET or POST),并调用对应的servlet方法——doGet或doPost;

  • 是否会被覆盖?可以,但是不会

3)doGet()或doPost()

  • 何时调用?

  • 作用?具体的业务逻辑

  • 是否会被覆盖?至少要覆盖其中之一

关键点:每个请求都在一个单独的线程中运行!

3. Servlet的继承体系

  • servlet接口:javax.servlet.Servlet,表示所有的Servlet都有这5个方法,其中init、service和destroy三个方法和servlet的生命周期有关;

  • GenericServlet:javax.servlet.GenericServlet,这是一个抽象类,它实现了开发者需要的大部分基本servlet方法,大多数servlet的“servlet行为”都来自这个类;

  • HttpServlet:javax.servlet.http.HttpServlet,这也是一个抽象类,它实现了自己的service()方法,处理servlet的HTTP特性(service方法不仅仅只处理HTTP请求)。

  • MyTestServlet:这是开发者自己编写的处理类,一般只需要实现doGet()和doPost()方法。

二、请求和响应

1. ServletRequest的继承体系

HttpServletRequest的API与HTTP有关,例如:Cookie、首部(Header)和会话(Session)等;

2. ServletResponse的继承体系

ServletResponse(响应)也是类似,用于帮助servlet给客户端返回处理结果,而HttpServletResponse增加了HTTP相关的内容(例如:错误、cookie和首部)等API。

HttpServletRequest和HttpServletResponse这些都是servlet规范里指定的接口,而web容器开发商(例如tomcat)会负责实现这些接口,例如:HttpServletResponseWrapper和ApplicationHttpResponse等,作为开发者,我们只需要知道,在处理doGet()和doPost方法时,容器会给这个方法传HttpServletRequest和HttpServletResponse两个参数。

3. GET和POST的区别

  • POST方法有请求体

  • GET方法的查询参数直接跟在URL后面,不够安全;

  • GET请求可以建立书签,POST请求则不能

  • GET请求是幂等的,POST请求不是(GET请求仅仅用于查询一些数据,POST请求则用于在服务器上更新数据),在业务上会遇到既需要POST请求,又需要保证请求幂等的情况(例如库存扣减),这种情况需要我们出具对应的实现方案。参见:

4. HTTP请求的API

  • getHeader(),可以获取首部信息,例如request.getHeader("User-Agent")可以获取客户端的平台和浏览器信息。

  • getIntHeader(),如果首部信息中的“key/value”对中的value是int类型的,可以使用这个方法直接获取值而不需要显式类型转换

  • getCookies(),可以获取与请求相关的cookie

  • getSession(),可以获取与请求相关的会话

  • getMethod(),可以获取http方法

  • getInputStream(),可以获取请求的输入流

  • 求,可以获取查询字符串中的数据、对于POST请求,可以获取请求体中的数据

  • getRemotePort(),获取客户端的端口号

  • getServerPort(),获取服务端接受请求的端口号(请求一开始发送服务端的哪个端口?)

  • getLocalPort(),获取服务端处理请求的端口号(请求最后是发送到服务端的哪个端口?)

5. HTTP响应的API

大多数情况下,使用响应只是为了向客户发回数据。会对响应调用两个方法:setContentType()和getWriter()。在此之后,可以将HTML或其他内容写入到流。不过,你也可以使用响应设置首部、发送错误或增加Cookie。

  • setContentType(),设置响应返回的MIME类型

  • getOutputStream(),获取HTTP输出字节流

  • getWriter(),获取HTTP输出字符流

  • addCookie(Cookie cookie),给响应首部中增加cookie对象,注意这里不是增加“key/value”对

  • addHeader(),在响应首部中添加一个“key/value”对

  • setHeader(),在响应首部中设置一个“key/value”对;和addHeader()的区别是,如果响应首部中已经有对应的key存在,setHeader()会覆盖现有的值,而addHeder()会新增一个“key/value”对,使用时需要注意

  • encodeRedirectURL(),对包含session ID的URL进行编码。使用场景:在浏览器不支持使用cookie跟踪会话时,可以使用URL重写(即将URL重定向到另一个URL,而这个URL的后面会带上session id传给客户端,这个URL在返回给客户端之前需要经过编码)

6. 重定向和请求派发

  • 重定向是让浏览器访问新的URL完成工作,用户会在浏览器地址栏看到新的URL;

  • 请求派发是服务端的工作,是当前servlet委托另外的servlet完成请求,并给客户端发回响应,用户的浏览器地址栏的URL没有改变;

原文链接:https://mp.weixin.qq.com/s/TTE364IxyqI4Gl9kVEVFXw

servlet请求和响应和cookie(代码片段)

1.Servlet请求操作 通过前面的学习我们能够创建并运行一个简单的Servlet程序,完成浏览器和服务器的简单交互,但是我们编写的Servlet代码是没有对浏览器的请求进行处理的。现在我们开始学习如何使用Servlet进行浏览器请求的... 查看详情

servlet入门

1.servlet是什么?  javaservlet是为响应web应用程序上下文的Http请求而设计的。  创建一个servlet时需要使用子类HttpServlet,该类中的方法允许你访问请求和响应包装器(wrapper),你可以用这个包装器处理请求和创建响应。... 查看详情

java示例代码_使用Java监控来自/到servlet的HTTP请求和响应

java示例代码_使用Java监控来自/到servlet的HTTP请求和响应 查看详情

servlet学习1(代码片段)

一.Servlet介绍什么是ServletServlet来自两个单词:Server和Applet,是一个在服务器上运行的Java程序。与普通Java程序不同的是,Servlet是由服务器去调用的,可以对浏览器或者其他HTTP客户端发送的请求进行处理,从原理上来说,Servlet可... 查看详情

《headfirstservlets&jsp》-4-请求和响应

Servlet生命周期生命周期三大重要时刻Servlet集成结构:方法init()service()doGet()/goPost()何时调用Servlet实例被创建之后、为客户请求提供服务之前当第一个客户请求到来时service()根据HTTP方法来选择调用作用初始化查看客户请求并调用... 查看详情

servlet

什么是servlet?(1)servlet就是实现了特定接口或者父类的java类(2)servlet是一个java程序,是在服务器上运行以处理客户端请求并作出响应的程序servlet的职责就是接收客户端的请求并且对请求作出响应 总结:servlet是一个处理... 查看详情

servlet之request和response

一、简介 web服务器收到客户端的Http请求后,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。 request和response既然代表请求和响应,那么我们要获取客户端提交过来的数据,只需要找re... 查看详情

关于servlet的中的request和response两个对象的详细介绍

request是请求浏览器发送过来的请求也就是get和post你的servlet也应该有对应的doget()和dopost()response是响应负责响应浏览器发过来的请求最重要的方法是setContentType()设定响应的类型getOutputStream()取得一个ServletOutputStream这个可以返回二... 查看详情

四请求和响应(代码片段)

请求和响应Servlet最主要的作用就是处理客户端请求,并向客户端做出响应。为此,针对Servlet的每次请求,Web服务器在调用service()之前,都会创建两个对象,分别是HttpServletRequest和HttpServletResponse。其中前者用... 查看详情

servlet

Servlet最常用的对象:请求对象:ServletRequest和HttpServletRequest,通过该对象获取来自客户端的请求信息响应对象:ServletResponse和HttpServletResponse,通过该对象生成响应结果Servlet配置对象:ServletConfig,当容器初始化一个Servlet对象时... 查看详情

servlet请求转发与重定向的区别

...址栏URL不变,请求响应不变。注* parameter可以是一个servlet,可以是一个jsp文件,或者是一个html文件,我们可以理解为客户端请求调用服务器的资源。 3.重定向(redirect)rosponse.sendRedirect("http://www.baidu.com");跳转到指定url资源... 查看详情

servlet(代码片段)

...器的概念创建Web程序流程服务器的具体运行细节Servle技术Servlet技术的特点Servlet技术的使用Servlet运行流程Servlet的生命周期service和doGet和doPost方法servlet常见错误Servlet对请求的处理request对象response对象servlet流程总结请求乱码的解... 查看详情

dispatcherservlet的创建过程(代码片段)

...pringMvc启动原理源码分析【参考文章】:【Spring】DispatcherServlet的启动和初始化【参考文章】:servlet百度百科1.servlet生命周期    一个客户端的请求到达Server;  Server创建一个请求对象,处理客户端请求;  Server创建一... 查看详情

filter作用

Servlet过滤器filter用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,这样实现很多开发者想得到的功能。一个过滤器是一个可以传送请求或修改响应的对象。过滤器并不是servlet,他们并不实际创建一个... 查看详情

对servlet请求或响应进行jmockit测试

对Servlet请求及响应进行mock方法,通过getMockInstance方法对servlet进行打桩,对servlet提供的方法进行mock,替代真正的servlet请求或响应。 参考链接:https://stackoverflow.com/questions/31689729/servlet-junit-test-using-jmockit代码如下:@RunWith(JMoc... 查看详情

servlet之请求,响应,缓存以及乱码

  JavaWeb中,Servlet的请求,响应对象有很多实用的api,此处依据http协议中请求行,请求头,请求体以及响应行,响应头,响应体的思路,对这些api以及相关事项做个整理,最后总结一下乱码的相关处理。响应行  响应行格式... 查看详情

servlet以及一个简单的登录案例

1.servlet的概述  就是一个运行在web服务器上的小的java程序,用来接收和响应从客户端发送过来的请求,通常使用http协议  就是sun公司提供的一个动态网页开发技术  作用:用来处理从客户端浏览器发送的请求,并且可以对请求... 查看详情

处理servlet中的多个请求,并为每个请求提供正确的响应(代码片段)

...个我无法弄清问题原因的地步。实现逻辑:当请求发送到servlet时,它调用函数A从数据库中获取动态内容并将其传递回请求来自的客户端。问题:当多个请求进入servlet时,它们从函数A获取数据(它从数据库中获取表单详细信息... 查看详情