JAVAWeb---HttpServletResponse中的方法

本文深入讲解了Servlet中的Response对象,包括其基本属性和方法,如何设置响应行、响应头及响应体,解决中文乱码问题,以及重定向的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.response
    ServletResponse -- 通用的response提供了一个响应应该具有最基本的属性和方法
        |
        |-HttpServletResponse -- 在ServletResponse的基础上针对于HTTP协议增加了很多强化的属性和方法

2.输出数据
 1)getOutputStream字节输出流
response.getOutputStream().write("中国".getBytes("utf-8"));
2)getWriter字符输出流
response.getWriter().write("北京");
    Notice: getWriter和getOutputStream在一次请求中只能使用一个

3)解决乱码
    1> 通知服务器发送数据时使用utf-8编码
response.setCharacterEncoding("utf-8");
    2> 通知浏览器接受数据时使用utf-8解码
response.setHeader("Content-Type", "text/html;charset=utf-8");

3> Notice:
        a. response对象中对Content-Type响应头进行了封装,可以使用一下代码代替 2>
response.setContentType("text/html;charset=utf-8");
        b. 如果设置了Content-Type,服务器会自动的设置 characterEncoding,因此解决乱码只需要设置Content-Type响应头一行代码就可以了,但是为了代码的可读性更高,一般还是建议同时设置 characterEncoding 和 Content-Type.

1.response的运行流程

 

2.通过抓包工具抓取Http响应

因为response代表响应,所以我们可以通过该对象分别设置Http响应的响应行,响    应头和响应体

3.通过response设置响应行

设置响应行的状态码

setStatus(int sc)

4.通过response设置响应头

addHeader(String name, String value)

addIntHeader(String name, int value)

addDateHeader(String name, long date)

setHeader(String name, String value)

setDateHeader(String name, long date)

setIntHeader(String name, int value)

 

其中,add表示添加,而set表示设置

 

重定向需要:1.状态码:302

2.响应头:location 代表重定向地址

5.通过response设置响应体

(1)响应体设置文本

PrintWriter getWriter()

获得字符流,通过字符流的write(String s)方法可以将字符串设置到response   缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览   器端。

 

关于设置中文的乱码问题

原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过     response的setCharacterEncoding(String charset) 设置response的编码

 

但我们发现客户端还是不能正常显示文字

原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系     统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以   手动修改浏览器的编码是UTF-8。

 

我们还可以在代码中指定浏览器解析页面的编码方式,

通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8

response.setContentType("text/html;charset=UTF-8");

 

上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含            setCharacterEncoding的功能,所以在实际开发中只要编写      response.setContentType("text/html;charset=UTF-8");就可以解决页面输出中文乱码问题。

转载于:https://www.cnblogs.com/time-to-despair/p/9987831.html

### 关于 Java Web 中 WEB-INF 目录的作用 #### 安全隔离功能 `WEB-INF` 是 Java Web 应用中的一个重要目录,其主要作用之一是提供安全性保护。该目录及其子目录的内容无法被客户端直接访问[^1]。这意味着即使尝试通过 URL 访问 `WEB-INF` 下的资源(如 HTML 文件、JSP 页面或其他静态文件),服务器也会拒绝请求并返回 404 错误。 #### 配置管理 `WEB-INF` 目录通常包含重要的配置文件和依赖库。具体来说: - **web.xml**: 这是一个标准的部署描述符文件,用于定义 Servlet 映射、过滤器、监听器以及其他应用级别的设置[^2]。 - **lib 目录**: 存放当前 Web 应用所需的 JAR 文件。这些 JAR 文件仅对该应用可见,不会影响其他应用或全局环境。 - **classes 目录**: 存储编译后的 `.class` 文件以及相关的资源文件,例如属性文件或模板文件。 #### 资源映射与访问控制 尽管 `WEB-INF` 不允许直接从外部访问,但可以通过特定机制间接访问其中的资源。例如: - 使用 `web.xml` 或注解方式将某些资源映射到可公开访问的路径上。 - 利用 `Servlet` 动态读取 `WEB-INF` 下的文件内容,并将其作为响应数据发送给客户端[^5]。 以下是动态读取 `WEB-INF` 下文件的一个示例代码: ```java // 获取 WEB-INF 下指定文件的输入流 String filePath = "/WEB-INF/example.txt"; InputStream inputStream = getServletContext().getResourceAsStream(filePath); if (inputStream != null) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { String line; StringBuilder content = new StringBuilder(); while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } // 将文件内容写入 HTTP 响应 response.getWriter().write(content.toString()); } catch (IOException e) { throw new ServletException("Error reading file from WEB-INF", e); } } else { response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found in WEB-INF"); } ``` #### 其他关联目录 除了 `WEB-INF` 外,还存在另一个重要目录——`META-INF`。它主要用于存储元数据信息,比如上下文参数、持久化单元配置等[^4]。虽然两者都属于内部使用的特殊目录,但在实际开发中它们的功能定位有所不同。 --- ### 总结 综上所述,`WEB-INF` 在 Java Web 开发中有以下几个核心用途: 1. 提供安全屏障,防止敏感资源被非法访问; 2. 承载必要的配置文件(如 `web.xml`)和运行时依赖项(如 `lib` 和 `classes`); 3. 支持基于编程逻辑实现受控的资源暴露。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值