我们之前说到过, Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,从客户端取数据找HttpServletRequest,而向客户端发送数据需要用到HttpServletResponse对象,我们几天就来收说这个HttpServletResponse。
首先,让我们来看看API文档,了解一下HttpServletResponse对象中有什么属性方法。我们可以从文档中看到,在字段摘要中,HttpServletResponse的字段都是一些HTTP状态码的封装,所以我们很多时候响应状态码,可以直接找HttpServletResponse中的状态码字段,我们只需要了解几个常用的状态码:
引用
SC_BAD_REQUEST 状态码400: 代表从客户端发来的请求在语句构成上是错误的。
SC_FORBIDDEN 状态码403: 代表你所发来的请求Server是知道存在的,但是Server拒绝返回给你这样的请求支援,简单的说就是服务器禁止你请求现在所要请求的资源。
SC_NOT_FOUND 状态码:404: 最常见的错误代码,代表所请求的资源不存在。
SC_INTERNAL_SERVER_ERROR 状态码500: 代表Http服务器内部错误,导致了无法正常满足请求,也就是服务器无响应。
SC_SERVICE_UNAVAILABLE 状态码503: 代表当前服务器临时的超负荷了,无法handle这个request。
还有很多状态码,这里就不一一累述了。但是大家要知道,基本上4打头的状态码都是客户端出问题,而5打头的状态码都是服务器端出的问题。
接下来我们来看看他的方法摘要,方法摘要中的方法不多,而我们其实常用到的也只是其中几个:
引用
addHeader和setHeader: 这两个方法都是设置响应头的,第一个方法是增加,如果该响应头的name存在,继续增加会增加多个相同name的响应头,而第二个方法在该响应头name存在的情况下,是修改该name下响应头value的内容。而这两个方法在HttpServletResponse中都有增强方法,就是addDateHeader,addIntHeader,setDateHeader,setIntHeader。一看就知道,当要设置的响应头是时间类型的或者Int类型的,可以用这两个方法。
sendRedirect: 该方法用于请求重定向,接收到了一个请求,使用response对象,将该请求重定向到另一个URL去。该方法传入的参数可以接受一个相对路径,而servlet容器必须在发送响应到客户端之前将其转换为绝对路径,如果传入路径以“/”开头,容器会解释这个路径为相对于容器root的路径,而以“/”开头,容器会直接解释为当前请求的URL。
了解完字段和方法,现在我们来谈谈HttpServletResponse的主要响应方式,他可以向客户端发送三种类型的数据:a.响应头b.状态码c.数据
而我们通常可以依靠响应头来控制乱码的问题,比如下面这段代码,他在响应之前设置了一个响应头,该响应头的内容如下,代表我需要浏览器以UTF-8来解码。
response.setHeader("Content-type","text/html;charset=UTF-8");
我们再看一段代码,下面这段代码表示设置response的编码方式是UTF-8,如果没有这段代码,Response对象通常使用默认的ISO8859-1的方式编码,中文就会出现乱码。这段代码和上面那段代码一般是结合在一起中,即设置了Response的编码方式,再设置浏览器的解码方式。
response.setCharacterEncoding("UTF-8");
其实我们可以通过下面这段代码将上面那两段代码整合,也能解决中文乱码问题。下面这段代码内部其实首先就设置了Response编码方式,并且设置了浏览器解码方式。
response.setContentType("text/html;charset=UTF-8");
最后我们再讲一段代码,是用Response对象设置文件下载。
String path = this.getServletContext.getRealPath(“/abc.jpg”);
String fileName = path.subString(path.lastIndexOf(“\\”));
Response.setHeader(“content-disposition”,“attachment;filename=”+URLENcode r.encode(fileName,”UTF-8”));
简单解释一下上面三段代码,第一段是用ServletContext获取到提供下载的文件的RealPath,这里我们要下载的文件放在webRoot目录下,名称叫abc.jpg。
第二段代码是通过截取字符串从全路径中获取到要下载的文件名。
最后一段也是最重要的一段,就是设置响应头,响应头的域不再是content-type了,而是content-disposition,而内容则是“attachment:filename=,这之后拼接了一个我们获得的文件名,但是这个文件名是用了URLENcoder将其编码为UTF-8了的。目的是在如果改文件名是中文,编码为UTF-8才能正常解码找到正确的文件名。至此,我们I实现了一个简单的文件下载。
分享到:
相关推荐
在每次Servlet请求时,Web服务器都会创建一个HttpServletResponse对象,并将其传递给Servlet的service()方法,以便Servlet可以通过该对象与客户端进行交互。 在HttpServletResponse对象中,定义了多种方法,用于...
一、HttpServletResponse对象 `HttpServletResponse`是Servlet API中的一个接口,位于`javax.servlet.http`包下。它提供了向客户端发送HTTP响应的方法,是服务器端与浏览器进行通信的桥梁。主要功能包括设置响应...
### Servlet内置对象详解 在Java Web开发中,Servlet作为处理HTTP请求的核心技术之一,其内置对象(也称为预定义对象)对于实现业务逻辑至关重要。本文将详细介绍Servlet中的八大内置对象:`request`、`response`、...
在Java Web开发中,`HttpServletResponse`对象是Servlet API中的核心组件之一,它扮演着服务器向客户端发送响应的重要角色。本篇文章将深入探讨`HttpServletResponse`对象的应用,以及请求重定向与请求转发的区别。 ...
### Struts2教程:获得HttpServletResponse对象 在深入探讨如何在Struts2框架中获取`HttpServletResponse`对象之前,我们先来简要回顾一下Struts2框架的基本概念及其与传统Struts1.x的区别。 #### Struts2框架简介...
其中,作为参数传递进来的响应对象就是 HttpServletResponse 对象,在 service 方法内部可调用它的各种方法来创建响应消息。 二、getOutputStream 和 getWriter 方法 为了方便 Servlet 程序灵活的选择字节或者字符...
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。 ⑤WEB应用程序被停止或重新...
总结来说,Servlet是JAVAEE中的关键组件,通过HttpServletRequest和HttpServletResponse对象,能够处理HTTP请求并构建响应。在实践中,结合MVC设计模式,Servlet可以有效地管理应用程序的控制流程,而JSP则专注于...
一旦找到对应的Servlet,容器会调用Servlet的`service()`方法,传递HttpServletRequest和HttpServletResponse对象作为参数。`service()`方法会根据HTTP请求方法(如GET或POST)选择调用`doGet()`或`doPost()`等适当...
5. **请求/响应对象**(HttpServletRequest/HttpServletResponse):Servlet容器提供这些对象,让Servlet能够获取请求信息和构造响应。 6. **过滤器**(Filter):在Servlet处理请求之前和之后,可以添加过滤器来...
7. **HttpServletRequest和HttpServletResponse对象**:Servlet处理请求时,会接收到由容器(如Tomcat)传入的HttpServletRequest和HttpServletResponse对象。HttpServletRequest对象包含客户端的请求信息,如URL、...
`HttpServletResponse`接口是Java Servlet API中的核心接口之一,主要用于处理HTTP响应。在Web应用开发过程中,通过`HttpServletResponse`可以向客户端发送响应数据,包括设置响应头、状态码等。对于中文乱码问题、...
在Servlet的生命周期中,还有一些其他的方法,例如HttpServletRequest和HttpServletResponse对象,但是这些方法都是在运行阶段中调用的。 Servlet的生命周期是一个复杂的过程,它涉及到Servlet容器、客户端、...
开发者重写这些方法来实现业务逻辑,处理客户端的请求,并通过HttpServletResponse对象返回响应。 五、请求处理 Servlet通过HttpServletRequest对象获取请求参数、头信息和请求路径。例如,可以使用getParameter...
4. **HttpServletRequest** 和 **HttpServletResponse**:这两个接口分别代表了HTTP请求和响应对象,它们提供了处理HTTP请求头、获取请求参数、设置响应状态码和输出数据的方法。 5. **Servlet生命周期**:包括加载...
Response 对象是 HttpServletResponse 类的实例,包含了响应客户请求的有关信息,但在 JSP 中很少直接用到它。Response 对象提供了许多有用的方法和属性,例如设置响应头、设置响应状态码等。 3. Session 对象 ...
7. **请求和响应对象**:HttpServletRequest和HttpServletResponse是处理HTTP请求和响应的主要对象。HttpServletRequest包含了请求的所有信息,如请求参数、头信息、请求路径等;HttpServletResponse则用于构造和...
6. **处理请求**:Web容器创建一个`HttpServletRequest`对象和一个`HttpServletResponse`对象,并调用Servlet的`service()`方法,将这两个对象作为参数传递进去。 7. **执行业务逻辑**:在`service()`方法内部,根据...
在Servlet中,可以通过`HttpServletRequest`对象获取请求信息,通过`HttpServletResponse`对象设置响应信息。例如,以下代码展示了如何处理一个HTTP GET请求: ```java protected void doGet(HttpServletRequest ...
通过HttpServletResponse对象设置响应,如状态码、内容类型、输出数据等。例如,获取GET参数: ```java String name = request.getParameter("name"); ``` 4. **Servlet多线程**:Servlet容器通常会为每个请求...