1、内置对象概述
jsp文件在转译成其他对应的servlet文件时,自动生成并声明的对象,我们在jsp页面直接使用即可,不可用于全局变量中。
jsp的内置对象有:application、config、exception、out、page、pageContext、request、response、session,其中最重要最常用的是request、response、session,作用域服务器端和客户端进行通信。
2、request对象
request对象是从客户端向服务器发送请求,包括用户提交的信息以及客户端的一些信息。
作用:主要用于处理客户端浏览器提交的请求中的各项参数和选项。
(1)访问请求参数,getParameter()方法
作用:可以用于获取用户提交的数据。
格式:
String userName = request.getParameter("name");
示例:
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="login_deal.jsp">
用户名:
<input name="username" type="text" id="username"/><br><br>
密 码:
<input name="pwd" type="password" id="pwd"/><br><br>
<input type="submit" name="Submit" value="提交"/>
<input type="reset" name="Submit2" value="重置"/>
</form>
</body>
</html>
login_deal.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage=""%>
<%
String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
out.println("用户名:"+username);
out.println("密码:"+pwd);
%>
运行结果:
(2)在作用域中管理属性
作用:在进行请求转发时,需要把一些数据带到转发后的页面进行处理。
设置转发数据的格式:
<%request.setAttribute("key", Object)%>
在转发后的页面获取数据时,需要通过键key进行获取,键值Object表示需要保存在request范围内的数据。
获取转发数据的格式:
<%request.getAttribute(String name)%>
示例:
setAttribute.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setAttribute("error", "很抱歉,用户名或者密码错误!");%>
<jsp:forward page="error.jsp"></jsp:forward>
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%out.println("错误信息为:"+request.getAttribute("error")); %>
运行结果:
(3)获取Cookie
Cookie是Web应用程序保存相关信息提供的一种有用的方法,解决不同请求功能的数据方法。Cookie是一小段文本信息,伴随着用户请求和页面在web服务器和浏览器之间传递。
格式:
<%Cookie[] cookie=request.getCookies(); %>
示例:
showCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] cookies=request.getCookies();//从request中获取Cookies集
//初始化Cookie集为空
Cookie cookie_response=null;
//判断cookies是否为空
if(cookies!=null){
cookie_response=cookies[1];
}
out.println("本次访问时间: "+new java.util.Date().toLocaleString()+"<br>");
if(cookie_response!=null){
//输出上一次访问页面的时间,并设置cookie_response为新的当时间
out.println("上次访问时间: "+cookie_response.getValue());
cookie_response.setValue(new java.util.Date().toLocaleString());
//response.addCookie(cookie_response);
}
//如果cookies集为Null,创建cookie,并加入到response中
if(cookies==null){
cookie_response=new Cookie("Access Time","");
cookie_response.setValue(new java.util.Date().toLocaleString());
response.addCookie(cookie_response);
}
%>
运行结果:
(4)获取客户信息
(5)访问信息安全
(6)访问国际化信息安全
3、response对象
作用:用于响应客户请求,向客户端输出信息。
response对象是javax.servlet.http.HttpServletResponse接口类对象,封装了jsp产生的响应,并发生到客户端以响应客户端的请求。
(1)重定向网页
response对象中的sendRedirect()方法将客户请求重定向到一个不同的页面。
response.sendRedirect("login_ok.jsp");
response对象中的sendError()方法指明一个错误状态。在接收到错误信息后,该信息将在内容上返回给客户。
response.sendError(500,"请求页面存在错误");
注意:这两种方法均会中断当前的请求和响应,如果HTTP响应已经提交给客户,则不会调用这些方法。
(2)从会话中移除指定的对象
session内置对象使用removeAttribute()方法将所指定名称对象删除,也就是从这个会话中删除与指定名称绑定的对象。
运行程序:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setAttribute("information","向session中保存数据");
response.sendRedirect("forward.jsp");
%>
forward.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
out.print(session.getAttribute("information"));
session.removeAttribute("information");
if(session.getAttribute("information")==null){
out.print("session对象information已经不存在了");
}else{
out.print(session.getAttribute("information"));
}
%>
(3)销毁对话
session内置对象使用invalidation()可以将会话中的全部对象内容删除。
session.invaludation();
(4)会话超时的管理
在JSP文件中,确保客户会话终止的唯一方式使用超时设置。
getLastAccessedTime() 返回客户端最后一次发送与这个会话相关联的强求时间
getMaxInactiveInterval() 以秒为单位返回一个会话内两个请求的最大时间间隔,Servlet容器在客户访问期间保存这个会话处于打开状态。
setMaxInactiveInterval(int interval) 以秒为单位指定在服务器小程序容器使该会话无效前的客户请求之间最长时间,也就是超时时间。
(5、application对象
application对象用于保存所有应用中的公有数据,服务器启动并自动创建application对象后,只要没有关闭服务器,application对象就一直存在,所有用户可以共享application对象。
application对象与session对象的区别在于:session对象与用户会话相关,不同用户的session是完全不同的对象。而用户application对象都是同一个对象,共享一个application对象。
(1)访问应用程序初始化参数
通过application对象调用的ServletContext对象提供了对应用程序环境属性的访问。
getInitParameter(String name) 返回一个已命名的初始化参数值
getInitParameterNames() 返回已定义的应用程序初始化参数名称的枚举
运行程序:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<!-- 设置IP信息 -->
<context-param>
<param-name>database_host1</param-name>
<param-value>192.168.1.17</param-value>
</context-param>
<context-param>
<param-name>database_host2</param-name>
<param-value>192.168.1.66</param-value>
</context-param>
</web-app>
index.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Enumeration ename=application.getInitParameterNames();
while(ename.hasMoreElements()){
String name= (String)ename.nextElement();
String value =application.getInitParameter(name);
out.println(name+",");
out.println(value);
out.print("<br>");
}
%>
运行结果:
(2)管理应用程序环境属性
session对象中设置的属性只在当前客户的会话范围内有效,客户超出时间不发送请求时,session对象将回收。
application对象中设置的属性在整个应用程序范围中有效的,即使所有的用户都不发送请求,只要不关闭应用服务器,在其中设置的属性仍然有效。
方法:
removeAttribute(String name) 从ServletContext的对象中去掉指定名称的属性
setAttribute(name,object) 使用指定名称和指定对象在ServletContext的对象中进行关联
getAttribute(name) 从ServletContext的对象中获取一个指定对象
getAtrributeNames() 返回存储在ServletContext对象属性名称的枚举数据
运行程序:
index.jsp
<%
int num=0;
if(application.getAttribute("num")==null){
num=1;
}else{
num = Integer.parseInt((String)application.getAttribute("num"));
num++;
}
out.print("你是第"+num+"访问者");
application.setAttribute("num", String.valueOf(num));
%>
运行结果:
6、OUT对象
out对象主要用于向客户端输出各种数据类型的内容,并且管理应用服务器上的输出缓冲区,输出缓冲区默认值为8kb,可以通过页面指令page来改变默认值。
(1)管理响应缓冲
clear() 清空缓冲区
clearBuffer() 清空缓冲区的当前内容
close() 先刷新流,再关闭流
flush () 刷新流
getBufferSize() 以字节为单位返回缓冲区的大小
getRenamaining() 返回缓冲区中没有使用的字符数量
isAutoFlush() 返回布尔值,自动刷新还是缓冲区溢出时抛出的IOException异常
7、config、exception、page、pageContext对象
config对象 page 该对象允许将初始化数据传递给一个jsp页面
exception对象 page 该对象含有只能由指定的jsp“错误处理页面”访问的异常数据
page对象 page 该对象代表当前jsp页面对应的Servlet类实例
pageContext对象 page 该对象是jsp页面本身的上下文,他提供了唯一一组来管理具有不同作用域的属性,这些API在实现jsp自定义标签处理程序时非常有用。
在这里遇到一个问题,上次访问时间出现乱码,暂时还未解决。