JSP内置对象
1 认识内置对象
内置对象:在JSP页面中内置的不需要定义就能在网页中直接使用的对象
预定义的原因:因为这些内置对象有些能够存储参数,有些能够提供输出,还有些能提供其他的功能,JSP程序员一般情况下使用这些内置对象的频率比较高
2 内置对象特点
1,内置对象是自动载入的,不需要实例化
2,内置对象是通过Web容器来实现和管理的
3,在所有JSP页面中,直接调用内置对象都是合法的
3 内置对象(5/9,4/9)
out对象:负责管理对客户端的输出
request对象:负责得到客户端的请求信息
response对象:负责向客户端发出响应
session对象:负责保存同一客户端一次会话过程中的一些信息
application 对象:表示整个应用的环境的信息
exception对象:表示页面上发生的异常,可以通过它获得页面异常信息
page对象:表示的是当前JSP页面本身,就像Java 类定义中的this一样
pageContext对象:表示的是此JSP的上下文
config 对象:表示此JSP的 ServletConfig
3.1 out对象
out对象,对应的类型是
javax.servletjsp.JspWriter
out对象的作用
用来向客户端输出各种数据类型的内容
对应用服务器上的输出缓冲区进行管理
out输出的主要有2个方法
void print()
void println()
out 对象一些常用的与管理缓冲区有关的函数
void close():关闭输出流,从而可以强制终止当前页面的剩奈部分向浏览器输出
void clearBufer():清除缓冲区里的数据,并目把数据写到客户端去
void clear():清除缓冲区里的数据,但不把数据写到客户端去
int getRemaining(): 获取缓冲区中没有被占用的空间的大小
void flush():输出缓冲区的数据。out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据
intgetBufferSize():获得缓冲区的大小
3.2 request对象
request对应类型是
javax.servlet.http.HttpServletReguest
request包含的方法
String getMethod():得到提交方式
String getRequestURl):得到请求的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):以字符串数组的形式返回指定参数所有值
提交方式:<%=request.getMethod() %><br>
请求地址:<%=request.getRequestURI() %><br>
协议名称:<%=request.getProtocol() %><br>
请求路径:<%=request.getServletPath() %><br>
传值:<%=request.getQueryString() %><br>
服务器名称:<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort()%><br>
客户端的IP地址:<%=request.getRemoteAddr() %><br>
3.3 response对象
response与 reuqest 是一对相对应的内置对象
response 可以理解为客户端的响应,request可以理解为客户端的请求,二者所表示范围是相对应的2个部分,具有很好的对称性。
response 对应的类(接口)是:javax.servlet.http.HttpServletResponse,可以通过查找文档中javax.servlet.http.HttpServletResponse来了解response的APl
利用response 对象进行重定向重定向:就是跳转到另一个页面
重定向方法为
response.sendRedirect(目标页面路径);
还可以用:
<jsp:forward page=“”></jsp:forward>
<form action="response.jsp">
用户名:<input type="text" name="user"><br>
密码:<input type="password" name="pass"><br>
<input type="submit" value="提交">
</form>
//response页面
<%
//response重定向
/*String user=request.getParameter("user");
String pass=request.getParameter("pass");
if(user.equals("aaa")&&pass.equals("111")){
response.sendRedirect("index.jsp");
}
else response.sendRedirect("request.jsp");*/
//<jsp:forward重定向>
String user=request.getParameter("user");
String pass=request.getParameter("pass");
if(user.equals("aaa")&&pass.equals("111"))
{
%>
<jsp:forward page="index.jsp"></jsp:forward>
<%
}
else
{
%>
<jsp:forward page="request.jsp"></jsp:forward>
<%
}
%>
两种重定向的不同
1、从浏览器的地址显示上来看
forward 方法属于服务器端去请求资源,服务器直接访间目标地址,并对该目标地址的响应内容讲行德取、再把读取的内容发给浏览器,因此客户端浏览器的地址不变;
redirect是告诉客户端,使浏览器知道去请求哪内一个地址,相当于客户端重新请求一遍。所以地此址显示栏会变
2、从数据共享来看
forward 转发的页,以及转发到的目标页面能够共享request里面的数据
redirect转发的页以及转发到的目标页面不能共享request里面的数据也址
3、从功能来看
redirect 能够重定向到当前应用程序的其他源,而且还能够重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源
forward方法只能在同一个Web 应用程序内的资源之间转发请求,可以理解为服务器内部的一种操作
4、从效率来看
forward效率较高,因为跳转仅发生在服务器端
<redirect相对较低,因为类似于再进行了一次请求
3.4 session对象
在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web 页之间跳转时,存储在Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session 对象。
格式
将内容放入session
void session.setAttribute(String name,Object obj);
读取session中的内容
Object session.getAttribute(String name);
<%
ArrayList book=new ArrayList();
book.add("java");
book.add("c");
book.add("c++");
session.setAttribute("a", book);
%>
<a href="sessions.jsp">链接到接收页面</a>
//sessions页面
<%
ArrayList book=(ArrayList)session.getAttribute("a");
for(int i=0;i<book.size();i++){
out.println(book.get(i)+"<br>");
}
%>
注意:
如果两次调用 setAttribute(String name,Object obj);并且 name 相同,那么后面放进去的内容将会覆盖以前放进去的内容
setAttribute(String name,Object obj);的第二个参数是 Object 类型,即可以放入 session的不仅仅是一些简单字符串,还可以是 Object
其他session用法
移除 session 中的内容:
void session.removeAttribute(String name);
移除 session 中的全部内容:
void session.invalidate();
获得sessionID的标识:
String session.getId();
3.5 application对象
所有客户共享一个application(session是每个”客户“有独立的session)
session能用applicationt替换实现吗
很明显,购物车是不能用application实现的。因为不同客户在服务器端访问的是同一个对象,如果使用application实现购物车,客户1向购物车中放了一种物品,客户2也可以看到,那样是不允许的。
原理
对于一个Web容器而言,所有的用户都共同使用个appcation对象,服务器后后,就会自动创建application对象,这个对象会一直保存,直到服务器关闭为止
对应的类(接口)是
javax.servlet.ServletContext
<%
Integer count=(Integer)application.getAttribute("count");
if(count==null)
count=new Integer(0);
count++;
application.setAttribute("count", count);
%>
您是第<%=count %>个访问页面的