博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
request.setAttribute()和request.getSession().setAttribute()的区别
阅读量:1825 次
发布时间:2019-04-25

本文共 1331 字,大约阅读时间需要 4 分钟。

今天在测试使用Tomcat+MySQL实现用户的注册,当在其中添加注册出现重名的限制时使用 request.setAttribute("msg","用户已经注册,请重新注册");;在加上一个跳转response.sendRedirect("addUser.jsp");结果在我测试的时候永远不会出现我自定义的msg这个提示,然后换了个方法就是将request.setAttribute("msg","用户已经注册,请重新注册");改为request.getSession().setAttribute("msg","用户已经注册,请重新注册");结果发现可以出现在我的提示,但是有一个严重的问题就是我每次刷新界面总会出现这就提示,因此我就在考虑我是不是哪里出错了,果然问题找到了

【主要问题】

>request.setAttribute()只能在一个request内有效,如果重定向客户端,将取不到值。

>request.setAttribute("msg","用户已经注册,请重新注册");

>response.sendRedirect("addUser.jsp");

[解决方案]

>将response.sendRedirect("addUser.jsp");改为request.getRequestDispatcher("addUser.jsp").forward(request, response);

【分析问题原因】

>request.setAttribute()只能在一个request内有效,如果重定向客户端,将取不到值。

>request.getSession().setAttribute()可以通过sessionID得到自己的session,将参数存储在session中,即使重定向客户端也没事,这个值可以在多个页面上使用。

>比如访问一个网站,登录后用户信息被保存到session中,在session过期之前或者用户关闭页面之前,用户信息可以通过request.getSession().getAttribute()方式 获得。

>request在当次的请求的URL之间有效,比如,你在请求某个servlet,那么你提交的信息,可以使用request.getAttribute()方式获得,而当你再次跳转之后,这些信息将不存在。

>JSP里面的内置对象: 

request,response,page,session,application,out,exception,pageContent,config

其中page对象在当前页面是有效的,application在服务器开启之后,一直保持有效状态,直到服务器的关闭。

有必要记录下getParameter()&getAttribute

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

>setAttribute()和getAttribute()方法传递的数据只会在WEB服务器内部,在具有转发关系的WEB组件中传递,这两个方法能设置Object类型的数据共享。

转载地址:http://hdozf.baihongyu.com/

你可能感兴趣的文章
全局异常处理之如何使用HandlerExceptionResolver接口
查看>>
【Neuralink 与大脑的神奇未来】Part 2:大脑
查看>>
【Neuralink 与大脑的神奇未来】Part 3:脑机接口
查看>>
【Neuralink 与大脑的神奇未来】Part 4:Neuralink 的挑战
查看>>
【Neuralink 与大脑的神奇未来】Part 5:巫师时代
查看>>
【Neuralink与大脑的神奇未来】Part 6:大融合
查看>>
人工智能革命(上):通往超级智能之路
查看>>
人工智能革命(下):永生还是毁灭
查看>>
解密小米生态链:从构建到定义产品
查看>>
张一鸣的流量生意
查看>>
重新定义马桶
查看>>
从移动互联网困局漫谈人工智能的未来
查看>>
如何设计一款让用户“上瘾”的产品?
查看>>
墙裂推荐几款桌面应用
查看>>
如何避免掉进心理陷阱?
查看>>
从价值观选择到重构思维模型
查看>>
如何识别推理过程中的谬误?
查看>>
【周末分享】基因编辑技术的现状与未来
查看>>
脑机融合,当梦想照进现实
查看>>
请回答2019
查看>>