[Java Web]JSP/Servlet的学习(resopnse对象与session对象)

news/2024/7/1 21:59:15

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>

http://www.niftyadmin.cn/n/4637505.html

相关文章

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能...

锁定用户功能在现实应用场景中得到了大量的应用&#xff0c;当我们需要限制某用户的登录&#xff0c;又不能删除这个用户时就可以使用锁定功能&#xff0c;如&#xff1a;未授权的用户尝试错误密码错误过多可以尝试的用户进行锁定&#xff0c;又如ATM机上取钱时密码错误输入过多…

[NOIP2015]运输计划(树上差分+LCA+二分)

Description 公元 2044 年&#xff0c;人类进入了宇宙纪元。 L 国有 n 个星球&#xff0c;还有 n−1 条双向航道&#xff0c;每条航道建立在两个星球之间&#xff0c;这 n−1 条航道连通了 L 国的所有星球。 小 P 掌管一家物流公司&#xff0c; 该公司有很多个运输计划&#xf…

android debug bridge(adb),ADB(Android Debug Bridge)的常用命令以及使用

adb devices 用于查看adb链接的设备、adb start-service 启动设备adb kill-service 停止设备adb reboot 重启设备adb version 查看adb版本号adb pull 用来将移动端设备 的文件复制到PC端adb push 用…

android:completionthreshold=1,Android笔试95题讲述.doc

内测/月考类型&#xff1a;(笔试)范围&#xff1a;内测/月考日期&#xff1a;时长&#xff1a;1小时总分数&#xff1a;100 分姓名&#xff1a;准考证号&#xff1a;证件号码&#xff1a;理论部分注意&#xff1a;考试结束试卷必须交回&#xff0c;答案填写在答题卡上1、下面关…

在线人数HTML源码,PHP网站在线人数

刚用PHP写了一个网站在线人数的程序&#xff0c;请大家进来指点下&#xff01;我是用PHPMYSQL来写的&#xff0c;原理&#xff1a;网站在线人数的程序代码后台有MYSQL数据库支持&#xff0c;可以直接统计出网站当前的在线人数。首先我创建MYSQL数据库表。CREATE TABLE tablenam…

清华镜像站 android,清华 AOSP 镜像源配置笔记

在使用清华的镜像源配置下载AOSP时&#xff0c;有些步骤官网写的比较模糊&#xff0c;摸索过程浪费了一些时间&#xff0c;记一个笔记&#xff0c;以供之后避坑。下载 repo 工具此处与官网一致&#xff0c;原文抄录。mkdir ~/binPATH~/bin:$PATHcurl https://storage.googleapi…

html 实时曲线 js,javascript – 滑块移动时的html5-canvas绘图曲线

嗨,我想在移动滑块时绘制曲线.我有两种曲线.贝塞尔曲线和二次曲线.当我绘制曲线时,我想在同一条路径上移动一个对象.我希望它是动态的,所以如果我能够改变曲线点.所以我需要一个函数,我可以调用滑块更改,因为我正在为行做.这是我的代码.此代码仅适用于chrome..wrapper {margin:…

html编写一个四则运算函数,加减乘除四则运算(javascript版)

加减乘除四则运算(javascript)1、调用方法&#xff1a;var str "134-5-6*7/89-10/11"; //具体的计算公式calcArith(str); //调用函数2、函数实现&#xff1a;//主调用函数function calcArith(strV) {if (("-*/").indexOf(strV.substring(0,1)) > 0) {s…