使用request对象进行数据传递「建议收藏」

使用request对象进行数据传递「建议收藏」在进行请求转发时,需要把一些数据传递到转发后的页面进行处理,需要使用request对象的setAttribute方法将数据保存到request范围内的变量中使用:request对象可以视为一个域,可以应用setAttribute()方法向域范围内存放数据request对象的setAttribute()方法的格式:request.setAttribute(Stringname,Objectobject);参数说明name:变量名,为String类型,object:用于指定需要在request

大家好,又见面了,我是你们的朋友全栈君。

在进行请求转发时,需要把一些数据传递到转发后的页面进行处理,需要使用request对象的setAttribute方法将数据保存到request范围内的变量中
使用:

request对象可以视为一个域,可以应用setAttribute()方法向域范围内存放数据
request对象的setAttribute()方法的格式:
request.setAttribute(String name,Object object);
参数说明
name:变量名,为String类型,
object:用于指定需要在request范围内传递的数据,为Object类型
在将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取该变量的值:
request.getAttribute(String name);
创建index.jsp文件,首先应用Java的try…catch语句捕获页面中的异常信息,若没有异常,将运行结果保存到request范围内的变量中;若出现异常,将错误信息保存到request范围内的变量中,再应用jsp:forward将页面转发到deal1.jsp页面;

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
try{ 
   											//捕获异常信息
	int money=100;
	int number=0;
	request.setAttribute("result",money/number);//保存执行结果
}catch(Exception e){ 
   
	request.setAttribute("result","很抱歉,页面产生错误!!");	//保存错误提示信息
}
%>
<jsp:forward page="deal1.jsp"></jsp:forward>
</body>
</html>

创建deal1.jsp文件,在该文件中通过request对象的getAttribute()方法获取保存在request范围内的变量result并输出,由于getAttribute()方法的返回值为Object类型,所以需要调用其toString()方法将其转换为字符串类型

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String message=request.getAttribute("result").toString();
%>
<%=message %>
</body>
</html>

域对象:所知道的已经有两个域对象了

ServletContext:服务器一启动,为每个web应用创建一个ServletContext对象,所有servlet实例共享对象。
request:一次请求的范围。

request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理
setAttribute方法
getAttribute方法
removeAttribute方法
getAttributeNames方法
request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发,从而共享请求中的数据

Request获取数据

1.使用getParameter获取数据

// 设置响应的编码格式

response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求的内容是什么编码格式
request.setCharacterEncoding("UTF-8");
// 获取表单中所有提交的数据打印 getParameter接收一个值数据
String name = request.getParameter("userName");
String pwd = request.getParameter("userPwd");
String sex = request.getParameter("sex");
// 获得复选框传递的值
String[] hobby = request.getParameterValues("hobby");
//判断不为空则遍历打印
if (hobby != null) { 
   
    for (String h : hobby) { 
   
        System.out.println(h);
    }
}
String city = request.getParameter("city");
System.out.println(name);
System.out.println(pwd);
System.out.println(sex);
System.out.println(city);

2.使用getParacterName 获取

// 利用getParacterName打印表单
        Enumeration<String> names = request.getParameterNames();
        while (names.hasMoreElements()) { 
   
            String name = names.nextElement();
            // 根据name取出对应的值
            String[] strings = request.getParameterValues(name);
            for (String value : strings) { 
   
                System.out.println(value);
            }
        }

3.使用map集合获取 创建User类 属性最好与表单名字一致

User user = new User();
        try { 
   
            BeanUtils.populate(user, request.getParameterMap());
            System.out.println(user);
        } catch (IllegalAccessException | InvocationTargetException e) { 
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

请求转发,重定向,包含

1.请求转发

// 请求转发获取转发器
        // 请求转发只是服务器内部的访问
        // 不管怎么写路径始终都在项目路径下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
        dispatcher.forward(request, response);

2.请求重定向

// 请求重定向查看是否能获取域中的值
        // 重定向是两次请求 不能获取到request域中的值
        // 重定向既可以访问本地服务器 也可以访问非本地服务器
        response.sendRedirect("http://www.baidu.com");

3.请求包含

// 请求包含
        // 相当于把两个页面的响应合成一个响应返回浏览器
        // 请求转发 浏览器只能响应一个数据
        request.getRequestDispatcher("/demo03").include(request, response);
        // 响应一句话
        out.write("123");

cookie

1.什么是cookie
cookie是一种 客户端技术 cookie是保存在浏览器中的缓存数据
发起一个请求 请求一个servlet 进行逻辑处理(添加一个商品进购物车) 处理完成后给客户端一个响应响应中携带着记录了购买的商品 cookie让浏览器保存 可以保存在内存中(结束回话 cookie被清除) 也可以保存在硬盘中(结束回话 依然存在 就是文件)
当浏览器再一次请求购物车时会携带之前保存的cookie 去访问 每个网站可以保存20个cookie整个浏览器可以保存300个
第一次访问服务器时不会携带cookie因为cookie没有产生 只有当第一次请求之后的响应中可以把cookie写会到浏览器
cookie获取数据

举例:在网站中显示上次登录时间
1.创建cookie

// 创建cookie 记录当前时间
        Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
        // 设置一下cookie的保存路径 工程名加配置的网址路径
        // 寻找读取cookie时是按照请求的地址寻找cookie的
        // 如果配置请求路径没有一级目录
        // 这样全网站所有的请求都可以找到cookie
        // cookie.setPath("/");
        cookie.setPath("/java-web-servlet-3.28/servlet");
        // 设置cookie存活时间 integer.Maxvalues
        // 负值 表示浏览器关闭cookie消失 正值表示cookie存活时间 0 表示删除
        cookie.setMaxAge(300);
        // 把cookie添加到响应中
        response.addCookie(cookie);

2.读取cookie并且转化为日期格式

// 读取cookie
        Cookie[] cookies = request.getCookies();
        if (cookies != null) { 
   
            // 遍历数组
            for (Cookie cookie : cookies) { 
   
                if (cookie.getName().equals("lastTime")) { 
   
                    // 取出cookie的值
                    String value = cookie.getValue();
                    long time = Long.parseLong(value);
                    // 转成日期date 构建日期对象
                    Date date = new Date(time);
                    // 创建一个显示的日期格式
                    // 参数就是想要现实的日期格式
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    // 格式化时间
                    String lastTime = dateFormat.format(date);
                    // 响应到浏览器显示
                    response.getWriter().write("上次的访问时间是:" + lastTime);
                }
            }
        }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142638.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 快速幂的大数运算_快速幂模

    快速幂的大数运算_快速幂模快速幂运算1.什么是快速幂2.快速幂的“小数”运算3.高精度(大数)的快速幂1.什么是快速幂快速幂,是指在进行幂运算的时候,用一种快速方法得出答案。比如,要求2^100的值,那按照最简单的方式,就是一个一个2去相乘,然后最终得到答案,那么这样就要计算100次,非常浪费时间,那么快速幂就是使用一种技巧使得将其计算次数减少,快速得到答案。2.快速幂的“小数”运算对于系统内置类型的整型,暂且叫他“小数”,这个时候进行快速幂运算,代码如下:#include<cstdio>#include&l

    2025年7月14日
    4
  • substring方法截取字符串以及其他方式

    substring方法截取字符串以及其他方式方法一,指定字符,截取字符串,返回字符串数组:Stringstr=“abcd,123,123abc,fij23”;String[]strs=str.split(“,”);方法二,指定索引号,截取字符串:将字符串从索引号为5开始截取,一直到字符串末尾。(索引值从0开始):Stringstr=“asdfghjkl”;str.substring(5);从索引号2开始到索引好4结束(并且不包含索引4截取在内,也就是说实际截取的是2和3号字符):Stringsb=“asdfghj

    2022年5月23日
    163
  • 产品模块化设计_pom设计模式

    产品模块化设计_pom设计模式对于,ecmall的本身自带的模板,可能很多用过的朋友都知道,其实还有许多功能根本无法实现。从根本上来讲,不如Smarty强大,但本人也试过将smarty引入但不是很成功,究其原因,ecmall的模板,并不是单纯地模板,而是在解析时参入了许多其它业务的逻辑,所以,直接以smarty来代替ecmall本身的模板,在widget的开发时会有很大的问题。所以,为了灵活情,本人,在ecmall

    2025年8月11日
    4
  • jdpaint 精雕入门教程雕花_精雕制图教程视频教程

    jdpaint 精雕入门教程雕花_精雕制图教程视频教程JDPaint5.5北京精雕浮雕建模与编程加工视频教程链接:https://pan.baidu.com/s/1fSQomLrPw4bQtNAZyrPCmQ提取码:7h2m

    2025年9月14日
    8
  • Mysql事务隔离级别_数据库默认的事务隔离级别

    Mysql事务隔离级别_数据库默认的事务隔离级别前言提到事务,你肯定不会陌生,最经典的例子就是转账,甲转账给乙100块,当乙的账户中到账100块的时候,甲的账户就应该减去100块,事务可以有效的做到这一点。在MySQL中,事务支持实在引擎层实现的,MySQL是一个支持多引擎的系统,但并不是所有引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被取代的原因之一。隔离性事务的四大特性AC…

    2022年10月14日
    4
  • OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集

    OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集在定义椭圆曲线点群时出现了描述曲线所用算法的参数constEC_METHOD*meth,这一节就来看看这个参数有什么用处。椭圆曲线算法集的定义如下。typedefstructec_method_stEC_METHOD;structec_method_st{(具体定义略,详情可参见代码文件ec_lcl.h)};//EC_METHOD在结构体ec…

    2022年7月20日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号