response对象与out对象:
response对象:
主要用于将JSP处理后的结果传回到客户端,以便作为HTML代码的动态内容。亦即response对象用于对客户的请求做出动态的响应,向客户端发送数据。response对象源于javax.servlet.http.HttpServletRespone和javax.servlet.ServletResponse。
该对象的功能与request正好相反:
request对象用于提交用户信息;
response对象用于将服务器端数据发送到客户端浏览器。
常用方法:
void sendRedirect(String locating) 把响应发送到另外一个位置进行处理。
String encodeRedirectURL(String url) 对sendRedirect()方法使用的URL进行编码。
void setBufferSize(int size) 设置以kb为单位的缓冲区大小。
void reset() 清空buffer中的所有内容。
void setCharacterEncoding(String charset) 设置响应使用的字符编码格式。
String getCharacterEncoding() 获取响应的字符编码格式。
void setContentType(String type) 设置响应的类型。
String getContentType() 获取响应的类型。
void setContentLength(int length) 设置数据传输的长度(bytes)
void setHeader(String name, String value) 设置指定名称的HTTP头的值。
void setDateHeader(String name, long value) 设置指定名称的Data类型的HTTP头的值。
void setIntHeader(String name, int value) 设置指定名称的Int类型的HTTP头的值。
void addCookie(Cookie Cookie) 添加一个Cookie对象,保存客户端信息。
String encodeURL(String url) 将URL进行编码,回传包含session ID的URL。
void sendError(int xc, String msg) 发送错误,包含状态码和错误信息。
boolean isCommitted() 判断服务器端是否已经将数据输出到客户端。
例如:
response.setContentType("application/msword; charset=utf-8");
setContentType()方法可以动态地进行文档响应类型的设定,若设置响应的类型为application/msword,则当前网页将以MSWord文档类型进行存储。
response.setHeader("Refresh", "5"); //指定了页面每过5s自动刷新。
response.setHeader("Refresh", "10; url=http://www.sina.com");//在网页打开后10s将跳转到指定的网页。
response.sendRedirect("http://www.sun.com");//实现客户的重定向。
out对象:
out对象的方法 是控制缓冲区数据输出的操作。源于javax.servlet.jsp.jspWriter,它表示一个输出流,可用来向客户端输出数据。
常用方法:
void clear() 清除输出缓冲区的内容,不输出到客户端。
void clearBuffer() 清除输出缓冲区的内容,输出到客户端
void close() 关闭输出流,清除所有的内容。
void flush() 输出缓冲区中的数据,然后清空缓冲区。会在屏幕上输出数据后再清空缓冲区。
int getBufferSize() 获取以KB为单位的目前缓冲区大小。
int getRemaining() 获取以KB为单位的缓冲区中空闲空间大小。
void newLine() 输出一个换行符。
void print(data) 将指定类型的数据输出到HTTP流中,不换行。
void println(data) 将指定类型的数据输出到HTTP流中,换行。
boolean isAutoFlush() 是否可以自动刷新缓冲区,结果取决于page指令的AutoFlush属性。
session对象与application对象:
session对象:(表示目前个别用户的会话状态,用来识别每个用户)
为了跟踪用户的操作状态。(当用户登录网站,系统将为其生成一个独一无二的session对象,用以记录修改用户的个人信息。)
session对象一般在服务器上设置一个30分钟的过期时间,当客户停止活动后自动失效。
session对象是一个JSP内置对象,它在第一个JSP页面被转载时自动创建,完成会话期管理。(从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束为一个会话。)
源于javax.servlet.http.HttpSession,它是一个建立Cookie机制上的友好界面,session对象的信息保存在服务器端,session对象的id保存在客户机的Cookie中。
常用方法:
Object getAttribute(String name) 获取与指定名称相关联的session属性值。
void setAttribute(String name, String value) 设置指定名称的session属性值。
boolean isNew() 判断一个session是否由服务器产生,客户端并没有使用。
Enumeration getAttributeNames() 取得session对象内所有属性的集合。
long getCreationTime() 获取session对象的创建时间。
String getId() 获取session标识。(唯一标识)
long getLastAccessedTime() 获取与当前session相关的客户端最后一次访问的时间。
int getMaxInactiveInterval(int interval) 获取总时间(秒),-1为永不过期。
void setMaxInactiveInterval(int interval) 设置session的有效期。
void invalidate() 销毁session对象。
void removeAttribute(String name) 移除指定名称的session属性。
ServletContext getServletContext() 获取一个该JSP页面对应的ServletContext对象实例。
application对象:
当服务器启动后就产生了application对象,一旦创建直到服务器关闭消失。
在JSP服务器运行时刻,仅有一个application对象,它由服务器创建,也由服务器自动清除,不能被用户创建和清除,只能创建这个application对象的同步副本。
当客户在所访问网站的各个页面之间浏览时,所使用的都是同一个application对象。
源于javax.servlet.ServletContext类,该对象主要用于存储应用程序信息。
常用方法:
Object getAttribute(String name) 获取由name指定的application属性。
void setAttribute(String name, Object value) 设置指定的application属性的值,属性值必须是对象。
Enumeration getAttributes() 获取所有的application属性。
void removeAttribute(String name) 移除指定名称的application属性。
ServletContext getContext(String uripath) 获取当前应用的ServletContext对象。
String getInitParameter(String name) 获取由name指定的application属性的初始值。
Enumeration getInitParamerters() 获取所有的application属性的初始值的集合。
RequestDispatcher getNamedDispatcher(String name)为指定名称的Servlet对象返回一个RequestDispatcher对象实例。
RequestDispatcher getRequestDispatcher(String path)获取一个RequestDispatcher对象实例。
String getServerInfo() 获取应用服务器版本信息。
String getServletContextName() 获取当前Web应用的名称。
异同:
1、都可以实现Web应用中信息的存储。
2、作用域不同:
session对象是针对用户的,进入网站时,每一个用户都会分配到一个单独的session对象,即使该用户设置了与其他用户名称的session属性,也不会发生冲突。
所有用户的application对象都是同一个,即所有用户共享这个内置的application对象,每一个用户都可以从各自浏览的JSP页面访问这个对象。
Cookie对象:
Cookie对象不是JSP的内置对象。作用与session对象类似,只是Cookie保存在客户端,session保存在服务器端。
Cookie是Web 保存在客户端的一段数据文本。Cookie允许一个Web站点在客户端的计算机上保存信息并在以后再取回它。可以用Cookie保存用户的帐号和口令,JSP可以随时读取,验证用户的合法性;也可以将用户的浏览状态包才在Cookie中,下次用户再访问网页时,由JSP向浏览器显示个性化页面。
源于javax.servlet.http.Cookie类。
常用方法:
getMaxAge() setMaxAge() 读取或设置Cookie的有效时间(秒)。
未设置,Cookie只适用与当前的浏览会话。
为负值,代表浏览器关闭Cookie,即消失。
为0,表示删除Cookie。
为正值,代表Cookie有效时间的秒数。
getName() 读取Cookie的名称。
getPath() setPath() 读取或设置Cookie使用的路径。
getSecure() setSecure() 读取或设置标志,标示Cookie是否只应适用于SSL连接,或者适用于所有连接。
getValue() setValue() 读取或设置与指定的Cookie关联的值。
getDomain() setDomain() 允许我们指定Cookie适用的域。
向客户端发送Cookie:
1、创建Cookie对象:通过Cookie类的构造函数创建。
Cookie 对象名称 = new Cookie("名称","值");
2、设置Cookie最大时效:
c.setMaxAge(60*60*24*7);
3、将Cookie发送到客户端中:使用response对象的addCookie()方法可以将设置完成的Cookie对象通过HTTP发送到客户端。
response.addCookie(c);
从客户端读取Cookie:
1、使用request对象的getCookie()方法读取保存到客户端的Cookie。
Cookie [] cookies=request.getCookies(); //获取Cookie对象数组。
2、执行getName()方法对比每个Cookie对象的名称,直到找到需要的Cookie为止。
3、然后调用所获得的Cookie对象的getValue()方法,获取找到的Cookie的值。
例如:
Cookie [] cookies=request.getCookies();//获取Cookie对象数组
if(cookies!=null)
{
for(int i=0; i<cookies.length; i++) //循环取出数组中每个Cookie
{
Cookie c=cookies[i];
if("username".equals(c.getName())) //比较要查找的Cookie名与数组中的Cookie
{
out.print(c.getValue()); //输出找到的Cookie的值
}
}
}
修改Cookie的值:
使用setValue()进行修改,调用response.addCookie()将修改后的Cookie发送到客户端。
c.setValue("admin"); //设置Cookie的值
response.addCookie(c); //发送Cookie
删除Cookie:
使用setMaxAge()将最大时效设置为0,调用response.addCookie()将修改后的Cookie发送到客户端,将从客户端删除Cookie。
c.setMaxAge(0); //将最大时效指定为0
response.addCookie(c); //发送Cookie