Servlet自学第16讲:HttpServletResponse对象详解

来源:互联网 发布:vb.net asp网站实例 编辑:程序博客网 时间:2024/05/21 10:18

getWrite和getOutputStream方法的区别

用户没发出一次http请求,都会创建一个代码请求的对象和代表响应的对象。
HttpServletResponse中getWriter()与getOutputStream()的区别:

  1. getWriter() 用于向客户机回送字符数据
  2. getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据),例如:
OutputStream os=response.getOutputStream();os.write("hello,world".getBytes());

我们怎么选择呢:如果我们是回送字符数据,则使用 PrintWriter对象 ,效率高;如果我们是回送字节数据(binary date) ,则只能使用 OutputStream 这两个流不能同时使用.
比如:
OutputStream os=response.getOutputStream();
os.write(“hello,world”.getBytes());
PrintWriter out=response.getWriter();
out.println(“abc”);
就会报错:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
不能同时使用printWriter和outputstream的原因
这里写图片描述
Web服务器会自动检查并关闭流
从该图,我们也可以看出. 为什么我们没有主动关闭流,程序也没有问题的原因.
当然:你主动关闭流,更好。

sendRedirect()方法

该方法不仅可以实现重定向,而且还能携带数据给下一个页面,思考,使用所学知识实现数据的携带:

  1. 使用static方法
  2. 使用sendRedirect()方法(但是不能传递对象)
response.sendRedirect("/UsersManager/MainFrame?uname="+username+"&pwd="+password);

说明:
基本格式:
response.sendRedirect(“servlet的地址?参数名=参数值&参数名=参数值…”),这就相当于又执行了一次get的http请求。
参照值是String , 参数名应当使用 字母组合。
在接受数据的Servlet中: String 参数=request.getParameter(“参数名”)
3. 使用session 传递[后面讲]
这里,我们先预热.
A.传递字符串
放入session :

request.getSession.setAttribute("loginUser",username); 

取出session 在JSP中通过session取出

request.getSession.getAttribute("loginUser");

B.传递对象

User user= new User();user.setName(“xiaoli”);user.setPassWord(“123”);

放入session

request.getSession.setAttribute("userObj",userObj); 

取出session

User user=(User)request.getSession.getAttribute(“userObj”);

其中session在tomcat中相当于一张可供tomcat中web应用共享的表,如图:
这里写图片描述

0 0
原创粉丝点击