JSP与Sevlet的相互通信方式(二)
Servlet:
在Servlet中,跳转在doGet或者doPost方法中实现。
<1>redirect实现页面跳转:
response.sendRedirect("/login.jsp");
方法的参数是相对路径,设定这个参数可以使页面跳转到任何页面,包括www.baidu.com等网络页面。
跳转后你可以发现地址栏发生了变化。
底层原理:使用redirect方式,实现页面跳转时由客户端完成的。该方法实现的时候,是通过改变HTTP协议的Header部分,对浏览器下达跳转命令。该方法可以接受绝对路径或者相对路径,如果是相对路径,会解析成绝对路径然后传给客户端。
传值要求:只能重写URL,或者用Session传值,而不能用request.setAttribute()传值。
<2>forward实现页面跳转:
RequestDispatcher dipatcher=request.getRequestDispatcher("/login.jsp");
dispatcher.forward(request,response);
只能跳转到本web应用中的页面。地址栏不发生变化
底层原理:forward是在服务器端做页面定向,然后再向客户端发送数据:服务器端先将数据输出到缓冲区,当(1)来自客户端的所有request处理完,并把所有数据输出到缓冲区(2)缓冲区满(3)在程序中调用缓冲区方法out.flush()或者response.flushbuffer(),三者满足其一时,web container才将缓冲区烦人内容传送给客户端。
传值要求:重写URL,或者用Session传值,或者用request.setAttribute()传值。
JSP:
<1>response.sendRedirect()和serlvlet的response.sendRedirect()一样
此语句前部允许使用out.flush,否则会抛出异常
如果跳转到不同主机,跳转后,此语句后面的语句继续执行,就像是新开了一个线程,但是此后对response的操作无效
如果跳转到相同的主机,此语句后面的语句执行完毕之后才发生跳转
跳转后地址栏发生变化
<2>response.setHeader("Location","")
此语句前不允许有out.flush(),如果有,不发生跳转
此语句后面的语句执行完成后才会跳转
跳转后浏览器地址栏变化
<3><jsp:forward page="" />
&nb
相关文档:
JSP中的COOKIE操作
Cookie概念:
Cookie的格式实际上是一段纯文本信息, 由服务器随着网页一起发送到客户端, 并保存在客户端硬盘中指定的目录的. 大家都传说Cookie会造成严重的安全威胁什么的, 其实不是这么回事情. 服务器读取Cookie的时候, 只能够读取到这个服务 ......
在不允许目录浏览的情况下 浏览器会先找到首页(默认为index.html /index.jsp...)
否则出错
因此 若首页被恶意更改 网站崩溃
解决方法:
更改默认启动页面:$tomcat/conf/web.xml最后位置
<welcome-file-list>
<welcome-file>index.html</welcome-file> ......
在网上看到一些帖子,总结了一些区别,可以从以下几个方面来看:
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容
再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状 ......
JSP与Servlet之间的会话跟踪方式有多个,注定他们的通信方式有多种。
下面先来看看4中会话跟踪方式:
一:Session
传送端:
HttpSession session=request.getSession();
sessio ......