百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

JAVA中setAttribute没有生效 java setattribute用法

feilongw 2025-06-18 23:07 18 浏览

JSP request.setAttribute()详解及实例

这篇文章主要介绍了 javascript request.setAttribute()详解及实例的相关资料,需要的朋友可以参考下

javascript request.setAttribute()详解

request.setAttribute()怎么用的?

JSP1代码

String [] test=new String[2]; 
test[0]="1"; 
test[1]="2"; 
request.setAttribute("test",test) ; 
response.sendRedirect("jsp2.jsp");

JSP2代码

String test[]=(String[])request.getAttribute("test"); 
out.print(test); 

为什么JS P2中会找不到test?

用来在同一个request周期中保存变量使用。比如servlet调用后,推出JSP页面,这是一个request周期,如果在Jsp页面需要servlet中的一些 处理结构,就从request.getAttribute中获取。

sendRedirect()方法是通过浏览器重定向的,所以第二个JSP页面中获得的request并非是前一个页面的request(两次请求生成了前后两个不同的 request对象了)。

用RequestDispatcher接口的forward()方法试试看。

都在一起使用

List list = new CommonsDao().getAllCommons(); 
request.setAttribute("CommonsList", list); 
request.getRequestDispatcher("View.jsp").forward(request, response); 
 
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结合上面所说的用法来传递所需的数值。

  1. request.getRequestDispatcher()是请求转发,前后页面共享一个request
  2. response.sendRedirect()是重新定向 前后页面不是一个request
  3. sendRedirect是通知IE再次提交一个http请求, dispatcher是直接转到目的地址,最直接得表现,应该是dispatcher后的IE地址栏地址是不变的
  4. request.getRequestDispatcher()是服务器端跳转
  5. response.sendRedirect()是客户端跳转

关于
request.request.getRequestDispatcher().forward()方法的一点看法

今天在调试一个Servlet程序的时候,报了以下错误!

java.lang.IllegalStateException: Cannot forward after response has been committed

根据字面理解的话,意识是在response已经提交后程序不能再一次的跳转!

研究代码以后发现,是因为前面已经执行过一次
request.request.getRequestDispatcher().forward()

但是后面的
request.request.getRequestDispatcher().forward()依然被执行到了!

那么很有理由相信
request.request.getRequestDispatcher().forward()跳转本身是不会返回什么,也不会终止程序体的执行!

程序体后面该执行的还是会执行!

sendRedirect()是请求从定向,和超连接是一个意思,比如你在A页面中写一个request.setAtribute,sendRedirect到B页面,就是说服务器从A页面中给你一个response,然后你的浏览器再去request到B页面,由于有两次request和response,是不能在B页面取到request.setAtribute里的值,能从地址栏看到url的改变


request.getRequestDispatcher().forward(request,response)是请求分发器,比如你在A页面中写一个request.setAtribute,
request.getRequestDispatcher().forward(request,response)到B页面,那就是说服务器给你的response是B页面的,并且只有一次request和response,所以是能在B页面取到request.setAtribute里的值,地址栏的url仍然是A页面的

request.sendRedirect 与
request.getRequestDispatcher.forward 的区别

1.forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。

2.forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。即参数的传递方式不一样:forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。

3.sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/',那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp:
http://localhost:/dms/servlet/Servlet 重定向的URL:
http://localhost:/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找
url:http://localhost:/login.jsp。而forward不能这样处理相对路径。

感谢阅读!


相关推荐

linux 测试rs485_如何测试rs485

MODBUS串口调试助手读取RS-仪表数据MODBUS串口调试助手RS-读取仪表数据概述通过Modbus串口软件(各种调试助手)读取仪表中的数据。1配置硬件要求PC操作电脑USB转RS-调试电缆R...

java中model java中model包的作用

java包管理、访问修饰符、static/final关键字一、包管理(Package)核心作用组织代码:将相关类归类到同一目录下(如com.utils、com.model)避免命名冲突:不同包中...

Jira持续集成_持续集成 ci

Jira停售一年后,国产研发管理平台谁能真正站出来?年2月,Atlassian正式终止Server产品的销售和支持,这一决定让国内众多研发团队不得不重新评估自己的项目管理工具。转眼一年过...

linux redhat系统下载_linux redhat安装教程

红帽企业版免费提供给开发者下载使用红帽RedHat宣布,开发者只要免费注册红帽开发者项目后,即可免费下载使用公司的企业发行版RHEL7(RedHatEnterpriseLinux7)。免费...

Excel 文件双击打不开,非要在文件里打开怎么办?

操作无法完成,因为其中的文件夹或文件已在另一程序中打开使用Windows系统用朋友们,应该经常会遇到这个提示,如下图所示:遇到这个问题,如果安装了的话,可以尝试用的解锁功能,在文件夹上点右键,看有没有...

android MotionEvent x

Android学习之手势操作在昨天我们讲了Android的OnTouch触摸事件,有时候触摸和手势是相互联系的,密不可分的关系,所以上节我们讲了触摸事件,今天我们自然而然的就需要讲手势操作了。触摸,手...

FreeNAS 配置 FC 存储模式

三、FreeNAS篇:系统基本设置及存储池管理,实现远程访问上节我们通过U盘成功在蜗牛星际上安装好了FreeNAS系统,本次将在系统层面上进行基本的配置与存储管理,实现远程smb访问硬盘上的资源。1....

hillstone secure connect安卓

山石网科:携手华为鸿蒙打造网络安全方案每经AI快讯,山石网科今日官微消息,近日,华为智慧办公生态峰会在武汉召开,旨在把握原生鸿蒙带来的崭新机遇,携手众多合作伙伴共同探索构建开放共享的智慧办公新生态。山...

jad反编译成java文件指令

达内java培训专家:7款开源Java反编译工具反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。达内java培训(java.tedu...

centos安装ikev2(centos安装ssh服务)

RockyLinuxRC1正式发布了,第一个完整版本距上个版本发布已经过去了一个多月的时间,从整体测试来看,基本和其他的主流发行版本区别不大,但由于后续不会推出稳定版本,所以还是有些担忧,从此次发...

【Unity3D插件】AVPro Video插件分享《视频播放插件》

揭秘元宇宙带火的产业!NFT发展迅猛、自研VR/AR硬件成主流|智东西内参从Facebook改名Meta,引爆元宇宙概念已经过去近一年时间。在这段时间里,与元宇宙相关的Web3.0、VR/AR、元...

100个非常实用的Shell拿来就用脚本实例

个经典实用的shell脚本,可自由复制,拿来即用建议收藏Shell作为一种命令语言和程序设计语言,其优势显而易见,shell脚本的优势在于它能实现自动化运维,能提高运维效率,帮助运维人员摆脱繁杂的操作...

java的小游戏 java小游戏完整代码

熬夜整理个Java经典小游戏项目开发源代码,含可执行程序及源码我相信现在有很多的小伙伴都已经看到了现在网上都在说Java找不到工作,其实我想说的就是现在的那些找不到Java工作的其实最主要的就是没有项...

Li2023ps2023免费磨皮滤镜插件Portraiture

最新Retouch4me合1来啦!AI智能修图磨皮神器插件简介文件名称:Retouch4me合1支持系统:Windows安装教程:在安装包里获取方式:在底部分享形式:百度网盘【文末提供下载方式】▼...

43. ExtJs控件属性配置详细

超详细的CMDB介绍--概念、架构、模型、表设计及开源选择概述今天主要介绍一下CMDB的一些基础内容,感兴趣的朋友可以看看~一、cmdb是什么?》》百度百科配置管理数据库(Configuration...