[Java Web]JSP/Servlet的學習(resopnse對象與session對象)

Java Server Page的學習(resopnse與session)



內置對象

response對象


respone表明服務器對客戶端的響應。若是要在JSP頁面中動態生成一副位圖<br/>
或者輸出一個PDF文檔,要用response做爲響應輸出。html

response的三個做用:

一、響應生成非字符響應<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的做用

一般用於跟蹤用戶的會話信息,如判斷用戶是否登陸系統。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>
相關文章
相關標籤/搜索