参考:http://zhaoyuqiang.blog.51cto.com/6328846/1134056
1、javaBean是什么
JavaBean是使用Java语言开发的一个可重用的组件,其本身是一个类,属于Java的面向对象编程。在jsp的开发中可以使用javaBean减少重复代码,使整个jsp代码的开发更简洁。使用JavaBean必须要满足的条件是(重点记忆):
- 所有的JavaBean类必须要放在包中
- 类必须是public
- 类中所有的属性必须要封装(就是用private修饰)
- 封装的属性如果需要被外部所操作,必须要编写setter、getter方法
必须要含有不带参数的构造方法
一个JavaBean示例如下:package javaBean01; //必须放在包中 public class SimpleBean { private String name; //必须封装 private int age; public SimpleBean(){ //无参构造方法 } public void setName(String name){ this.name=name; } public void setAge(int age){ this.age=age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } }
2、使用JavaBean
既然有javaBean了,那我们的jsp怎么使用javaBean呢?
(1)new实例化Javabean
把Javabean当成一般的Java类,通过new实例化,但是实例化之前一定要导入Javabean这个类
示例:
<%@page import="javaBean01.simpleBean"%><!-- 导入包-->
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'javaBean_01.jsp' starting page</title>
</head>
<body>
<%
simpleBean sb=new simpleBean();
sb.setName("Tom");
sb.setAge(21);
%>
姓名:<%=sb.getName() %><br>
年龄:<%=sb.getAge() %><br>
</body>
</html>
执行结果:
(2)<jsp:useBean>
指令
指令语法为:
<jsp:useBean id="实例化对象名称" scope="保存范围" class="包.类名称"/>
- id:表示实例化对象的名称
- scope:表示此对象保存的范围,一共有四种:page、request、session和application
class :JavaBean对象所对应的包.类名称
示例(javaBean_01.jsp):
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<jsp:useBean id="javabean" scope="page" class="javaBean01.simpleBean"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'javaBean_01.jsp' starting page</title>
</head>
<body>
<%
javabean.setName("vivien");
javabean.setAge(21);
%>
姓名:<%=javabean.getName() %><br>
年龄:<%=javabean.getAge() %><br>
</body>
</html>
浏览器显示:
这里id的值相当于实例化了一个对象。class就是我们的包.类名称,实际上在使用以上标签的时候,都会自动调用javaBean中的无参构造方法,其实这里是使用反射机制进行的实例化
注意:当javaBean也就是SimpleBean.java这个页面修改后,一定要重启服务器,否则不会显示修改内容。
(3)setProperty
第一种使用示例:
这个是和表单关联的,首先新建一个含有表单的form.jsp
<body>
<form action="jsp/work.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<!--这里的name属性的值一定要和JavaBean中的name名字相同,age也是如此-->
<td><input type="text" name="name" value=""></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input value="提交" type="submit"></td>
</tr>
</table>
</form>
</body>
work.jsp:
<body>
<jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
<!--在这里因为前面form中的name、age和Javabean中一样,所以进行了自动匹配,property="*",表示匹配的属性是所有的,如果property="name",那么只匹配name,age值就为空,这也是接下来讲的第二种-->
<jsp:setProperty name="sb" property="*" />
用户名:<%=sb.getName() %><BR>
年龄:<%=sb.getAge() %><BR>
</body>
结果:
第二种使用示例:
与第一种差不多,区别就是指定了匹配哪些属性
其他不变,把work.jsp的property改为age,表示只匹配age:
<body>
<jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
<jsp:setProperty name="sb" property="age" />
用户名:<%=sb.getName() %><BR>
年龄:<%=sb.getAge() %><BR>
</body>
结果显示:
第三种使用示例:
这种方法和表单无关了,只是手工设置
work.jsp修改如下:
<body>
<jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
<jsp:setProperty name="sb" property="name" value="lisi"/>
<jsp:setProperty name="sb" property="age" value="20"/>
用户名:<%=sb.getName() %><BR>
年龄:<%=sb.getAge() %><BR>
</body>
显示结果:
尽管在form.jsp中设置了name=”zhangsan”,age=11,但是在work.jsp因为通过value重新设置了值,所以显示不同
第四种使用示例:
这种方法一般用于获得request参数里面带有的值
form.jsp其他地方不变,改变action属性添加newname参数:
<form action="jsp/work.jsp?newname=vivien" method="post">
......
work.jsp:
<body>
<jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
<jsp:setProperty name="sb" property="name" param="newname"/>
<jsp:setProperty name="sb" property="age"/>
用户名:<%=sb.getName() %><BR>
年龄:<%=sb.getAge() %><BR>
</body>
显示结果:
(4)getProperty
作用:获取指定Javabean对象的属性值
<jsp:getProperty name="JavaBean实例名" property="属性名"/>
work.jsp代码:
<body>
<jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
<jsp:setProperty name="sb" property="*"/>
用户名:<jsp:getProperty property="name" name="sb"/><BR>
年龄:<jsp:getProperty property="age" name="sb"/><BR>
</body>
3、工作路径问题
在项目底下有如上图所示的结构,jsp是jsp页面,js是javascript小脚本,css是样式,images是图片存放区,index.jsp一般作为主页面显示。WEB-INF里面的lib是存放jar包的,classes是存放.java文件的。
大家在学习java的时候应该都知道,.java文件必须编译成.class文件才能使用。javaBean本身是一个.java文件,那么它被编译成.class文件后放在哪儿呢? 就放在上图中的classes中,打开这个文件夹,可以看到一个javaBean01的文件夹,这个文件夹实际上是SimpleBean.java的包。这个文件里面才是.class文件,也就是我们的SimpleBean.java。
实际上在WEB-INF中的lib和classes文件夹相当于一个默认的classpath,classpath是类执行时所需要的一个重要的环境变量属性,当Tomcat启动后,WEB-INF的lib和classes都会自动配置到classpath中。
注意:如果JavaBean中文件内容发生了更改,一定要重启服务器!!!这个很重要,今天碰到这个问题,因为没有重启服务器,一直报错!!