Java Web JSP内置对象

1.认识JSP内置对象

内置对象是指在JSP页面中内置的不需要定义就可以在网页中总结使用的对象。
好处:
提高程序员的开发效率
内置对象特点
内置对象是自动载入的,因此它不需要直接实例化
内置对象是通过 Web 容器来实现和管理的
在所有的 JSP 页面中,直接调用内置对象都是合法的

JSP 规范中定义了九种内置对象,这里主要介绍前五种。
out 对象:负责管理对客户端的输出
request 对象:负责得到客户端的请求信息
response 对象:负责向客户端发出响应
session 对象:负责保存同一客户端一次会话过程中的一些信息
application 对象:表示整个应用的环境的信息
exception 对象:表示页面上发生的异常,可以通过它获得页面异常信息
page 对象:表示的是当前 JSP 页面本身,就像 Java 类定义中的 this 一样
pageContext 对象:表示的是此 JSP 的上下文
config 对象:表示此 JSP 的 ServletConfig

2.out对象

2.1 out 对象的作用

2.1.1用来向客户端输出各种数据类型的内容

out.println();

2.1.2 对应用服务器上的输出缓冲区进行管理

out 对象一些常用的与管理缓冲区有关的函数:
close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出
clearBuffer():清除缓冲区里的数据,并且把数据写到客户端去
clear():清除缓冲区里的数据,但不把数据写到客户端去
getRemaining():获取缓冲区中没有被占用 的空间的大小
flush():输出缓冲区的数据。out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据
getBufferSize():获得缓冲区的大小

out管理缓冲区使用得很少,因为通常用来服务器默认的设置,而不需要手动管理。

3.request对象

3.1作用

request代表了客服端的请求信息,主要是用来获取客户端的参数和流。最主要就是它能够获取客户端的基本信息,主要有以下几种方法。
String getMethod():得到提交方式
String getRequestURI():得到请求的 URL 地址
String getProtocol():得到协议名称
String getServletPath():获得客户端请求服务器文件的路径
String getQueryString():得到 URL 的查询部分,对 post 请求来说,该方法得不到任何信息
String getServerName():得到服务器的名称
String getServerPort():得到服务器口号
String getRemoteAddr():得到客户端的 IP 地址

request 对象获取客户端得参数常用的是通过 2 个方法:
String getParameter(String name):获得客户端传送给服务器的 name 参数的值。当传递给此函数的参数名没有实际参数与之对应时,则返回 null
String[] getParameterValues(String name):以字符串数组的形式返回指定参数所有值

4.response对象

4.1.什么是response对象?

response 与 reuqest 是一对相对应的内置对象,response 可以理解为客户端的响应,request可以理解为客户端的请求,二者所表示范围是相对应的2 个部分,具有很好的对称性。

4.1利用response对象进行重定向

4.1.1什么是重定向?

重定向:就是跳转到另一个页面

4.1.2重定向方法

重定向方法为:
response.sendRedirect(目标页面路径);
例子:
在这里插入图片描述
点击提交,跳转到如下:

在这里插入图片描述
在这里插入图片描述

4.1.3response对象进行重定向VS JSP forward动作指令!!!

我们可以将responseTest2.jsp中的代码改为
在这里插入图片描述
区别:
1.从浏览器地址显示上来看
如上图,划线的网址
response.sendRedirect()直接跳转到目标的页面;JSP forward动作指令在当前的页面传参数跳转到目标页面。
2.从数据共享来看
结论:JSP forward动作指令比response.sendRedirect()共享更多数据
JSP forward动作指令
例子:
在这里插入图片描述
输入bass,点击”查询“按钮提交。
在这里插入图片描述

在这里插入图片描述
response.sendRedirect()
例子:
只需要将responseTest5.jsp代码改为
response.sendRedirect(“responseTest6.jsp”);
注意:要写在<% %>中
在这里插入图片描述
3.从功能来看
Redirect能够定向同一个站点上的其他应用程序中,甚至其他站点的资源。
例如:
在这里插入图片描述
JSP forward动作指令,则不行。

4.从效率来看
JSP forward动作指令比redirect效率高。

5.Cookie操作

5.1什么是Cookie?

用于页面之间传递数据的的方法。
url也可以达到这种效果,但传递的数据会显示在网址栏。
为了达到网址栏不会显示参数数据,我们可以使用隐藏表单,但是在浏览器中可以查看到源代码,也是不安全的。Cookie可以克服这两个难点。

Cookie 是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端浏览器如果设置为启用 Cookie,则会将这个小文本数据保存到某个目录下的文本文件内。下次登录同一网站,客户端浏览器则会自动将Cookie 读入之后,传给服务器端。一般情下,Cookie 中的值是以 key-value 的形式进行表达的

5.2写Cookie时主要用的以下方法

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

6.session对象

JSP的session对象就是跨页面保持,在访问网站时服务器端已经分配了一个session对象用户使用,对于同一个用户,不管在哪个页面,用户使用的都是同一个session。
session的另一个用处是可以保存登录信息。在登录成功后,用户的账号可以保存在session中,后面的各个页面都可以访问session的内容。
session是JSP的九大内置对象之一,它对应的类(接口)是javax.servlet.http.HttpSession,用户可以通过查找文档中的javax.servlet.http.HttpSession来了解session的API。

6.1利用session开发购物车

6.1.1购物车需求

想象用户去购物超市买东西时,都会推一个购物 车,购物车中包含了用户所需要购买的商品,用户可以将商品添加到购物车,也可将商品从购物车中取出或删除。用户可以推着购物车从这个专柜走到那个专柜,用户也不用担心别人的购物车里面的东西算到自己账上,这在生活中已经成为常识。

6.1.2如何用session开发购物车

同一个用户使用的是同一个购物车
不同的用户使用的是不同的购物车。否则,别人买的东西就会算到自己的账上
在不同货架(页面)之间进行访问时,购物车中的内容可以保持
例子:
在这里插入图片描述
在这里插入图片描述
运行效果正常。由于ArrayList中的内容是可以保持顺序的,所以显示的结果按照添加进去的顺序。
针对session放入的提醒:
如果两次调用 setAttribute(String name,Object obj);并且 name 相同,那么后面放进去的内容将会覆盖以前放进去的内容
setAttribute(String name,Object obj);的第二个参数是 Object 类型,即可以放入 session的不仅仅是一些简单字符串,还可以是集合、数据结构对象都可以放入session。

6.2session的其他API

6.2.1 移除session中的内容

使用session.removeAttribute(String name),将属性名为name的内容从session中移除,相当于在超市买东西时将货物从购物车中取出,放回货架上。

6.2.2 移除session中的全部内容

session.invalidate();函数可以将session中的所有内容移除。
移除之后,再看session中的内容,则返回null。

6.2.3 预防session内容丢失

首先看内容丢失的例子:
在这里插入图片描述
再一次输入“红楼梦”
在这里插入图片描述
”西游记“丢失了。
原因:
因为网页每次运行都会有一个实例化ArrayList放在session里面,所以第一次提交的session和第二次的session是不一样的。
解决办法:
让他运行一次,那么就只有一个实例化ArrayList,其他时候使用session中的ArrayList。
将上面的失败例子改为

在这里插入图片描述
在这里插入图片描述
6.2.4 sessionId
session中的数据建议被同一个客户在网站的一次会话过程中共享。但是对于不用客户来说,每个人的session是不同的。服务器上session的分配情况如下图。
在这里插入图片描述
这里的session相当于购物车。
对于每一个session,服务器端都有一个sessionId标识它。session有一个函数session.getId(),通过这个函数可以得到当前session在服务端的ID。
在这里插入图片描述
在这里插入图片描述

7.application对象

在这里插入图片描述

7.1基本概念

application想当于购物车。
对于一个Web容器而言,所有的用户共同使用一个application对象,服务器启动后会自动创建application对象,这个对象会一直保存,直到服务器关闭为止。
对应的类(接口)是:javax.servlet.ServletContext

7.2有关函数

application 对象的 API 主要有以下几个:
将内容放入 application
void application.setAttribute(String name,Object obj);
读取 application 中的内容
Object application.getAttribute(String name);
将内容从 application 中移除
void application.removeAttribute(String name);

7.3例子

在这里插入图片描述

8.其他对象

8.1 exception 对象

由于用户的输入或者一些不可预见的原因,页面在运行过程中总是有一些没有发现或者是无法避免的异常现象出现。此时,可以通过 exception 对象来获取一些异常信息。exception,是 JSP 九大内置对象之一,它对应的类(接口)是:java.lang.Exception,可以通过查找文档中 java.lang. Exception 来了解 exception 的 API

8.2 page 对象

page 对象是指向当前 JSP 程序本身的对象,有点像类中的 this。它是 java.lang.Object类的实例对象,可以使用 Object 类的方法。page 对象在 JSP 程序中的应用不是很广

8.3 config 对象

config 对象是在一个 JSP 程序初始化时,JSP 引擎向它传递消息用的,此消息包括 JSP程序初始化时所需要的参数及服务器的有关信息。config 对应的接口是:javax.servlet.ServletConfig,该接口使用较少

8.4 pageContext 对象

pageContxt 是 javax.servlet.jsp.PageContext 类的实例对象。实际上,pageContext 对象提 供了对 JSP 页面所有的对象及命名空间的访问,pageContext 对象的方法可以访问除本身以外的 8 个 JSP 内部对象,还可以直接访问绑定在application 对象、page 对象、request 对象、 session 对象上的 Java 对象

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页