总结:
1.severlet容器是通过JavaBean中的属性方法名来获取属性名的,然后根据此属性名来从request中取值
2.JavaBean中属性方法的命名,set后的名称要与你从request中传递过来的属性要一致,除第一个字母不区分大小写外,其他部分的大小写有严格的区分。
3.设置JavaBean属性的顺序是按照属性方法在JavaBean中出现的先后顺序来设置的。

1.实验:一个javabean程序+一个jsp页面// javabeapackage mycom;

public class Test
{
private String name;
private int age; public void setAge(int age)
{
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
} //jsp页面
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>

  <jsp:useBean id="test" class="mycom.Test" scope="page">
    <jsp:setProperty name="test" property="*" />
  </jsp:useBean>

<!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=gb2312">
<title>测试</title>
</head>

<body>
<%=test.getName()%>
</body>
</html>

2. 实验方式,通过改变url的方式,进行参数的传递,然后,查看jsp页面中的结果:

 我使用的resin,将上面的文件按要求放好后(这点俺就不强调了哈)。启动resin后,我们在浏览器中输入:http://localhost/mytest.jsp?name=mbq&age=21然后我们就可以看到显示的内容是mbq,这表示已经关联成功了。我现在想的第一个问题就是,request中的参数和bean中的属性名称到底有什么关系,容器是据什么来判断的?好的,我们先假设容器是根据请求中的参数来寻找bean中的属性设置方法,不过这有点问题了,就是如果请求中的参数对应的属性设置方法没有,那么调用bean的属性方法的话就会出错!基于此我们就反过来,就假设容器是根据bean的属性设置方法名来获得请求参数,这样即使请求参数没有的话,使用requset.getParameters(String pname)也只是返回null,而不是报错。
ok,假设成立了,以第二种假设来做,改Test.java文件,将设置姓名的属性方法名改为setNameTxt(String name),然后编译下。接着删除work目录下的所有文件,然后重新启动resin(以后的每次操作都这样做)。我们同样在浏览器中输入:http://localhost/mytest.jsp?name=mbq&age=21,我们在浏览器中看到的结果是null。然后我们打开jsp编译后的源程序,发现没改之前源程序中的request.getParameters("name")变成了request.getParameters("nameTxt")。很明显,这证明了我们的假设,即容器是根据bean的属性设置方法来取参数,如果有则设置该bean的属性。注意这里是属性设置方法,而不是属性!不信,你可以将属性name改成任何名称都是可以的。
好,现在来考虑第二个问题,那就是属性设置方法名的命名有什么要求?由于JavaBean中的方法都是由一系列set和get方法组成的(当然还有其他的,比如is方法)。是不是一定要是set开头呢?事实能说明一切,我们把上面的bean的属性方法该为mysetName(String name),然后编译重启resin,在浏览器中一样输入:http://localhost/mytest.jsp?name=mbq&age=21,发现结果仍然是null,再看编译后的源代码,发现request.getParameters("name")不见了,呵,因为容器没有发现该set方法嘛,所以容器是找所有以set方法开头的方法。由前面可知,那紧跟在set后面的应该是某个属性的名字了,对,是这样的,set后面的字符串就应该是bean中某个属性的名字,比如setName中的name就是该bean的属性。那后面的属性名的大小写有什么要求呢?我们改写bean的属性方法为setNameValue()和setnamevalue()试试,属性name不用改还是用它。然后在浏览器中输入http://localhost/mytest.jsp?name=mbq&age=21,我们现在不管结果,我们关心的是源码哈,然后看编译后的源码,发现getParameters的参数变成了nameValue,使用两个的效果是一样的。这样外面又可以得出:容器在通过属性设置方法取属性名的时候自动将第一个字母转换成小写了,这个其实很好理解。因为java中的方法命名都是第一个单词小写,后面的单词第一个字母大写来约定的,所以为保持这个约定,容器自动的将第一个字母换成小写了,虽然使用大小写没区别,但是都是约定成俗的嘛~~~
第三个问题就是顺序的问题了。这个现在也好说了,我们交换bean中setName和setAge两个方法的位置。然后编译,重启resion,照样输入前面的内容。再查看编译后的源文件,发现没改之前的先取age,然后再取name,变成了现在的先取name,然后再取age了。可见容器在从request中取参数的时候是根据bean中属性设置方法的先后顺序来取的。另外类型转换的问题,由于从request中取出的所有属性都是字符串形式的,容器的内在机制会自动把这些字符串转换成属性设置方法中的参数对应的类型。

  

jsp页面传递参数是如何与javabean进行关联的的更多相关文章

  1. JSP页面传递参数乱码问题整理

    1.JSP页面之间传递中文参数乱码 (1).a.jsp中正常传递参数,b.jsp 中 <% String projectName = new String(request.getParamete ...

  2. javascript通过url向jsp页面传递中文参数乱码解决方法

    解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java&quo ...

  3. JSP重定向传递参数

    我一个JSP程序,要实现前台提交数据给后台处理后,后台jsp自动跳转到另一个jsp页面,这种方式也叫重定向,重定向的方法有多种,暂时我试过的并且能成功的有两个: 一种是用 response.sendR ...

  4. <jsp:param>传递参数,出现乱码问题

    今天在学习<jsp:forward>和<jsp:param>时,用<jsp:param>传递参数时,出现乱码问题,部分代码如下: 1 <jsp:forward ...

  5. 前端 使用localStorage 和 Cookie相结合的方式跨页面传递参数

    A页面 html代码: 姓名:<input type="text" id="name1"> 年龄:<input type="text ...

  6. router-link跳转页面传递参数及页面刷新方法

    使用router-link传参: 第一种: 路径:http://localhost:8080/goodListP?id=2 跳转的页面获取参数: this.$route.query.id 第二种: 路 ...

  7. Jquery Javascript 跳转页面传递参数以及获取url的参数

    传递参数: window.location='editCourse.html?dataId='+dataId+''; 获取url中的参数(封装的方法):    function getUrlParam ...

  8. ionic 页面传递参数

    1.使用AngularJS自带的$cacheFactory服务 $cacheFactory 从字面直译即为缓存工厂,可以用它来生成缓存对象,缓存对象以key-value的方式进行数据的存储,在整个应用 ...

  9. jsp页面获取参数的方法(url解析、el表达式赋值、session取值)【原创】

    最近使用myEclispse做网站,使用jsp+js+css做页面,网站中常用到从列表进入详情页面的跳转,下面对详情页面的值填充方式做一个简单总结: 1.url中使用request获取参数 jsp上方 ...

随机推荐

  1. Firefox地址栏样式设定

    我希望把Firefox的界面调整为chrome-like,一个关键的地方就是地址栏:地址栏和tab之间的距离太大了,地址栏和页面本身之间的距离也太大. 设定方法是在FF中安装stylish插件,然后加 ...

  2. 解决mysql不能远程登入的问题

    mysql远程不能登入,问题就在于当时设置的账号只限制本地访问,mysql默认也只是本地访问. 之前的设置: 通过命令行登录管理MySQL服务器(提示输入密码时直接回车): mysql> /us ...

  3. JavaScript中判断日期是否相等

    问题 做一个节日提示网页,首先获得当前日期,然后与最近的节日比较,如果恰好是同一天,提示"XX节快乐!"否则,提示"离XX节还有X天".判断是否恰好同一天的时候 ...

  4. 【POJ】4007.Flood-it!

    原题戳这里 题解 搜索是个好东西,不是人人都会搜 迭代加深,然后用一个函数估值,值是除了和左上连通的部分还有几个颜色不同的块,如果走的步数加上估值大于当前枚举的深度就跳出 代码 #include &l ...

  5. USACO 6.2 Calf Flac

    Calf Flac It is said that if you give an infinite number of cows an infinite number of heavy-duty la ...

  6. 8-3 Bits Equalizer uva12545

    题意: 给出字符串s包含'0' '1' '?'; 再给出字符串t只包含01: 现在我们可以对S做三个操作:把0变成1,把?变成0或1,任意两个位置交换: 问最少操作几次s == t: 贪心 默认除去那 ...

  7. Ruby windows7安装配置(最新版本)

    1.下载最新版本的rubyinstaller并安装http://rubyinstaller.org/downloads/ 如下图所示设置路径,我安装时将所有选项都打够了,免除了后面需要什么配置麻烦. ...

  8. quote函数什么意思,怎么用

    转自: https://blog.csdn.net/qiqiyingse/article/details/70046543 quote函数 属于urllib库里面的一个函数 屏蔽特殊的字符.比如如果u ...

  9. android viewStub

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 开发应用的时候,需要根据条件决定显示某个视图, 这个时候可以用ViewStub Stub ...

  10. 浅谈 PHP 中的多种加密技术及代码示例

    信息加密技术的分类 单项散列加密技术(不可逆的加密) 属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数 MD5 string md5 ( string $str ...