html jsp servlet 页面之间传参数,与设置属性 的区别

parameter   attribute这两者翻译成中文是,参数,属性;在本次项目中,我发现这两者作用的相同之处和不同之处,以及区别,查了一些资料后,总结一下这两者的作用以及区别。

(1)首先httpservletRequest 有setAttribute方法,却没有setParameter方法;
(2)很显现,parameter是作为参数传递的,属于页面之间的连接,传递值
(3)什么时候用到attribute呢,在WEB内部(通俗一点也就是一个应用里面)转发或者重定向(注意这个重定向有两个方向1.跨域:就是你从这个应用web1跳另一个应用web2,包括session会失效。2.不跨域:同一个应用内作用域都是有效的,需要注意的是request的生命周期在一次请求结束的时候,session则是在关闭浏览器或者跨域重定向时,这时候已经不在一个应用了,session是没有死掉,但不在一个作用域了),用于设置传递值的属性的。
个人理解:
request.getParameter和request.getAttribute
(1)request.getParameter,首先想一下在什么时候用到这个语句,页面提交数据,url传参,页面之间传参数,这些会要用到request.getParameter,换句话说我们通过这句话得到的是,通过容器||的实现来获得通过类似get或者post方式提交的数据,注意是通过容器,也就是说页面在web容器表面,就想一个花瓶的表面用于显示数据。
(2)request.getAttribute干什么用呢,用于在web容器内部流转,处理数据的作用,怎么说好像不太明白。

那这样说,Parameter里面的值,比如表单,textarea,select,传过来的值,都是字符串String,页面只有string,而Attribute里面放的是Object ,Object很强大,适应各种类型转换,转换成我们需要的数据类型,做相应的数据(业务)处理,这样来看就很清晰了
request.getParameter方法传递的数据是HTTP请求数据,从web客户端到web服务器端的,代表http请求数据

本次项目我做的是CRM的内网项目,有的地方需要用到jsp页面之间传参,不需要到服务器的想到了这点,我发现这两者到底是啥区别?
"a.jsp?id=${c_id}"===>b.jsp页面之间传参数get方式,url后跟数据,哪在b.jsp怎么取数据简单${param.id}
这显然是web容器表面之间传递数据,setAttribute死应用服务器把这个对象放在该页面所对应的一块内存中去,当转发重定向时,应用服务器把这块内存拷贝到另一个页面所对应的内存中,这样getAttribute才能拿到对应值,这种传对象什么方便,request和session一样,只是对象在内存在内存中的生命周期不一样

这样也引发了一个问题,session是在浏览器关闭是死掉,那也就是说如果我们session里面放太多值,应用就会很消耗资源,或者很重,但session好用,比如这次项目,我在多个页面之间跳转时,需要有几个无关紧要的数据,作为参数传递吧太麻烦,而且要好处理中文乱码,很苦恼,一个session解决问题,session生命周期与你转发跳转超级链接无关(跳出web应用除外),我可以在应用内任何页面拿session的值


还有两点:url后跟参数属于get方式提交,数据会经过浏览器编码,到了容器内就编码格式就变了,如果是数字不会变,但是中文的话:
String str = newString(request.getParameter("id").getBytes( ISO -8859-1 ),"UTF-8");这样处理一下就不会乱码了
form表单默认的是get方式提交的,post提交加上这句req.setCharacterEncoding设置编码格式统一就可以了
get是这句resp.setCharacterEncoding

后台传过来数据在select标签默认选择${cus.id=='1'?'selected="selected"':''}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值