javaweb——HttpServletResponse对象学习

本文深入解析了Servlet中的HttpServletResponse对象,包括其如何实现客户端与服务器之间的通信,设置响应内容的方法,解决中文乱码问题的策略,以及如何使用各种方法来设置响应头。

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

一、HttpServletResponse解释

Servlet是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容。web服务器接收到客户端的Servlet请求后,如果检查到已经装载并创建了该Servlet的实例对象,则会创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表Http响应消息的HttpServletResponse对象,然后调用Servlet的service()方法,将请求和响应对象作为参数传递进去,这样客户端通过HttpServletRequest对象将请求发送给服务器,服务器通过HttpServletResponse对象将响应传递给客户端,达到通信的目的。

二、设置响应内容

通过response.getWriter(); 获取一个PrintWriter 对象。并使用println(),write()等等方法设置返回给浏览器的html内容。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
	//开启tomcat时自启动
	public void init(ServletConfig config) {
		System.out.println("init of Hello Servlet");
	}
	
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
		try {
			//向客户端发送回应
			PrintWriter pw = response.getWriter();
			pw.println("<h1>Hello Servlet<h1>");
			
		}catch(IOException e) {
			e.printStackTrace();
		}
		
	}
}

三、设置响应编码(解决中文乱码问题)

设置响应编码有两种方式

  1. response.setContentType(“text/html; charset=UTF-8”);
  2. response.setCharacterEncoding(“UTF-8”);

这两种方式都需要在response.getWriter()调用之前执行才能生效。

他们的区别在于

  1. response.setContentType(“text/html; charset=UTF-8”);

不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文。

  1. response.setCharacterEncoding(“UTF-8”);

仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
	
	public void init(ServletConfig config) {
		System.out.println("init of Hello Servlet");
	}
	
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
		try {
			response.setContentType("text/html;charset=UTF-8");
			PrintWriter pw = response.getWriter();
			pw.println("<h1>第n次Hello Servlet<h1>");
			
		}catch(IOException e) {
			e.printStackTrace();
		}
		
	}
}
四、负责向客户端(浏览器)发送响应头的相关方法

void addDateHeader(String name, long date) 添加指定名称的响应头和日期值
void addHeader(String name, String value) 添加指定名称的响应头和值
void addIntHeader(String name, int value) 添加指定名称的响应头和int值
boolean containsHeader(String name) 返回指定的响应头是否存在
void setHeader(String name, String value) 使用指定名称和值设置响应头的名称和内容
void setIntHeader(String name, int value) 指定 int 类型的值到 name 标头
void setDateHeader(String name, long date) 使用指定名称和值设置响应头的名称和内容

参考网址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值