一、pageContext对象(代表页面上下文)
该对象主要用于访问JSP之间的共享数据,使用pageContext可以访问page、request、application及session范围内的变量。
pageContext提供了如下两个方法来访问page、request、application、session范围内的变量:
getAttribute(String name);//取得page范围内的name属性值
getAttribute(String name,int scope);//取得指定范围内的name属性值,其中scope可以是如下范围值
pageContext.PAGE_SCOPE//对应于page范围
pageContext.REQUEST_SCOPE//对应于request范围
pageContext.SESSION_SCOPE//对应于session范围
pageContext.APPLICATION_SCOPE//对应于application范围
与getAttribute()方法相对应,pageContext也提供两个对应的setAttribute()方法,用于将指定变量放入request、session、application、page范围内。
//将属性设置在page范围内
pageContext.setAttribute("page","hello");
//将属性设置在session范围内
pageContext.setAttribute("session","hello");
//将属性设置在session范围内,属性名为session2
pageContext.setAttribute("session2","hello",pageContext.SESSION_SCOPE);
//将属性设置在request范围内
pageContext.setAttribute("request","hello");
//将属性设置在request范围内,属性名为request2
pageContext.setAttribute("request2","hello",pageContext.REQUEST_SCOPE);
//将属性设置在application范围内
pageContext.setAttribute("app","hello");
//将属性设置在application范围内,属性名为app2
pageContext.setAttribute("app2","hello",pageContext.APPLICATION_SCOPE);
//获取各属性所在范围
pageContext.getAttributesScope("page");
pageContext.getAttributesScope("session");
pageContext.getAttributesScope("session2");
pageContext.getAttributesScope("request");
pageContext.getAttributesScope("request2");
pageContext.getAttributesScope("app");
pageContext.getAttributesScope("app2");
pageContext还可以用于获取其它内置对象
ServletRequest getRequest();
ServletResponse getResponse();
ServletConfig getServletConfig();
ServletContext getServletContext();
HttpSession getSession();
二、response对象(代表服务器对客户端的响应)
1.response响应生成非字符响应
对于需要生成非字符响应的情况,就应该使用response来响应客户端请求。下面的JSP页面将在客户端生成一张图片。response是HTTPServletResponse接口的实例,改接口提供了一个getOutputStream()方法,该方法响应输出字节流。
<%@ page contentType="image/png" language="java"%>
<%@ page
import="java.awt.image.*,javax.imageio.*,java.io.*,java.awt.*"
%>
BufferedImg image=new BufferedImg(340,160,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.fillRect(0,0,400,400);
ImageIO.write(image,"png",reponse.getOutputStream());
使用这种临时生成图片的方式就可以非常容易地实现网页上的图形验证码。不仅如此,使用response生成非字符响应还可以直接生成PDF文件、Excel文件,这些文件可以直接作为报表使用。
2.重定向
重定向是response的另外一个用处,与forword不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求的请求参数和request范围的属性全部丢失。
response.sendRedirect("xxxx.jsp");
3.增加Cookie
Cookie通常用于网站记录客户的某些信息,你如客户的用户名及客户的喜好等。一旦客户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更友好的服务。Cookie与session的不同之处在于:session会随浏览器的关闭而失效,但Cookie会一直存放在客户端机器上,除非超过Cookie的生命期限。
String name =request.getParameter("name");
Cookie c=new Cookie("username",name);
c.setMaxAge(24*3600);
response.addCookie(c);