JSP学习笔记(5)_9大内置对象

时间:2022-12-26 23:34:06

JSP学习笔记(5)_9大内置对象

这篇来写关于JSP的9大内置对象的相关内容


1.sp内置对象:不用自己提前定义,直接拿来使用的对象,就是内置对象

jsp文件中的代码,都会出现在9大内置对象之后,因此能访问任何内置对象!


1.1 request对象(HttpServletRequet类的对象)

(1)获取http请求行,请求头,请求体的方法

示例:

1.请求行<br />
方式:<%=request.getMethod() %><br />
uri:<%=request.getRequestURI() %><br />

2.请求头<br />

Host:<%=request.getHeader("Host") %><br />
Accept:<%=request.getHeader("Accept") %><br />
accept-language:<%=request.getHeader("accept-language") %><br />
user-agent:<%=request.getHeader("user-agent") %><br />

3.获取其他信息<br />
客户端ip:<%=request.getRemoteAddr() %><br />
web应用在服务器真实地址:<%=request.getRealPath("/") %><br />


(2)设置编码码表和获取编码码表,可以参见关于中文乱码问题的文章

request.setCharacterEncoding()
request.getCharacterEncoding()


(3)获取传递的参数

示例:(获取传递过来的a和b的值)

获取参数<br />
a=<%=request.getParameter("a") %><br />
b=<%=request.getParameter("b") %><br />
(4)在范围内设置属性和获取属性(在一次请求中)

request.setAttribute(String key, Object value) 在request范围中设置一个属性

request.getAttribute(String key)从request范围中获取一个属性


1.2 repsone对象(响应内置对象)

由来:客户端传送给服务器的所有数据,都被封装进request内置对象中

服务器发送给客户端的所有数据,都会被先封装进response中,再从resposne中取出来,制作一个http响应

(1)getWriter(); 用于获取一个字符输出流,该流的起点是服务器,终点是客户端

(2)getOutputStream();上面getWriter获取的是字符流,这里获取的是字节流

注意:Out内置对象是一个字符输出流, getOutputStream()获取的是一个字节流,这两个流都能向客户端浏览器发送数据,方向是一致的, 所以它们2个的关系是互斥的!

如果非要使用response.getOutputStream()获取的字节流,必须让out失效

使用response.getOutputStream()目的就是为了给客户端发送2进制数据! 而不是发送html字符串(可以参见验证码案例的文章)


(3)sendRedirect():重定向

重定向:

A.客户端跳转

在客户端浏览器请求一个jsp页面中,jsp响应了302+location响应头,浏览器就会自动再发起第2次请求,去找location指明的资源,注意,第一次请求和第二次请求都是浏览器发出的请求,所以叫客户端跳转

B.重定向时,客户端地址栏会发生变化

重定向前后一共发起2次请求, 重定向前后的两个jsp页面中的request各不相同,所以重定向不能延长请求范围


转发:

A.服务器端跳转

B.客户端无法感知(地址栏不变!)转发前后一共历经了2个页面,作为客户端一共发起1次请求,所以转发前后的2个页面中的所有request都代表同一次请求


1.3 session

 session:会话,在jsp技术中,会话特指:一个用户从打开一个网站的任何一个页面开始,到关闭了该网站的所有页面为止,算一次jsp中的会话。

方法:

setAttribute() 在会话范围中设置属性

getAttribute() 从会话范围中获取属性

removeAttribute() 从会话范围中删除指定的属性


1.4 application

application: 应用对象,应用范围,从部署web应用开始,到卸载web应用为止,算一次应用范围。

销毁:只有,重新部署web应用,或者直接重启tomcat服务器,才能销毁application范围

方法:

application.setAttribute();

application.getAttribute();

application.removeAttribute();

application.getInitParameter(); //获取初始化参数

配置:

对一个web应用的任何配置,都应该在web.xml中进行配置

当web应用被部署的时候,tomcat会自动读取web应用的web.xml配置文件,并且把所有初始化参数自动封装进application对象中

注意:每次修改完web.xml,记得保存,而且保存以后,还要重新部署web应用



1.5 pageContext

pageContext: 页面范围, 从进入一个jsp页面开始,到该jsp页面执行完毕,算一次页面范围(只要跳转到另外一个页面了,那么页面范围绝对是一个新的,无论是转发还是重定向)


pageContext的其它方法:

通过pageContext可以获取4个范围中的数据:

findAttribute():寻找的顺序是从小到大,依次寻找,如果在小范围中已经找到数据了,就不会在继续寻找了。

pageContext.getAttribute()只在页面范围找,如果找不见,就直接返回null

只有pageContext才有findAttribute方法,其它3个范围的内置对象没有

pageContext可以获取其它8个内置对象:

pageContext.include就是java代码版本的动态包含

pageContext.forward() 就是java代码版本的转发


四大范围区别:

jsp中的4大范围,从小到大,依次是:

pageContext  < request  < session < application

页面范围     < 请求范围  < 会话范围 < 应用范围

除了pageContext以外,其它3个范围都可以在不同页面直接传递数据

选择原则:

选择的原则是,能用小的,就别用大的范围!因为小范围内的数据,占用内存的时间少


1.6 out

out:  字符输出流,起点服务器,终点客户端浏览器,意思就是out对象底层封装了套接字,能进行网络数据传输

out.clearBuffer(); 清空out缓冲区中的数据


1.7 exception

exception 要使用该内置对象,必须在jsp页面上添加一个指令元素

<%@ page isErrorPage=”true” %>

该内置对象中,存放了上一个jsp页面抛出的异常


1.8 page

page:代表当前jsp页面对象本身,就是this


1.9 config

config:用于获取jsp页面的初始化参数