TC608——Servlet中的Request和response请求响应技术

request和response

author:lxy 1.了解request和response request:请求对象 response:响应对象 请求和响应对象由服务器创建,每次请求都创建新的请求响应对象,响应结束,对象自动消失。 作用: request可以处理所有的Http请求,----获取Http请求信息 response可以处理所有的Http响应,----设置Http响应信息 补充:请求消息由 请求行、请求头、请求内容组成 2.request和response体系介绍 |-ServletRequest 接口 |-HttpServletRequest接口 |-RequestFacade (由服务器实现) |-ServletResponse接口 |-HttpServletResponse接口 |-ResponseFacade (由服务器实现) 补充:门面设计模式(服务器中有用到)-----也就是一种统一定义对外方法,内部具体对方法实现 代码片段: public RequestFacade(Request request){ this.request = request} 3.response对象 [1].response对象它是在service方法中接收到的 [2].response操作响应信息: 行---Response.setStatus(int index); //响应状态行的状态码 头---setHeader setDateHeader setIntHeader 正文-getOutputStream() -getWriter() 4.示例 4-1.通过response实现重定向,可以访问站内和站外资源 服务器端:状态码(302) 响应头(location) 代码片段: response.setStatus(302); //设置状态码为302 response.setHesder("location","/day8_4/myweb.html"); //设置响应头location的值 开发实际应用中完成的重定向: response.sendRedirect("/day8_4/myweb.html"); //这里相当于直接调用服务器中的封装方法 4-2.发送http头,控制浏览器定时跳转 response.setHeader("refresh","5;url=/day8_4/myweb.html"); //浏览器在指定时间后对向设定地址访问 实际开发中,很少在服务器端进行此操作,一般在浏览器端完成 代码片段:<meta http-equiv="refresh" content="5;url=http://www.192.168.1.25:8080/day8_4/myweb.html"> 扩展:在浏览器端显示 "--秒后跳转..."的动态展示效果 代码片段: <script type="text/javascript"> var time = 5; funcation change(){ var span = document.getElementById("s"); span.innerHTML=time; time--; setTimeout("change()",1000); } </script> <body onload="change();"> 页面会在<span id="s"></span>后跳转到... </body> 响应头 ----服务器解析 响应正文----浏览器解析 4-3.通过发送Http头,控制浏览器禁止缓存 有多种方式,对应于不同的浏览器器可能会采用不同的方式设定,可以同时使用,达到对所有浏览器都产生作用 response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setDateHeader("expires",-1); //设置有效时间,数字为一个代表时间的long型整数 5.在Servlet中要想操作响应正文,需要通过response对象获取到输出流进行操作 response.getWriter();-----ServletOutputStream response.getOutputStreaam();----PrintWriter 打印流的两个特点:可以设置自动刷新 可将信息原样输出 如果操作自定义信息,这时使用字符流 Servlet获取输出流在使用时注意事项: 同一时候,只能选择字符流或字节流一种,互相排斥;可以不关闭,由服务器关闭 Servlet可以完成显示操作 代码片段: response.setHeaader("Content-type","text/html;charset=utf-8"); out.println("<form action="#" method=‘post‘>"); 响应信息的乱码 response.setCharacterEncoding(String code); //设置响应正文编码 response.setContentType(String mimeType); //设置响应正文编码,同时告诉浏览器怎样解析 response.setHeader("content-Type","text/html;charset=utf-8"); 6.校验码 可以防止恶意注册,是一图片 补充:当浏览器缓存中存在当前页面的信息,当再次访问时将会走缓存,为了让浏览器不走缓存,获取新的页面信息,加入如下代码片段 function change(){ document.getElementById("im").src = "/day8_4/imageCode?time=" + new Date().getTime(); //即在原地址后面加上 当前时间 } 7.request对象 作用:用于获取Http请求信息 关于post和get 请求 1.post请求可以提交大数据 get只能提交1KB 2.post请求信息不会在浏览器上面显示(安全) get请求信息会在浏览器上显示(不安全) 3.post请求参数在请求正文中 get请求信息在资源路径上 [1]请求行操作 request.getMethod(); //获取请求方式 request.getProtocol(); //获取请求协议 如:HTTP://1.1 request.getRequestURI(); //返回URI request.getRequestURL(); //返回URL URI包含URL [2].获取客户机信息 request.getRemotAddr(); //获取客户机IP地址 request.getLocationAddress(); //获取服务器IP request.getContentPath(); //获取虚拟目录名称(工程名--不一定是工程名) 得到资源路径的一种方法: URI地址 - 虚拟目录名称 [3].获取请求头信息 String getHeader(String name); //获取一个请求头信息 Enumeration getHeaders(); //获取多个请求头信息 getDateHeader(); getIntHeader(); [4].获取请求参数[++] String getParameter(String name); String[] getParameterValues(String name); //checkbox getParameterNames(); //获取表单中所有的name值 Map<;String, String[]> getParameterMap(); //参数name作为key,输入或选定的值作为value value是一个 String[] 8.得到请求参数后的处理 [1].服务器端得到参数后通过Java代码实现校验--飞空校验、规则校验 String.trim().length()>0; [2].乱码处理 乱码原因:汉字在各个编码表中的编码值不一样 程序运行时页面中utf-8,tomcat服务器使用iso8859-1解码,Servlet获取到的就是乱码信息 页面编码服务器解码不一致, 解决方案:将得到的信息使用iso8859-1进行编码,再使用utf-8进行解码 代码片段:mag.getBytes("ios8859-1"); new String(mag.getBytes("iso8859-1"),"utf-8"); 代码示例: 页面 String s = "张三"; String code = URLEncoder.encode(s,"utf-8");//s-->utf-8 tomcat服务器 String msg = URLDecoder.decode(code,"iso8859-1"); 模拟解决--倒回去 String c = URLEncoder.encode(msg,"iso8859-1"); String m = URLDecoder.decode(c, "utf-8"); 或者在String类中直接解码 String username = request.getParameter("username"); usernamae = new String(username.getBytes("iso8859-1"),"utf-8"); 在post请求中 request。setCharacterEncoding(String charsetname); 9.request域对象 [1].生命周期:请求来时创建,响应结束时,request就销毁 [2].只要是域对象就有以下操作 setAttribute() getAttribute() removeAttrebute() [3].请求转发; 代码:RequestDispatcher rd = request.getRequestDispatcher("/second"); re.forward(request,response); 应用: 接收程序 String username = request.getParameter("username"); String passw = request.getParameter("passw"); if("tom".equals(username.trim()) && "123".equals(passw.trim())){ request.setAttribue("loginmessage", "登录成功"); }else{ request.setAttribue("loginmessage", "登录失败"); } //请求转发 RequestDispatcher rd = request.getRequestDispatcher("/second"); rd.forward(request, response); 处理程序 respons.setContentType("text/html;charset=utf-8"); String message = (String) request.getAttribute("loginmessage"); response.getWriter().write(message); 执行完forward或RendRedirect后 服务器会清空缓冲区 执行和缓冲区有关的操作无效 10.请求转发和重定向的区别 [1].请求转发在服务器内跳转,只有一次请求一次响应 重定向两次请求两次响应 [2]........内部操作,不会影响地址栏路径 重定向地址栏变化 [3]........只能在当前站点内跳转 重定向可以跳出站内 [4]........由request发起request.getRequestDispatcher("").forward(...,...); 重定向response.sendRedirect(); [5]........"/"代表当前工程,服务器端路径 重定向"/"代表服务器根目录,客户端路径 [6]........存在request域 从定向不存在request域 选择时看是否需要数据共享
时间: 2024-10-14 23:19:07

TC608——Servlet中的Request和response请求响应技术的相关文章

servlet中的request和response

利用3到4天的时间,把servlet中的request和response对象视频看了一遍.看完之后,自己总结出来了一些知识点. 学习一个对象的三部曲:首先查看API文档,了解以及掌握对象的一些常用的方法用法:其次就是解决一些中文乱码之类的问题:最后就是该对象的应用了. 好了,先来说说response对象吧. 1.解决用outputStream输出中文的乱码问题. //1.程序的数据以什么码表输出了,程序就要控制浏览器以什么码表打开 response.setHeader("content-type

servlet中的request与response

在b/s架构中,有request浏览器的请求,也有response的服务器反馈.底层是tcp/ip协议,应用层是http协议.在tomcat服务器中,版本6使用的http1.1版本协议.服务器发出request请求,在请求中有可能加载get和post请求(doget请求,是放在URL中可以使用getparmeter进行解析,因为tomcat把每一个网页请求看做一个对象,所以是面向对象(HttpServletRequest)进行封装,并有doget和dopost进行 对应的解析.主要的API如下:

Struts学习笔记(三)struts2中获得request、response和session的三种方法

struts2中获得request.response和session的三种方法   (1)非IoC方式 方法一:使用org.apache.struts2.ActionContext类,通过它的静态方法getContext()获取当前Action的上下文对象. ActionContext ctx = ActionContext.getContext(); ctx.put("liuwei", "andy"); //request.setAttribute("l

Servlet中的request对象、重定向和转发的区别(6)

1.这里所说的request对象指的是HttpServletRequest对象,它代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,我们通过request对象调用里面的方法,可以获得客户发送给web服务器的各种信息. 2.request的常用方法 (1)获得客户机信息     getRequestURL方法返回客户端发出请求时的完整URL.(                                例如:url:http://localh

【报文】理解HTTP协议的Request/Response(请求响应)模型

[报文]理解HTTP协议的Request/Response(请求响应)模型 系列目录 [简介]"请求/响应"模型 http://www.cnblogs.com/engraver-lxw/p/7550514.html [原理]理解HTTP协议的Request/Response(请求响应)模型 http://www.cnblogs.com/engraver-lxw/p/7550691.html [报文]理解HTTP协议的Request/Response(请求响应)模型--当前 http:/

struts2中获取request、response,与android客户端进行交互(文件传递给客户端)

用struts2作为服务器框架,与android客户端进行交互需要得到request.response对象. struts2中获取request.response有两种方法. 第一种:利用ServletActionContext的静态方法 Struts2 利用ServletActionContext类来维护Servlet对象,ServletActionContext利用ThreadLocal来维护 不同线程的Servlet对象,因此可以使用ServletActionContext类获取,这种方法

Django中的Request和Response

接触Django这么久了,从来没有好好学习关于Django中的Request和Response对象.借着文件上传下载的相关工作,现在总结一下也不错. 当一个页面请求过来,Django会自动创建一个Request对象,匹配URLconf中对应的view方法,并将这个Request对象作为第一个参数传递给view方法.而view方法会经过一系列操作之后,返回一个Response对象,返回给客户端. 具体的Request对象的属性(attribute)有很多(除了seesion都说只读属性): Htt

LoadRunner中取Request、Response

LoadRunner中取Request.Response LoadRunner两个“内置变量”: 1.REQUEST,用于提取完整的请求头信息. 2.RESPONSE,用于提取完整的响应头信息. 响应头信息用可用其它方式实现,但请求头信息还真不知道可以这样拿到.太隐蔽了吧! 注意,这两个变量仅在请求前使用web_save_header注册使用.示例如下: Action(){ web_set_max_html_param_len("262144"); // 默认最大长度为256 web_

[转]Django中的Request和Response

接触Django这么久了,从来没有好好学习关于Django中的Request和Response对象.借着文件上传下载的相关工作,现在总结一下也不错. 当一个页面请求过来,Django会自动创建一个Request对象,匹配URLconf中对应的view方法,并将这个Request对象作为第一个参数传递给view方法.而view方法会经过一系列操作之后,返回一个Response对象,返回给客户端. 具体的Request对象的属性(attribute)有很多(除了seesion都说只读属性): Htt