Web复习和cookie
服务器端的servlet程序中service();
根据请求调用doget,dopost 产生应答信息
客户端浏览器向web服务器发送请求httpServletRequest对象
(1)请求行:get/demo/test? username=xxxx HTTP/1.1
(2)请求消息头;getHeader(“头字段的名称“)
(3)getParameter(”参数名“)参数
(4)大量的消息实体的内容 getInputStream()。。字节
getReader()。字符
流对象.read()
response对象
(1)状态行 HTTP/1.1200 OK
//一般不需要自己去设置
response.setStatus(HTTPServletResponse.SC_OK);
(2)相应消息的消息头
Content-Type
response.setContentType("text/html");
Refresh:
response.setHeader("Refresh","2;URL");//可以是也相对路径,
也可以是绝对看路径
浏览器不缓存Math.redome()方法的实现
(3)消息实体内容的设置
通过输出流对象
response.getOutputStream() 字节输出流对象
response.getWriter()字符输出流对象
告诉页面怎样显示
(4)创建正文
getoutputStream和getWriter方法
l getOutputStream方法用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文。
l getWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。
l getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
l getOutputStream方法返回的字节输出流对象的类型为ServletOutputStream,它可以直接输出字节数组中的二进制数据。
l getWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出流对象后返回,PrintWriter对象可以直接输出字符文本内容。
l Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
l Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
(5)乱码分析
浏览器
java程序中:中文字符-unicode
字符的输出流out.println();按照某种字符集的编码方式的转换成字节
数组
浏览器:字节数组-转换成字符
(6)输出缓冲区
response.setBufferSize(1024);
//实际获取中要比你设置的大
int len=response.getBufferSize()
if(itn i=0;i<len;i++){
oout.print("w");
}
// out.flush();
//out.close();
(7)下载
myHtm3
(8)请求对象转发的比较
l RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
l 如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
l 调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
l HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
l RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
l 无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。
(9)会话
第一次访问web服务器登录的操作输入账号:xxx密码:123—>servlet
身份验证一下是否为合法用户
产生会话id标示,不同会话id
购物:把某个商品加入到购物车----->要知道是谁请求的结果xxx加入
的---->必须记住
结账:--->xxx 结账
cookie
第一次访问web服务器时没有cookie,产生一个相应的cookie 封装在响
应消息中再发送回客户端浏览器,cookie信息保存在客服端上以后客户
端浏览器在向我们的web服务器提交请求cookie