Coin163

首页 > Servlet——HttpServletResponse的常见应用

Servlet——HttpServletResponse的常见应用

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

request和response对象即代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

在这里首先介绍一下HttpServletResponse的常见应用。

=============================================================================================

有些应用之前已经见过。

关于使用HttpServletResponse设置HTTP响应头的应用例子,比如:

1.页面跳转

2.Refresh自动刷新

3.Content-Disposition文件下载

4.设置缓存页面

这些可以参考【Servlet——简单用户登录实例+http协议解析】文章的最后

下面进行一些简单的总结

=============================================================================================

向客户端传输内容

两种方法:

getWriter()
getOutputStream()

【区别】:

getWriter()用于向客户机回送字符数据

getOutputStream()返回的对象,可以回送字符数据,也可以回送字节数据。

【如何选择】:

如果我们是回送字符数据,则使用PrintWriter对象,效率高

如果我们是回送字节数据(binary data),则只能使用OutputStream对象。

【需要注意的是:这两个流不能同时使用!同时使用会报服务器500错误!】
==============================================================================================

请求重定向以及实现向下个页面传输数据

这里先解释一个概念:

请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

这个概念要和后面讲到的请求转发区别开来。

比如我们现在要实现这样一个需求:当用户登录成功后,把该用户名字显示在登录成功之后的主页面。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

【方法1】

通过java基础,使用static静态全局变量即可

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

【方法2】

sendRedirect()方法自带参数,可以将信息传递给下一个页面

比如:

sendRedirect(“welcome?uname=gavin”);
优点:传递信息的速度比较快
缺点:它只能传递字符串,而不能传递一个对象
注意点:
(1)welcome代表你要跳转的那个servlet的url
(2)servlet url名和变量名之间有问号?
(3)如要传递两个以上的值,它们间要用&号分开;比如:

sendRedirect(“welcome?uname=shunping&pass=ok”)
(4)如果传递的是中文,那你将得到乱码,需处理一下
即基本格式为:

response.sendRedirect(“servlet的地址?参数名=参数值&参数名=参数值…”)

参数值只能是字符串,参数名应当使用字母组合,不使用中文

接收页面获取这个参数的方法:

String参数 = request.getParameter(“参数名”);

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

【方法3】

使用session传递(后面会详讲)

这种方法的好处在于它不但可以传递字符串,也可以传递一个对象

在登录处理部分创建session对象,将User作为session的一个attribute:

// session 可以传递对象
User user = new User();
user.setName(username);
user.setPwd(password);
// session很强大,可以传递多个对象,理论上没有限制
request.getSession().setAttribute("userobj", user);

在接收主页面,在session中取出这个User

User user = (User) request.getSession().getAttribute("userobj")
==============================================================================================

总结
1、通过HttpServletResponse回送的http头,可以控制浏览器的行为。
2、通过HttpServletResponse提供的函数,可以完成相应的功能(比如文件下载,生成随机验证码等)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

需要注意的

1.getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOutputStream、PrintWriter对象。
2.在同一个response对象中,getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
3.Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当做响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端
4.Servlet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。

原文

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。 request和response对象即代表请求和响应,那我们要获取客户机提交过来

------分隔线----------------------------
相关推荐