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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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页面中的结果:

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

  

 本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3618064.html,如需转载请自行联系原作者

相关文章
|
2月前
|
Java 应用服务中间件 开发工具
如何使用IDEA创建JSP页面
如何使用IDEA创建JSP页面
158 0
|
4月前
|
Java 数据安全/隐私保护
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
该博客文章通过JavaBean组件和JSP动作元素`<jsp:forward>`与`<jsp:param>`的使用示例,演示了用户登录流程,包括登录信息的提交、验证以及根据验证结果进行的页面跳转。
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
|
7月前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
62 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
|
7月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
64 5
|
7月前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
61 2
|
7月前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
175 1
|
4月前
|
存储 Java
JSP中实现留言页面的编写并将留言信息展示出来
这篇文章介绍了如何在JSP中编写留言页面,并通过JavaBean类存储用户留言信息,同时展示了留言信息的展示方法。
JSP中实现留言页面的编写并将留言信息展示出来
|
4月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
4月前
|
Java
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
该博客文章讲解了JSP中`<jsp:getProperty>`和`<jsp:setProperty>`动作的使用方法,包括它们的语法格式和如何在页面中使用这些动作来获取和设置JavaBean对象的属性值,并通过图书信息的填写和展示示例进行了演示。
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
|
4月前
|
Java
编写一个jsp页面,利用Scriptlet编写一段计算代码,要求用零作为除数,并使用page指令将错误信息显示在另外一个jsp页面,产生的错误信息为“错误,不能用0做除数”
该文章展示了如何创建一个JSP页面,使用Scriptlet编写包含除零操作的计算代码,并配置page指令将错误信息重定向至另一个JSP页面进行显示。
编写一个jsp页面,利用Scriptlet编写一段计算代码,要求用零作为除数,并使用page指令将错误信息显示在另外一个jsp页面,产生的错误信息为“错误,不能用0做除数”

相关课程

更多