第3章 使用Servlet处理HTTP响应
JAVA基础之HttpServletResponse响应

JAVA基础之HttpServletResponse响应 ⽤户在客户端输⼊⽹址(虚拟路径)时,开始发送⼀个HTTP请求(请求⾏、请求头、请求体)⾄服务器。
服务器内的Tomcat引擎会解析请求的地址,去找XML⽂件,然后根据虚拟路径找Servlet的真实路径,真实的Servlet会将请求的信息封装成request(请求)对象,然后再创建⼀个response(响应)对象,(此时的response内是空的)同时创建servlet对象,并调⽤service⽅法(或doGet和doPost⽅法)。
这样就是把两个对象传给了服务器内的某个servlet的service⽅法,通过这个⽅法,我们可以获得request的所有的信息,并且向response内设置信息。
response.getwriter().write()将内容写到response的缓冲区,这样service⽅法结束了,⽅法返回后,tomcat引擎会将从该response缓冲区中获取的设置信息封装成⼀个HTTP响应(响应⾏、响应头、响应体),发送给客户端。
客户端解析响应回来的东西继⽽进⾏显⽰。
我们可以通过设置修改响应的信息进⾏相应的重定向(⽤户访问的⽹页不存在并跳转到其他⽹页上)、修改响应⽂本(需要修改浏览器和服务器两边的编码,并且还得处理兼容问题)。
⼀、概述: 我们在创建Servlet时会覆盖service()⽅法,或doGet()/doPost(),这些⽅法都有两个参数,⼀个为代表请求的request和代表响应response。
service⽅法中的response的类型是ServletResponse,⽽doGet/doPost⽅法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的⼦接⼝,功能和⽅法更加强⼤⼆、运⾏流程:三、内容:响应⾏、响应头、响应体;四、通过response 设置响应⾏: 设置响应⾏的状态码:setStatus( int sc)五、通过response 设置响应头: setHeader(String name,String value) 设置public class RefreshServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置定时刷新的头response.setHeader("refresh","5;url=https://");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><script type="text/javascript">window.onload=function(){//获取span元素var second=document.getElementById("second");//定义秒数var time =5;//设置定时器var timer=setInterval(function(){second.innerHTML=time;time--;if(time < 0){clearInterval(timer);location.href="https://";}},1000);}</script></head><body>恭喜您,注册成功!<span id="second" style="color:red">5</span>秒后跳转,如没跳转,请点击<a href="https://">这⾥</a></body></html>1、重定向:(请求服务器两次,地址栏变化)①、状态码:302;②、响应头:location 代表重定向地址;public class Servlet01 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*// 设置响应状态码response.setStatus(302);//设置响应头中的Locationresponse.setHeader("Location","/WEB0/Servlet02");*///重定向response.sendRedirect("/WEB0/Servlet02");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}public class Servlet02 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("Servlet02");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}六、通过response 设置响应体:1、响应体设置⽂本:PrintWriter getWriter() 获得字符流,通过字符流的write(String s)⽅法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。
servlet请求方法

servlet请求方法Servlet是用Java编写的服务器端程序,它可以处理来自客户端(浏览器)的请求并生成相应的响应。
在Servlet中,我们可以使用不同的请求方法来处理不同类型的请求。
下面是一些相关参考内容,介绍了常用的Servlet请求方法。
1. doGet方法:doGet方法用于处理客户端的GET请求。
在这种情况下,查询字符串会被附加到URL后面,并且可以通过getParameter方法来访问这些参数的值。
这个方法通常用于获取信息,而不是对服务器上的数据进行修改。
例如,一个简单的例子可以是根据用户的请求来返回一个HTML页面。
2. doPost方法:doPost方法用于处理客户端的POST请求。
与GET请求不同,POST请求将数据作为请求体的一部分发送给服务器。
在Servlet中,可以使用getParameter方法来访问这些参数的值。
这个方法通常用于在服务器上创建或更改数据。
例如,当用户提交一个表单时,表单数据会通过POST请求发送给服务器。
3. doPut方法:doPut方法用于处理客户端的PUT请求。
PUT请求用于向服务器添加新的资源或更新现有资源。
在Servlet中,可以使用getInputStream方法来读取请求的正文,并使用请求参数来访问表单字段的值。
这个方法通常用于在服务器上更新数据。
4. doDelete方法:doDelete方法用于处理客户端的DELETE请求。
DELETE请求用于删除服务器上的资源。
在Servlet中,可以使用getParameter方法来访问请求参数的值。
例如,当用户点击"删除"按钮时,可以通过发送DELETE请求来删除特定的数据。
5. doOptions方法:doOptions方法用于处理客户端的OPTION请求。
OPTION请求用于获取服务器支持的请求方法、请求头字段和响应头字段。
在Servlet中,可以使用setHeader方法来设置响应头字段,并使用getHeader方法来获取请求头字段的值。
Servlet的应用

Servlet的应用一、Servlet的应用1. 一个Servlet类应该继承HttpServlet并且覆盖doGet或doPost方法,这取决于数据的发送方式是get 还是post。
若要在一个Servlet中同时处理get 和post请求,并且对每个请求的处理动作相同,可以简单地在doGet方法中调用doPost方法,反之亦然。
doGet和doPost方法都有两个参数:HttpServletRequest 和HttpServletResponse。
可以通过HttpServletRequest类提供的方法获得引入的信息,比如表单数据、客户主机名等;HttpServletResponse类提供输出信息的能力,比如,通过HttpServletResponse得到一个PrintWriter向客户发送文档内容。
2. doGet、doPost及其它doXxx方法是Servlet的主体,大部分时间都只用关心get和post 请求,所以只需覆盖doGet、doPost方法。
如果需要,也可以为处理delete请求而覆盖doDelete 方法;为处理put请求而覆盖doPut方法;为处理options请求而覆盖doOptions方法;为处理trace请求而覆盖doTrace方法。
注意,没有doHead方法,因为系统自动用状态列和header 设置来回复head 请求。
3. 一个简单的Servlet最主要的功能就是用println语句输出一个预期的页面。
因为doGet 和doPost会抛出两个异常,因此要引处相关的类:java.io——因为要用到PrintWriter等javax. servlet——因为要用到HttpServlet等javax. servlet.http——因为要用到HttpServletRequest 和HttpServletResponse等二、Servlet的编译、配置和调用1. 环境变量CLASSPA TH要包含了标准的Servlet类,比如:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar;E:\Program Files\Apache SoftwareFoundation\T omcat 6.0\lib\servlet-api.jar2. 用“javac”命令编译Servlet,将生成的Servlet类(即.class 文件)放到正确路径,比如:ROOT\WEB-INF\classes3. 若生成的Servlet类(即.class文件)放在ROOT\WEB-INF\classes,则必须使用ROOT\WEB-INF目录下的web.xml文件进行注册。
servlet 调用方法

servlet 调用方法Servlet是Java编写的服务器端程序,可以处理来自客户端的HTTP请求并生成HTTP响应。
在Servlet中调用方法是常见的操作,可以通过调用方法来实现对请求的处理和生成响应的功能。
在Servlet中调用方法的方式有多种,下面将介绍几种常用的方法调用方式。
一、普通方法调用在Servlet中可以直接调用普通的Java方法。
通过在Servlet中创建一个对象,然后调用对象的方法来实现对请求的处理和生成响应。
例如,可以在Servlet中创建一个处理请求的对象,并调用对象的方法来处理请求。
二、继承方式调用Servlet可以继承其他类,并重写其中的方法来实现对请求的处理和生成响应。
通过继承其他类,可以直接调用父类中的方法或重写父类的方法来实现特定的功能。
三、接口方式调用Servlet可以实现其他接口,并实现接口中的方法来实现对请求的处理和生成响应。
通过实现接口,可以调用接口中定义的方法来实现特定的功能。
四、反射方式调用Servlet可以使用反射机制来调用方法。
通过获取方法对象,然后通过方法对象调用方法来实现对请求的处理和生成响应。
反射方式调用方法可以在运行时动态地调用不同的方法。
五、动态代理方式调用Servlet可以使用动态代理来调用方法。
通过创建一个代理对象,然后通过代理对象调用方法来实现对请求的处理和生成响应。
动态代理方式调用方法可以在方法调用前后进行一些额外的处理。
六、注解方式调用Servlet可以使用注解来调用方法。
通过在方法上添加注解,然后通过注解来调用方法来实现对请求的处理和生成响应。
注解方式调用方法可以简化代码,并提高代码的可读性。
以上是几种常见的在Servlet中调用方法的方式,每种方式都有其适用的场景和特点。
在实际开发中,可以根据具体的需求和情况选择合适的方式来实现对请求的处理和生成响应。
总结一下,Servlet中调用方法是常见的操作,可以通过普通方法调用、继承方式调用、接口方式调用、反射方式调用、动态代理方式调用、注解方式调用等多种方式来实现。
servlet工作原理

servlet工作原理
servlet是Java Web开发的重要组件之一,用于处理Web应用程序
的HTTP请求和响应。
servlet的工作原理如下:
1.客户端发起HTTP请求,包含请求头和请求体。
2. Web服务器(如Tomcat)接收请求,将请求头解析成HttpServletRequest对象,将请求体交给ServletInputStream对象。
3. 根据请求的URL匹配相应的servlet,创建一个新线程并将HttpServletRequest、HttpServletResponse对象传入servlet。
4. servlet处理请求,做出相应动作并生成响应数据,然后将响应
数据写入HttpServletResponse对象中。
5. HttpServletResponse对象将响应头和响应体发送给Web服务器。
6. Web服务器将响应头和响应体发送到客户端。
总之,servlet是在Web服务器上运行的Java程序,通过HTTP协议
对外提供服务,可以接收和处理请求,并生成相应的响应数据。
它们充当Web服务器和Web应用程序之间的中介,使开发人员可以以面向对象的方
式实现Web应用程序。
HttpServletResponse的应用

IT资讯交流网
getOutputStream与getWriter方法
getOutputStream方法用于返回Servlet引擎创建的字节输出流对象,Servlet程 序可以按字节形式输出响应正文。 getWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以 按字符形式输出响应正文。 getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方 法后,就不能再调用另一方法。 getOutputStream方法返回的字节输出流对象的类型为ServletOutputStream, 它可以直接输出字节数组中的二进制数据。 getWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出 流对象后返回,PrintWriter对象可以直接输出字符文本内容。 Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被 Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响 应状态行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或 getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没 有,Servlet引擎将调用close方法关闭该输出流对象。
IT资讯交流网
选择getOutputStream 和getWriter方法的要点
HTML语言中专门定义了<meta>标签的http-equiv属性来在HTML文档中模拟HTTP响应 消息头,当浏览器读取到HTML文档中具有http-equiv属性的<meta>标签时,它会用与处 理WEB服务器发送的响应消息头一样的方式来进行处理。
专升本期末单选多选

题目17用户使用POST方式提交的数据中存在汉字(使用GBK字符集),在Servlet中需要使用下述______语句处理。
选择Arequest.setCharacterEncoding("GBK");
选择Brequest.setContentType("text/html;charset=GBK");
选择Arequest.getParameter("aihao").length
选择Brequest.getParameter("aihao").size()
选择Crequest.getParameterValues("aihao").length
选择Drequest.getParameterValues("aihao").size()
ACookie保存在客户端BCookie可以被服务器端程序修改
CCookie中可以保存任意长度的文本D浏览器可以关闭Cookie功能
答案ABD
题目2HttpServletRequest的______方法可以得到会话。
AgetSession() BgetSession(boolean) CgetRequestSession() DgetHttpSession()
选择C通常需要覆盖service()方法
选择D通常需要在web.xml文件中声明<servlet>和<servlet-mapping>两个元素
答案ABD
题目8下列关于Servlet生命周期的说法正确的是______。
选择A构造方法只会调用一次,在容器启动时调用
选择Binit()方法只会调用一次,在第一次请求此Servlet时调用
servlet处理http请求的基本流程

servlet处理http请求的基本流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!理解Servlet处理HTTP请求的基本流程Servlet是一种Java编程语言,用于扩展Web服务器的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HelloWord Servlet中产生的HTML标记
产生的标记 <html> <head> <title>Hello World!</title> </head> <body> <h1> Hello World!</h1> </body> </html> HelloWorld.java代码 out.println(“<html>”); out.println(“<head>”); out.println(“<title>Hello World!</title>”); out.println(“</head>”); out.println(“<body>”); out.println(“<h1> Hello World!</h1>”); out.println(“</body >”); out.println(“</html >”);
3.2.1 HTTP状态码
100-199:表示信息性代码,标示客户 端应该采取的其他动作,请求正在进行。 200-299:表示客户请求成功。 300-399:表示用于已经移走的资源文 件,指示新的地址。 400-499:表示由客户端引发的错误。 500-599:表示由服务器端引发的错误。
代码保存为ResponseHeader.java,编译后 放在book Web应用程序的/WEBINF/classes/com/book目录下 在web.xml文件4E2D添加ResponseHeader Servlet的部署映射到/RespondHeader,重 新装载book Web应用程序,然后浏览 http://localhost:8080/book/ResponseHead er
3.4.1 传递文本流
getWriter()方法用于得到一个输出流,来发 送HTML标记。在HelloWorld.java的前几行, 调用getWriter()得到一个java.io.PrintWriter对 象来返回文本。 printWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>");
Servlet调用sendError方法返回404应答
(2)sendRedirect方法 public void sendRedirect(String URL) sendRedirect方法将生成一个302应答,同 时在Location头中指示新文档的URL地址。 HTTP响应码通过HttpServletResponse对象 的setStatus()方法发送到客户端。如果执行 成功,Servlet会返回一个响应码200。另一 个响应码是302,代表资源临时移走了。
(2)对于Servlet的每次访问请求,Web容器都会解析 Socket输入流中的HTTP请求数据,创建一个请求对象。同 时,创建一个响应对象,用于产生Socket输出流中的HTTP 响应
(3)Web容器调用所请求的Servlet对象的service()方法, 并将请求和响应对象作为参数传递给该方法
3.2.2 设置状态码
Servlet设置状态码一般使用 HttpServletResponse的setStatus方法的参数 是一个整数 为了使得代码具有更好的可读性,可以用 HttpServletResponse中定义的常量来避免直 接使用整数,同时也是为了避免输入错误 这些常量根据HTTP1.1中的标准状态信息命 名,所有的名字前都加上了SC前缀(Status Code的缩写)并大写,同时把空格转换成 了下画线
第3章 使用Servlet处理HTTP响 应
3.1 使用Servlet发送服务器端响应 信息
Servlet中对HTTP请求的处理过程 (1)Web浏览器通过打开到Web服务器的Socket套接 字初始化HTTP请求。Socket的输入流包含了HTTP请求数据, Socket的输出流中包含了HTTP响应数据
3.3 设置响应头
HttpServletResponse对象中有如下方法来操纵HTTP响应 头。 containsHeader(ng.String name) setHeader(ng.String name,ng.String value) setIntHeader(ng.String name,int value) setDateHeader(ng.String name,long date) addHeader(ng.String name,ng.String value) addIntHeader(ng.String name,int value) addDateHeader(ng.String name,long date) setContentType(String mimetype) addCookie(Cookie c)
有两个例外:和状态代码302对应的常量根 据HTTP1.0命名,而307没有对应的常量。
设置状态代码并非总是意味着不要再返回 内容文档。
Web服务器返回404应答
Servlet也可以定制这个应答
Tomcat服务器返回404应答
定制应答时应当在通过PrintWriter对象发送 任何内容之前先调用HttpServlet Response 的setStatus()方法,这是因为HTTP的响应信 息是由状态行、响应头、空行和消息体 (内容文档)按照次序组成并以流的方式 向浏览器发送的
package com.book; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SendError extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); Response.sendError(response.SC_NOT_FOUND,"Resource Not Found"); } }
(4)HttpServletResponse对象给Servlet提供一个 PrintWriter对象,使Servlet可以产生响应消息体
3.2 设置响应状态行
HTTP响应的状态行分为HTTP、状态码和状 态描述3个部分 因为状态描述与状态码直接相关,而HTTP 由服务器确定,所以在Servlet中只需要设置 状态码即可
HTTP响应信息按次序组成并向浏览器发送 数据流
虽然设置状态代码一般使用的是 response.setStauts(int)方法,但为了简单起 见,HttpServlet Response为两种常见的情 形提供了专用方法。 (1)sendError方法 Public void sendError(int code,String message)
代码保存为SendError.java,编译后放在 book Web应用程序的/WEBINF/classes/com/book目录下。 在web.xml文件中添加sendError Servlet的部 署映射到/SendError后,重新装载book Web 应用程序,然后浏览 http://localhost:8080/book/SendError
3.4.2 传递二进制流
getOutputStream()方法返回的OutputStream 可以被用于发送文本,但是它通常用于发 送非文本的二进制信息,例如图像
package com.book; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.awt.*; import java.awt.image.*; import com.sun.image.codec.jpeg.*; public class DynamicImage extends HttpServlet { public void doGet( HttpServletRequest request.HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg");
package com.book; import java.io.IOException; import java.io.pritWriter; import javax.servlet.*; import javax.servlet.http.*; public class ResponseHeader extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("application/vnd.ms-excel"); printWriter out = response.getWriter(); out.println("Name\t age \t sex"); out.println("jack\t 21 \t male"); out.println("rose\t 20 \t female"); } }