赞
踩
内置对象是指在JSP页面中内置的不需要定义就可以在网页中总结使用的对象。
好处:
提高程序员的开发效率
内置对象特点
内置对象是自动载入的,因此它不需要直接实例化
内置对象是通过 Web 容器来实现和管理的
在所有的 JSP 页面中,直接调用内置对象都是合法的
JSP 规范中定义了九种内置对象,这里主要介绍前五种。
out 对象:负责管理对客户端的输出
request 对象:负责得到客户端的请求信息
response 对象:负责向客户端发出响应
session 对象:负责保存同一客户端一次会话过程中的一些信息
application 对象:表示整个应用的环境的信息
exception 对象:表示页面上发生的异常,可以通过它获得页面异常信息
page 对象:表示的是当前 JSP 页面本身,就像 Java 类定义中的 this 一样
pageContext 对象:表示的是此 JSP 的上下文
config 对象:表示此 JSP 的 ServletConfig
1 用来向客户端输出各种数据类型的内容
out.println();
2 对应用服务器上的输出缓冲区进行管理
out 对象一些常用的与管理缓冲区有关的函数:
close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出
clearBuffer():清除缓冲区里的数据,并且把数据写到客户端去
clear():清除缓冲区里的数据,但不把数据写到客户端去
getRemaining():获取缓冲区中没有被占用 的空间的大小
flush():输出缓冲区的数据。out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据
getBufferSize():获得缓冲区的大小
out管理缓冲区使用得很少,因为通常用来服务器默认的设置,而不需要手动管理。
当用户请求一个JSP页面时, Tomcat服务器将用户的请求封装在内置对象request中。
request 对象获取客户端得参数常用的方法:
String getParameter(String name) :根据页面表单组件名称获取请求页面提交数据
String[ ] getParameterValues (String name):获取页面请求中一个表单组件对应多个值时的用户的请求数据,如checkbox类(名字相同,但值有多个)的数据
Object getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回null。
Object [] getAttributes():返回request对象的所有属性的名字集合,结果集是一个Enumeration(枚举)类的实例。
setAttribute(String name, java.lang.Object obj) :用于设置request的参数值。
Cookie[] getCookies() :返回客户端的所有Cookie对象,结果是一个Cookie数组。
getParameter 返回的是String, 用于读取提交的表单中的值;
getAttribute 返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活
request对象函数
String getProtocol() 返回请求的协议类型及版本号
String getServerName() 返回接受请求的服务器主机名
int getServerPort() 返回服务器接受此请求所用的端口号
String getCharaterEncoding() 返回字符编码方式
void setCharacterEncoding() 设置请求的字符编码方式
int getContentLength() 返回请求体的长度(字节数)
response对象处理 JSP 生成的响应并发送给客户端。当服务器向客户端传送数据时,JSP容器创建response对象并将请求信息包装到进去;处理完请求后,response对象就会被销毁。
什么是重定向?
重定向:就是跳转到另一个页面
重定向方法为:
response.sendRedirect(目标页面路径);
responseTest2.jsp中的代码为
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="responseTest3.jsp"></jsp:forward>
</body>
</html>
responseTest3.jsp代码为
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎来到学生管理系统!!
</body>
</html>
区别:
1.从浏览器地址显示上来看
如上图,划线的网址
response.sendRedirect()直接跳转到目标的页面;JSP forward动作指令在当前的页面传参数跳转到目标页面。
2.从数据共享来看
结论:JSP forward动作指令比response.sendRedirect()共享更多数据
例子:
输入bass,点击”查询“按钮提交。
例子:
responseTest5.jsp代码为
response.sendRedirect(“responseTest6.jsp”);
注意:要写在<% %>中
3.从功能来看
Redirect能够定向同一个站点上的其他应用程序中,甚至其他站点的资源。
例如:
JSP forward动作指令,则不行。
4.从效率来看
JSP forward动作指令比redirect效率高。
用于页面之间传递数据的的方法。
url也可以达到这种效果,但传递的数据会显示在网址栏。
为了达到网址栏不会显示参数数据,我们可以使用隐藏表单,但是在浏览器中可以查看到源代码,也是不安全的。Cookie可以克服这两个难点。
Cookie 是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端浏览器如果设置为启用 Cookie,则会将这个小文本数据保存到某个目录下的文本文件内。下次登录同一网站,客户端浏览器则会自动将Cookie 读入之后,传给服务器端。一般情下,Cookie 中的值是以 key-value 的形式进行表达的
response.addCookie(Cookie c):通过该方法,将 Cookie 写入客户端
Cookie.setMaxAge(int second):通过该方法,设置 Cookie 的存活时间。参数表示存活
从客户端获取 Cookie 内容,主要通过以下方法:
Cookie[] request.getCookies():读取客户端传过来的 Cookie,以数组形式返回。
在读取数组之后一般需要进行遍历。
例子:
点击到达P2
Cookie 在 Web 编程中应用很广的原因:
Cookie 的值能够持久化,即使客户端机器关闭,下次打开还是可以得到里面的值
Cookie 可以帮助服务器端保存多个状态信息,但是不用服务器端专门分配存储资源
Cookie 可以持久保持一些和客户相关的信息
但是Cookie也不是绝对的安全!
盗取的方法:
利用跨站脚本技术,将信息发给目标服务器;为了隐藏 URL,甚至可以结合 Ajax(异步 Javascript 和 XML 技术)在后台窃取 Cookie
通过某些软件,窃取硬盘下的 Cookie。一般说来,当用户访问完某站点后,Cookie文件会存在机器的某个文件夹下,因此可以通过某些盗取和分析软件来盗取Cookie
利用客户端脚本盗取 Cookie。在 Javascript 中有很多 API 可以读取客户端 Cookie,可以将这些代码隐藏在一个程序(如画图片)中,很隐秘地得到 Cookie 的值
解决 Cookie 安全的方法
方法有以下几种
替代 Cookie
将数据保存在服务器端,可选的是 session 方案
及时删除 Cookie
要删除一个已经存在的 Cookie,有以下几种方法:
给一个 Cookie 赋以空置
设置 Cookie 的失效时间为当前时间,让该 Cookie 在当前页面的浏览完之后就被删除了
通过浏览器删除 Cookie
如在 IE 中,可以选择"工具"——“Internet 选项”—— “常规”,在里面点击"删除 Cookies",就可以删除文件夹中的 Cookie。
禁用 Cookie
很多浏览器中都设置了禁用 Cookie 的方法,如 IE 中,可以在"工具" ——“Internet 选项”——"隐私"中,将隐私级别设置为禁用 Cookie。
JSP的session对象就是跨页面保持,在访问网站时服务器端已经分配了一个session对象用户使用,对于同一个用户,不管在哪个页面,用户使用的都是同一个session。
session的另一个用处是可以保存登录信息。在登录成功后,用户的账号可以保存在session中,后面的各个页面都可以访问session的内容。
session是JSP的九大内置对象之一,它对应的类(接口)是javax.servlet.http.HttpSession,用户可以通过查找文档中的javax.servlet.http.HttpSession来了解session的API。
购物车需求
想象用户去购物超市买东西时,都会有一个购物车,购物车中包含了用户所需要购买的商品,用户可以将商品添加到购物车,也可将商品从购物车中取出或删除。用户可以推着购物车从这个专柜走到那个专柜,用户也不用担心别人的购物车里面的东西算到自己账上,这在生活中已经成为常识。
如何用session开发购物车
同一个用户使用的是同一个购物车,不同的用户使用的是不同的购物车。
在不同货架(页面)之间进行访问时,购物车中的内容可以保持
例子:
运行效果正常。由于ArrayList中的内容是可以保持顺序的,所以显示的结果按照添加进去的顺序。
针对session放入的提醒:
如果两次调用 setAttribute(String name,Object obj);并且 name 相同,那么后面放进去的内容将会覆盖以前放进去的内容
setAttribute(String name,Object obj);的第二个参数是 Object 类型,即可以放入 session的不仅仅是一些简单字符串,还可以是集合、数据结构对象都可以放入session。
移除session中的内容
使用session.removeAttribute(String name),将属性名为name的内容从session中移除,相当于在超市买东西时将货物从购物车中取出,放回货架上。
移除session中的全部内容
session.invalidate();函数可以将session中的所有内容移除。
移除之后,再看session中的内容,则返回null。
** 预防session内容丢失**
首先看内容丢失的例子:
再一次输入“红楼梦”
”西游记“丢失了。
原因:
因为网页每次运行都会有一个实例化ArrayList放在session里面,所以第一次提交的session和第二次的session是不一样的。
解决办法:
让他运行一次,那么就只有一个实例化ArrayList,其他时候使用session中的ArrayList。
将上面的失败例子改为
sessionId
session中的数据建议被同一个客户在网站的一次会话过程中共享。但是对于不用客户来说,每个人的session是不同的。服务器上session的分配情况如下图。
这里的session相当于购物车。
对于每一个session,服务器端都有一个sessionId标识它。session有一个函数session.getId(),通过这个函数可以得到当前session在服务端的ID。
application当做购物车。
对于一个Web容器而言,所有的用户共同使用一个application对象,服务器启动后会自动创建application对象,这个对象会一直保存,直到服务器关闭为止。
对应的类(接口)是:javax.servlet.ServletContext
application 对象的 API 主要有以下几个:
将内容放入 application
void application.setAttribute(String name,Object obj);
读取 application 中的内容
Object application.getAttribute(String name);
将内容从 application 中移除
void application.removeAttribute(String name);
由于用户的输入或者一些不可预见的原因,页面在运行过程中总是有一些没有发现或者是无法避免的异常现象出现。此时,可以通过 exception 对象来获取一些异常信息。exception,是 JSP 九大内置对象之一,它对应的类(接口)是:java.lang.Exception,可以通过查找文档中 java.lang. Exception 来了解 exception 的 API
page 对象是指向当前 JSP 程序本身的对象,有点像类中的 this。它是 java.lang.Object类的实例对象,可以使用 Object 类的方法。page 对象在 JSP 程序中的应用不是很广
config 对象是在一个 JSP 程序初始化时,JSP 引擎向它传递消息用的,此消息包括 JSP程序初始化时所需要的参数及服务器的有关信息。config 对应的接口是:javax.servlet.ServletConfig,该接口使用较少
pageContxt 是 javax.servlet.jsp.PageContext 类的实例对象。实际上,pageContext 对象提 供了对 JSP 页面所有的对象及命名空间的访问,pageContext 对象的方法可以访问除本身以外的 8 个 JSP 内部对象,还可以直接访问绑定在application 对象、page 对象、request 对象、 session 对象上的 Java 对象
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。