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 />
(4)在范围内设置属性和获取属性(在一次请求中)
a=<%=request.getParameter("a") %><br />
b=<%=request.getParameter("b") %><br />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页面的初始化参数