respone表明服务器对客户端的响应。若是要在JSP页面中动态生成一副位图<br/>
或者输出一个PDF文档,要用response做为响应输出。html
一、响应生成非字符响应<br/>
response是HttpServletResponse接口的实例,该接口提供了一个getOutputStream()方法,<br/>该方法返回响应输出字节流<br/>java
<%@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()); %>
二、重定向<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"); %>
三、向客户端增长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: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对象是HttpSession的实例,HttpSession经常使用的两个方法:jsp
- setAttribute(String attName,Object attValue):设置session范围内attName属性的值为attValue
- getAttribute(String attName):返回session范围内attName属性的值
表单页面:post
<%@ 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>