专栏首页用户6093955的专栏request.setAttribute和request.getAttribute还有session.setAttribute和session.getAttribute还有request.getPar

request.setAttribute和request.getAttribute还有session.setAttribute和session.getAttribute还有request.getPar

以下内容作为个人学习,如果给原作者造成不便,请私信,会立即删除。 参考https://www.cnblogs.com/zhangxue521/p/5783043.html以及https://blog.csdn.net/qq_43329749/article/details/105717815

1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。

2.request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。

3.request.getParameter()表示接收参数,参数为页面提交的参数。包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter()),而且接收参数返回的不是Object,而是String类型。

举例:

session.setAttribute("kindresult", result); //result 为StringBuffer类型对象

response.sendRedirect("../manage_kind.jsp");

在manage_kind.jsp中:

<% StringBuffer kindresult=new StringBuffer(); kindresult=(StringBuffer)session.getAttribute("kindresult"); %>

<%=kindresult%>

##################################################################

我在servlet中使用了request.setAttribute()存储信息。 语法如下:request.setAttribute("user","1234"); 然后 response.sendRedirect("/hello.jsp"); 但是在我的hello.jsp中 request.getAttribute("user"); 返回值为null,为什么没有取到String "1234"?

在这里就要注意了,sendRedirect不能传递request对象。使用request.setAttribute时不能使redirect而是forward。即是将请求转发而不是重定向。

你可以使用getServletContext().getRequestDispatcher("/hello.jsp").forward(request,response)转到hello.jsp页面,对客户端而言它意识不到是hello.jsp页面响应它。 request对象和response对象是一样的,当然你的参数就可以传递过去了。

你使用response.sendRedirect("/hello.jsp");转到hello.jsp之后,request对象是新建的,你的属性值自然没有了。但是如果你使用session代替request就还是可以的。 session.setAttribute("user","1234"); session.getAttribute("user");

#####################################################################################

4.request.getParameter() 和request.getAttribute() 区别

(1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

(2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。

request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部

还有一点就是,HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。

拿一个例子来说一下吧,假如两个WEB页面间为链接关系时,就是说要从1.jsp链接到2.jsp时,被链接的是2.jsp可以通过getParameter()方法来获得请求参数.

假如1.jsp里有

<form name="form1" method="post" action="2.jsp"> 请输入用户姓名:<input type="text" name="username"> <input type="submit" name="Submit" value="提交"> </form>

的话在2.jsp中通过request.getParameter("username")方法来获得请求参数username:

< % String username=request.getParameter("username"); %>

但是如果两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据,也还是说一个例子吧。

有1.jsp和2.jsp

1.jsp希望向2.jsp传递当前的用户名字,如何传递这一数据呢?先在1.jsp中调用如下setAttribute()方法:

<% String username=request.getParameter("username"); request.setAttribute("username",username); %>

<jsp:forward page="2.jsp" />

在2.jsp中通过getAttribute()方法获得用户名字: <% String username=(String)request.getAttribute("username"); %>

5.request.getAttribute()与request.setAttribute()

request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。

而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。

P.S:JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面所说的用法来传递所需的数值。

6.request.getAttribute()与request.getSession().getAttribute()

request.setAttribute和request.getAttribute以及request.getSession().setAttribute和request.getSession().getAttribute()一般是成对使用

不过它们的作用域不同,request.getAttribute()只能在一个request内有效,如果重定向回客户端,将取不到值。使用 request.getSession().getAttribute() 就能取得到值。request.getSession()可以帮你得到HttpSession类型的对象,通常称之为session对象,session对象的作用域为一次会话,通常浏览器不关闭,保存的值就还再,当然也会出现session超时。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • request.setAttribute和request.getAttribute还有session.setAttribute和session.getAttribute还有request.getPar

    1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使...

    _DIY
  • 关于Servlet,JSP,HTML中文乱码的问题(转载自https://blog.csdn.net/qq_27368993/article/details/83616090)

    首先说明一点,以下的测试方法只有一个HttpServletRequest.forward,但是基于原理上的讲解,其他乱码问题应该也可以从中得到一些启示。不敢保证...

    _DIY
  • 利用DFS算出有多少个连通图

    以下面一个题目为例,[题目链接]: https://www.luogu.com.cn/problem/P4961 题目中涉及求出八联通图的个数,这里给出这步的...

    _DIY
  • request.setAttribute和request.getAttribute还有session.setAttribute和session.getAttribute还有request.getPar

    1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使...

    _DIY
  • MyBatis官方文档-Java API

    既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了。MyBatis 的 Java API 就是你收获你所做的努力的地方。正如你即...

    Java架构师必看
  • 生命的意义是什么? 谷歌机器人的答案:为了永生

    据英国每日邮报报道,当英国剧作家道格拉斯•亚当斯(Douglas Adams)写《银河系漫游指南》时,他写道这样一句话:“有关生命、宇宙和万物的终极问题的答案是...

    华章科技
  • SocketServer源码学习补充

    coders
  • 演技不够AI来凑?迪士尼开发百万像素换脸新技术,或将用于大荧幕

    deepfakes 技术可以用于图像和视频换脸,但它能否用于大制作电影和电视节目中呢?迪士尼最新放出的一则视频 demo 展示了这种可能性。

    CDA数据分析师
  • 穿戴设备【掌声与吐槽齐飞】 无大数据不智能!

    穿戴设备 CDA数据分析师 苹果公司近日正式发布Apple Watch智能手表。面对Apple Watch的到来,几乎所有的智能穿戴设备厂商都是怀着忐忑的心情,...

    CDA数据分析师
  • 交叉柱形图

    今天继续跟大家分享一组交叉柱形图的制作技巧! 该图表是从一本图表书中看到的,可以在同一幅图表中以两种视角展示同一组年度数据指标,步骤相对比较复杂,甚至有点炫技之...

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券