request与response的做用

Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的所有信息。这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何做为查询字符串而附于URL后面的字符串或页面的<FORM>段中的HTML控件的值。也提供使用Secure Socket Layer(SSL)或其余加密通讯协议的受权访问,及有助于对链接进行管理的属性。
Response对象:用来访问服务器端所建立的并发回到客户端的响应信息。为脚本提供HTTP变量,指明服务器和服务器的功能和关于发回浏览器的内容的信息,以及任何将为这个域而存放在浏览器里新的cookie。它也提供了一系列的方法用来建立输出,例如无处不在的Response.Write方法。
cookie: Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个很是小的文本文件,它能够记录你的用户ID、密码、浏览过的网页、停留的时间等信息。 当你再次来到该网站时,网站经过读取Cookies,得知你的相关信息,就能够作出相应的动做,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登陆等等。
讲的通俗一点就是:
Request(中文“请求”的意思)类:能够理解为客户端向服务器端请求的信息,就是客户端向服务器端请求时,把本身的浏览器信息、HTTP变量和保存在客户端的Cookie告诉服务器,这样服务器端就能够根据这些信息判断①是谁请求的、②以前有没有请求过、③对应客户端的Session是什么等等。
Response(中文“反应、响应”的意思)接口:能够理解为服务器对客户端请求的响应,就是服务器接收到客户端的请求后,成生页面信息、Cookie(发到客户端后就保存在客户端)等发送到客户端。
Cookie(中文“饼干”,在这里不能这样理解了):就是保存在客户端上的一些信息,能够用来验证用户信息,提升用户响应速度等等。为什么不把它理解为:我把饼干放在家里,我想吃的时候就拿出来吃。呵呵!html

==============================================================java


response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
跳转方式浏览器

=============================================================服务器

运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可让你重定向到任何URL。
表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu);
Forward代码中的"/uu"则表明相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);cookie


(运用RequestDispatcher接口的Forward)方法
forward()没法重定向至有frame的jsp文件,能够重定向至有frame的html文件,
同时forward()没法在后面带参数传递,好比servlet?name=frank,这样不行,能够程序内经过response.setAttribute("name",name)来传至下一个页面。
重定向后浏览器地址栏URL不变。并发

只有在客户端没有输出时才能够调用forward方法。若是当前页面的缓冲区(buffer)不是空的,那么你在调用forward方法前必须先清空缓冲区。
"/"表明相对与Web应用路径jsp

RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);// 提交至http://localhost:8080/Test/ooo

RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);// 提交至http://localhost:8080/Test/ooo

RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个<servlet-name>)
rd.forward(request, response);// 提交至名为TestServlet的servlet

若是在<jsp:forward>以前有不少输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起做用,这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会致使重复提交
从http://localhost:8080/Test/gw/page.jsp中转发
 网站

<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp

(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工做,sendRedirect()能够带参数传递,好比servlet?name=frank传至下个页面,
同时它能够重定向至不一样的主机上,sendRedirect()能够重定向有frame.的jsp文件.ui

假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect("http://www.brainysoftware.com")发送至http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo,加密

sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);


(Meta Refresh)方法200
这种方法是由HTML提供的,Meta自己就是HTML标签。使用方法是:<meta http-equiv="refresh" content="5; url=http://www.dreamdu.com/" />
相应的java代码
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
--------------------------------------------------------------------------------------------------------------------------
使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.
--------------------------------------------------------------------------------------------------------------------------
request.setAttribute存的东西
只用经过方法2跳转 才能在新页取出来
--------------------------------------------------------------------------------------------------------------------------
redirect 会首先发一个response给浏览器, 而后浏览器收到这个response后再发一个requeset给服务器, 而后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.

forward 发生在服务器内部, 在浏览器彻底不知情的状况下发给了浏览器另一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经放了数据.

因此:
request.setAttribute存的东西

只用经过方法2跳转才能在新页取出来

相关文章
相关标签/搜索