总结: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中取出的所有属性都是字符串形式的,容器的内在机制会自动把这些字符串转换成属性设置方法中的参数对应的类型。

  

转载于:https://www.cnblogs.com/haore147/p/3618064.html

jsp页面传递参数是如何与javabean进行关联的相关推荐

  1. jsp页面传递特殊字符的参数

    jsp页面传递特殊字符的参数 window.location.href = "modules/xx/test.jsp?name=" +name+ "&classN ...

  2. action中获取jsp页面的参数的方法

    实例:现在jsp页面传递一个名为username的参数到action中 url:   http://localhost:8080/StudentSystem/role_list.action?user ...

  3. uniapp实现onShow获取页面传递参数方法

    实现onShow获取页面传递参数 或者可以说在任意位置都可以获取页面传递参数 废话不说,直接代码 onShow() {let pagearr = getCurrentPages();//获取应用页面栈 ...

  4. 外部h5跳转小程序页面传递参数

    h5页面传递参数:h5页面的参数是点击进入该页面利用api直接获取code跟click_id. 利用写好的接口将获取到的小程序码添加到a标签的路径进行跳转 小程序接收h5传过来的数据:在app.js中 ...

  5. SpringMVC(2)中返回值void的跳转页面传递参数

    直接上核心代码 package controller;import java.io.IOException; import javax.servlet.ServletException; import ...

  6. 【vue-router①】router-link跳转页面传递参数 - 进击的前端之路(偶尔爬坑java小路) - SegmentFault 思否

    在vue项目中,往往会遇到这样的情况,就是要实现在一个循环列表中,点击其中一条跳转到下个页面,然后将这一条的相关数据带到下个页面中显示,这是个循环列表,无论点哪一条都是跳到相同的页面,只是填的数据不一 ...

  7. layui两个html传值,Layui(二级页面) 弹出层打开页面|传递参数

    一级弹出层:弹出打开页面 layer.open({ type: 2, title: '添加用户', content: '../user/goAdd', area: ['460px', '450px'] ...

  8. 跨页面传递参数与数据回填

    开发工具与关键技术: VisualStudio 2015 mvc 作者:杨泽平 撰写时间:2019.7.12 跨页面回填,在回填方法里也是用的比较多的一种,他有区别于其他回填方法的就是,他需要在不同的 ...

  9. java中jsp怎么传递参数_急!Java问题,Java如何获得jsp传递的参数??

    我的jsp页面:while(rs.next()){%> "target="_blank"> 我的jsp页面: while (rs.next()) { %> ...

最新文章

  1. 你是否对它有一种责任感
  2. oracle中 关于触发器,oracle 闪回关于触发器的bug
  3. 如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计
  4. mysql实现动态查询_mysql 实现动态查询
  5. LDD3中snull网络驱动程序的使用
  6. mysql8事务级别_Mysql几种事务隔离级别
  7. 【Marva Collins' Way】第三章
  8. linux怎么看java环境变量_linux下配置jdk环境变量以及查看java版本
  9. vue项目跨域问题完全解决
  10. 不同表_一个公式搞定数据信息按类别拆分到不同工作表
  11. 高质量C编程00-汇总
  12. 视频源与广播电视制式
  13. 学生HTML个人网页作业作品——湘菜美食网页设计作品(12页) 美食网站设计与实现
  14. php通过身份证判断性别
  15. 反甩锅成功后思考——RST 报文
  16. VBA-EXCEL:控制WORD文件
  17. Maven:你还在手动导包吗?带你了解Maven的前世今生(尚硅谷详细笔记)
  18. S3D 2.0 截图
  19. 旋转编码器(rotary encoder)旋转方向的判断
  20. dellT440和T620重装系统问题总结

热门文章

  1. CentOS7攻克日记(三) —— 安装Python3.6
  2. springDatasolr 排序
  3. [原创]Zynq SDIO WIFI SotfAP调试
  4. ABAP术语-Object Name
  5. LeetCode之283. Move Zeroes
  6. python之路目录
  7. 添加本地图层出现要求cross domain policy的错误
  8. Android性能优化——腾讯、字节、阿里、百度、网易等互联网公司项目实战+案例分析(附PDF)
  9. 传统的Linux中IPC通信原理
  10. 关于c++类中的指针成员问题