Java Server Page的学习(resopnse与session)
内置对象
response对象
respone代表服务器对客户端的响应。如果要在JSP页面中动态生成一副位图<br/>
或者输出一个PDF文档,要用response作为响应输出。
response的三个作用:
1、响应生成非字符响应<br/>
response是HttpServletResponse接口的实例,该接口提供了一个getOutputStream()方法,<br/>该方法返回响应输出字节流<br/>
<%@page contentType="image/png" language="java"%>
<%@page import="java.awt.image.*,javax.imageio.*,java.io.*,java.awt.*"%>
<%
//创建BufferedImage对象
BufferedImage image = new BufferedImage(340,160,BufferedImage.TYPE_INT_RGB);
//以Image对象获取Graphics对象
Graphics g = image.getGraphics();
//使用Graphics画图,所画的图像将会出现在image中
g.fillRect(0, 0, 400, 400);
//设置颜色,画弧
g.setColor(new Color(255,0,0));
g.fillArc(20,20,100,100,30,120);
g.setColor(new Color(0,255,0));
g.fillArc(20,20,100,100,150,120);
g.setColor(new Color(0,0,255));
g.fillArc(20,20,100,100,270,120);
//设置颜色画出三个字符串
g.setColor(new Color(0,0,0));
g.setFont(new Font("Arial Black",Font.PLAIN,16));
g.drawString("red:climb", 200,60);
g.drawString("green:swim", 200,100);
g.drawString("blu:jump",200,140);
g.dispose();
//将图像输出到页面的响应
ImageIO.write(image, "png", response.getOutputStream());
%>
2、重定向<br/>
和forward不同的是,response重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求。HttpServletResponse提供了一个sendRedirect(String path)方法,该方法用于重定向到path资源。
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="">
<%
//生成页面响应
out.println("====");
//重定向到redirect-result.jsp页面
response.setRedirect("redirect-result.jsp");
%>
3、向客户端增加cookie<br/>
response提供方法void addCookie(Cookie cookie)来增加cookie。在增加cookie之前必须先创建Cookie对象。<br/>
- 创建Cookie实例,Cookie的构造器为Cookie(String name,String value)
- 设置Cookie的生命期限,即该Cookie在多长时间内有效
- 向客户端写Cookie
添加cookie:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="">
<!DOCTYPE html>
<html>
<head>
<title>增加Cookie</title>
</head>
<body>
<%
//获取请求参数
String name = request.getParameter("name");
//以获取到的请求参数为值,创建一个Cookie对象
Cookie c = new Cookie("username",name);
//设置Cookie对象的生存期限
c.setMaxAge(24*3600);
//向客户端增加Cookie对象
response.addCookie(c);
%>
</body>
</html>
读取cookie:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="">
<!DOCTYPE html>
<html>
<head>
<title>读取Cookie</title>
</head>
<body>
<%
//获取本站在客户端上保留的所有cookie
Cookie[] cookies = request.getCookies();
//遍历客户端上的每个Cookie
for(Cookie c : cookies)
{
//如果Cookie的名为username,表明该Cookie是需要访问的Cookie
if(c.getName().equals("username"))
{
out.println(c.getValue());
}
}
%>
</body>
</html>
session对象
session对象代表一次用户会话。一次会话的含义是从客户端浏览器连接服务器开始,到客户端服务与断开为止。(session里的属性必须是可序列化的)
session的作用
通常用于跟踪用户的会话信息,如判断用户是否登录系统。session范围内的属性可以在多个页面的跳转之间共享。
session对象是HttpSession的实例,HttpSession常用的两个方法:
- setAttribute(String attName,Object attValue):设置session范围内attName属性的值为attValue
- getAttribute(String attName):返回session范围内attName属性的值
表单页面:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage=""%>
<!DOCTYPE html>
<html>
<head>
<title>表单页面</title>
</head>
<body>
<form method="post" action="processBuy.jsp">
书:<input type="checkbox" name="item" value="book"/><br/>
水:<input type="checkbox" name="item" value="water"/><br/>
人:<input type="checkbox" name="item" value="people"/><br/>
</form>
</body>
</html>
处理页面:
<%@ page contentType="text/html; charset=utf-8" language="java"%>
<%@ page import="java.util.*" %>
<%
//取出session范围的itemMap属性
Map<String,Integer> itemMap = (Map<String,Integer>)session.getAttribute("itemMap");
//如果Map对象为空,则初始化Map对象
if(itemMap == null)
{
itemMap = new HashMap<String,Integer>();
itemMap.put("书",0);
itemMap.put("水",0);
itemMap.put("人",0);
}
//获取上一个页面的请求参数
String[] buys = request.getParameterValues("item");
//遍历数组的各元素
for(String item:buys)
{
//如果item为book,表示书籍
if(item.equals("book"))
{
int num1 = itemMap.get("书").intValue();
//将书的数量加1
itemMap.put("书",num1+1);
}else if(item.equals("water"))
{
int num2 = itemMap.get("水").intValue();
//将水的数量加1
itemMap.put("水",num2+1);
}else if(item.equals("people"))
{
int num3 = itemMap.get("人").intValue();
//将人的数量加1
itemMap.put("人",num3+1);
}else
}
//将itemMap对象放到设置成session范围的itemMap属性
session.setAttribute("itemMap",itemMap);
%>
<!DOCTYPE html>
<html>
<head>
<title>new document</title>
</head>
<body>
书:<%=itemMap.get("书")%><br/>
水:<%=itemMap.get("水")%><br/>
人:<%=itemMap.get("人")%><br/>
<input type="submit" value="提交"/>
</body>
</html>