Jsp脚本中的9大内置对象(都是_jspService()方法中的形参,或者是局部变量):
application:对应javax.servlet.ServletContext实例,代表jsp所属的web应用本身,用于jsp页面或者Servlet之间交换信息
config:对应javax.servlet.ServletConfig实例,代表Jsp的配置信息,(这玩意基本用不到)
exception:对应java.lang.Throwable实例,代表其他页面的错误信息和异常,只有page编译指令中的isErrorPage为true时
该对象才能用
out:对应javax.servlet.jsp.JspWriter实例,代表jsp页面的输出流,用于输出页面内容,形成HTML页面
page:代表该页面本身,没有什么鸡用(主要就是Servlet中的this)
pageContext:对应javax.servlet.jsp.PageContext实例,代表jsp页面上下文,可以访问页面中的共享内容
request:对应javax.servlet.http.HttpServletRequest实例,该对象封装了一次请求,客户端的请求参数都被封装到这里
这玩意太重要了,一般获取客户端的请求参数都必须使用该对象
response:对应javax.servlet.http.HttpServletResponse实例,代表服务器对客户端的响应,一般很少使用这个来输出响应
内容,输出内容还是out比较好,这个对象一般都用在重定向
session:对应javax.servlet.http.HttpSession实例,代表一次对话。当客户端浏览器与服务器连接时,会话开始
当客户端关闭浏览器的时候,会话结束。
application对象(代表Web应用本身):
在整个Web应用的多个jsp,Servlet之间共享数据
访问Web应用的配置参数
在web.xml使用context-param配置参数(他有两个子元素)
param-name:配置Web参数名
param-value:配置Web参数值
config对象:
代表当前jsp配置信息
主要方法:getServletName() 返回的都是jsp
exception对象:
代表jsp标本中产生的错误和异常,是jsp页面异常的一部分。
当然page编译指令中isErrorPage要为true
pageContext对象:
代表页面的上下文,主要访问的jsp之间的共享数据。就是可以访问那四个范围内的变量
getAttribute(String name):获取page范围内的name属性
getAttribute(String name,int scope):获取指定范围内的name属性值
PageContext.PAGE_SCOPE:对应page范围
PageContext.REQUEST_SCOPE:对应request范围
PageContext.SESSION_SCOPE:对应session范围
PageContext.APPLICATION_SCOPE:对应application范围
当然这些范围对setAttribute()方法同样适用。
4个生存范围对应的整型变量:
1:对应page生存范围
2:对应request生存范围
3:对应session生存范围
4:对应application生存范围
request对象(重点):
获取请求参数的重要途径。可代表本次请求范围,还可用于操作request范围的属性
客户端发送请求参数的两种情况:
GET方式的请求:也是默认form请求,一般来说创书的数据量较小,而且对于一些重要信息来说,安全性不是很高
POST方式的请求:大多说用于提交表单,数据传送量比较大,安全性比较高,信息都被封装起来了。
获取请求头信息:
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
//获取每个请求的值
out.println(headerName + "-->" + request.getHeader(headerName) + "<br/>");
}
操作request范围的属性:
setAttribute(String attName,Object attValue):attValue设置为request的范围
Object getAttribute(String attName):获取request范围的属性
执行forward和include:
request.getRequestDispatcher(String path),path就是希望forward和include的目标路径
该对象提供两种方法:
forward(request,response);执行forward
include(request,response);执行include
如:
request.getRequestDispatcher("/a.jsp").include(request,response);
request.getRequestDispatcher("/a.jsp").forward(request,response);
注意:
使用request的getRequestDispatcher(String path)方法时,该path字符串必须以斜线开头
response对象:
代表客户端的响应,一般都是输出一些比较猥琐的内容,比如位图,PDF文档等,还可以使用response来重定向,以及向客户端增加Cookie
作用:
1、response响应生成非字符响应(getOutputStream()该方法返回响应输出字节流)
2、重定向
与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次的请求不在同一个request范围内,左移发送一次的请求参数和request范围内的属性全部丢失。
重定向会丢失所有的请求参数,使用重定向动作时,地址栏URL会变成重定向目标的URL
语法:response.senRedirect("path");
注意:
重定向会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址在按回车的效果是一样的,即发送了第二次请求。
forwrad(转发)和redirect(重定向)对比:
1、前者执行之后还是上一次请求,后者生成了第二次请求。
2、前者的目标页面可以访问原请求的请求参数,因为依然是一次请求,请求参数和request的范围内的属性全部都在。后者不能访问原来的请求参
数,因为这是第二次请求,原请求的请求参数和request范围内的属性全部丢失
3、前者请求的URL不会改变,后者变为重定向的目标URL,就是URl会改变。
Cookie和Session强行分析:
Cookie用于网站记录客户的某些信息,下一次登录就可以获取客户的相关信息
Cookie和session的不同在于:
前者会跟随浏览器的关闭而失效,后者会一直存放在客户端机器上,除非超过了Cookie生命期限,或者你手动的清除Cookie记录
增加Cookie也是使用response内置对象完成(void addCookie(Cookie cookie)来增加Cookie)
步骤如下:
创建Cookie实例对象,Cookie的构造器Cookie(String name,String value)
设置Cookie的生命期限,就是该Cookie在多长时间内有效
向客户端写Cookie
注意:
使用Cookie对象必须设置他的生命期限,否则Cookie将会跟随浏览器的关闭而自动关闭。
如果需要Cookie为中文,就要借助java.net.URLEncoder先对中文字符串进项编码。
Session对象:
代表一次用户会话(从浏览器连接服务器开始,到浏览器和服务器断开为之,这是一次会话)
通常用于跟踪用户的会话信息,如判断用户是否登录,购物车跟踪用户购买商品等
session对象是HttpSession的实例,下面是两个常用的方法:
setAttribute(string)
注意:
session机制通常用于保存客户端的状态信息,这些信息需要保存在web服务器的硬盘上,所以要求session里的属性值
是可序列化的,否则将会引起不可序列化的异常。而且通常只把用户会话相关的信息放在session范围内,不要仅仅为了连个页面交换信息
随意的把信息放在信息内。这样不好,这样有瑕疵,这样很铁头娃。
没错,我就是铁头娃。