版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3、课程名称:JavaBeanJavaBean是整个JSP的核心部分,如果不会编写JavaBean则基本上等同于JSP不会,所以在JavaBean的编写中大家一定要把Java中所学习到的各个概念都要应用上,尤其是最后编写的DAO程序。3.1、JavaBean简介JavaBean使用java语言开发的一个可以重用的组件,在jsp开发中可以使用JavaBean减少重复的代码,使得jsp代码开发的更简洁,Jsp搭配JavaBean来使用,有以下优点:(1) 可以将HTML代码和java代码分离,将(HTML和)写到页面代码又多又乱(2) 将常用的程序写成组件,当使用时,只要调用组件来执行用户所要的功
2、能,不用再重复写相同的程序,节省开发时间。JavaBean实际上就是一个个的Java类,里面完全符合于面向对象的各个基本概念,在JSP之中可以通过javaBean完成一些细小的功能实现,也可以使用JavaBean封装一些公共的程序代码。在JSP中如果要想使用一个JavaBean,有如下几个原则(以简单JavaBean为准):· 所有的JavaBean必须放在一个包中;· 所有的javaBean必须声明为public class· 类中的所有属性都必须封装· 封装之后的属性通过setter、getter方法设置和获取· 如果现在是通过了JSP标签
3、进行JavaBean调用的话,则必须存在一个无参构造方法。范例:下面就定义了一个简单的javaBean (简单叫法 POJO 类)P.hbmu.demo ;public class SimpleBean private String name ;private int age ;public void setName(String name) = name ;public void setAge(int age)this.age = age ;public String getName()return ;public int get
4、Age()return this.age ;无参的构造方法,自动生成但是,在这里面一个问题就出现了,到底这个javaBean要保存在那里?如果要想解决这个问题,首先就必须掌握一下整个WEB目录的标准结构:WEB ROOTà虚拟目录就指向此文件夹|- WEB-INFà安全级别最高|- web.xmlàWEB的部署描述符|- classesà存放所有的*.class文件|- libà存放所有的*.jar文件|- pagesà存放所有的页面文件的|- frontà前台展示界面|- backà后台管理界面|- images
5、à存放所有的图片|- cssà存放所有的样式表文件|- jsà存放所有的Java脚本文件|- index.htm、index.jspà首页所以,JavaBean肯定是保存在WEB-INF/classes文件夹之中。JavaBean最终肯定也是以类的形式运行的,所以必须将*.java文件编译成*.class文件。3.2、调用JavaBeanJavaBean的调用有两种形式,一种是通过page指令导入,另外一种是通过标签指令导入,此时,一定要记住的是,在WEB-INF/classes文件夹本身也是一个CLASSPATH的路径。、通过page指令导入通过pag
6、e的import属性就可以导入编译好的*.class文件。_JavaBean_demo01.jsp<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo.*"%><%SimpleBean simple = new SimpleBean() ;simple.setName("张三") ;simple.setAge(30) ;%><h2>姓名:<%=si
7、mple.getName()%></h2><h2>年龄:<%=simple.getAge()%></h2>这个时候已经完成了调用的过程,实际上这一点与之前的导包操作没太大的区别。、通过标签指令导入在JavaBean的操作中,也可以通过以下的标签进行JavaBean的声明:use_JavaBean_demo02.jsp<jsp:useBean id="实例化对象的名称" class="包.类名称" scope="保存范围">范例:通过标签使用JavaBean use_Ja
8、vaBean_demo02.jsp<% page contentType="text/html" pageEncoding="GBK"%><jsp:useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/><%simple.setName("张三") ;simple.setAge(30) ;%><h2>姓名:<%=simple.getName
9、()%></h2><h2>年龄:<%=simple.getAge()%></h2>/<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo.*"%><jsp:useBean id="simple" scope="page" class=".hbmu.demo.SimpleBean
10、"></jsp:useBean><%simple.setName("张三") ;simple.setAge(30) ;%><h2>姓名:<%=simple.getName()%></h2><h2>年龄:<%=simple.getAge()%></h2>实际上,在使用以上的标签指令的时候,就意味着,程序将自动进行javaBean对象的实例化,JavaBean调用也是依靠了反射的操作原理,通过反射进行对象的实例化的实现。如果此时要想验证的话,可以直接在SimpleBe
11、an中定义一个无参构造方法,此构造方法中有一个输出的操作。package org.lxh.demo ;public class SimpleBean private String name ;private int age ;public SimpleBean()System.out.println("*") ;public void setName(String name) = name ;public void setAge(int age)this.age = age ;public String getName()return
12、;public int getAge()return this.age ;但是,这个时候有一个问题出现了,如果每次在更改javaBean的时候都要重新启动服务器则开发太麻烦了,所以此时,可以通过一个配置,让Tomcat自动的加载新的修改后的javabean,修改server.xml文件。<Context path="/mldn" docBase="D:mldnwebdemo" reloadable="true"/>使用reloadable之后,以后只要是JavaBean修改之后,服务器过一段时间都可以将其自动加载进来,但是
13、由于这种情况,服务器一直处于监听修改状态的操作,所以对于发布的服务器而言,这种性能是极其差的,所以这种操作只有在开发的时候才会使用,而真正运行的时候肯定将其设置成false,而且一定要记住的是,如果真的出现了重新加载之后,则之前所有设置的session都将小时,重新加载就跟重新启动没什么区别。2010-4-1 10:40:56 org.apache.catalina.core.StandardContext reload信息: Reloading this Context has started当出现以上提示的时候就表示服务器已经重新加载了新的内容上来。3.3、JavaBean与表单要想将Ja
14、vaBean的优点发挥出来,必须使用表单的操作,结合表单才可以发现JavaBean的优点。范例:现在有如下的一个表单 input_bean.html<form action="input.jsp" method="post">姓名:<input type="text" name="name"><br>年龄:<input type="text" name="age"><br><input type="s
15、ubmit" value="提交"><input type="reset" value="重置"></form>一定要注意,现在表单中的参数与SimpleBean中的完全一样,下面分两种情况进行Javabean的调用。范例:通过page指令调用 input.jsp<% page contentType="text/html" pageEncoding="GBK"%><% page import=".hbmu.demo
16、.*"%><%request.setCharacterEncoding("GBK") ;%><%SimpleBean simple = new SimpleBean() ;simple.setName(request.getParameter("name") ;simple.setAge(Integer.parseInt(request.getParameter("age") ;%><h2>姓名:<%=simple.getName()%></h2><h2
17、>年龄:<%=simple.getAge()%></h2>这种方式是一种较为常用的形式,但是这种方法本身也有问题,即:所有请求参数只能一个个的设置到了SimpleBean之中,如果现在一次性传递了多个参数过来,则肯定很麻烦。范例:通过javaBean完成 input_bean.jsp<% page contentType="text/html" pageEncoding="GBK"%><%request.setCharacterEncoding("GBK") ;%><jsp:
18、useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/><jsp:setProperty name="simple" property="*"/><h2>姓名:<%=simple.getName()%></h2><h2>年龄:<%=simple.getAge()%></h2><jsp:setProperty name=
19、"simple" property="*"/>含义如下:· 表示的是设置SimpleBean中的属性内容· name:就是访问的id· property:表示访问的属性,如果是“*”的话表示自动匹配现在的代码不用手工设置属性内容,而且如果是数字的话,会自动完成转换,那么这种机制实际上就是依靠的反射完成的,在设置的时候实际上是根据表单的参数名称找到了对应的setter方法,如果参数名称不合法,则无法设置,这一点与之前讲解的setter、getter的反射调用完全一样,那么更进一步的解释,对于setter、getter方法
20、本身是有其自己的命名方式的,必须与属性保持一致,所以也可以简单的理解为提交参数必须和属性名称一致,才可以完成设置,但是在这之中有一个需要注意的地方,就是如果对于输入数字的地点放,输入的是字符串,则将出现异常。3.4、属性的设置之前已经见过了一种属性的设置操作了,通过“*”完成自动的匹配功能,但是除了这种功能之外,在JavaBean中还有四种属性设置方法:· 自动匹配:<jsp:setProperty name="simple" property="*"/>· 设置一个指定属性:<jsp:setProperty nam
21、e="simple" property="name"/>· 指定参数:<jsp:setProperty name="simple" property="name" param="age"/>,将age参数的内容给name属性· 设置具体内容:<jsp:setProperty name="simple" property="name" value="张三"/>3.5、属性的取得如果现在要想
22、完成属性的取得操作可以使用<jsp:getProperty>语法完成。 value_bean.jsp<% page contentType="text/html" pageEncoding="GBK"%><%request.setCharacterEncoding("GBK") ;%><jsp:useBean id="simple" class=".hbmu.demo.SimpleBean" scope="page"/&g
23、t;<jsp:setProperty name="simple" property="*"/><h2>姓名:<jsp:getProperty name="simple" property="name"/></h2><h2>年龄:<jsp:getProperty name="simple" property="age"/></h2>通过这种标签已经可以完全的进行了属性的操作了。3.6、JavaB
24、ean的属性范围Javabean本身也是有四种属性范围的:page、request、session、application,但是与之前的四种属性范围不同的是,现在的page属性范围直接通过page指定即可,而不用通过pageContext指定,下面为了方便测试,做一个简单的JavaBean。四种范围在整个javabean中同时保存了4中属性范围而且这四种属性范围在使用的时候一般不建议修改以下以Count.java为例:package .humu.demo;public class Countprivate int count=0;public Count()System.out.p
25、rintln("*对象被实例化*");public void setCount(int count)this.count=count;public int getCount()return +this.count;1. page范围:只在当前页面保存 page_bean01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="pag
26、e"/><%System.out.println("-");%><h2>页面被访问了<font color="red"><jsp:getProperty name="count" property="count"/></font>次!</h2>每刷新一次对象都要被实例化,证明只在当前也中保存信息有效,跳转之后无效跳转后是否有效:<jsp:forward page="pageBean02.jsp">
27、</jsp:forward><% page language="java" import="java.util.*" pageEncoding="GB2312"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html> <jsp:useBean id="cou" scope="page" class=".hubmu.demo
28、.Count"></jsp:useBean> <body> <h3>第<jsp:getProperty property="count" name="cou"/>次访问</h3> </body></html>2.request范围(一次服务器跳转有效)范例:requestDemo01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="
29、;count" class="org.zxl.demo.Count" scope="request"/><%System.out.println("*");%><h2>页面被访问了<font color="red"><jsp:getProperty name="count" property="count"/></font>次!</h2><jsp:forward page="
30、;requestDemo02.jsp"/>requestDemo02.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="request"/><h2>页面被访问了<font color="red"><jsp:getProperty name="count&quo
31、t; property="count"/></font>次!</h2>每刷新一次对象只被实例化一次3.session范围:范例:SessionDemo01.jsp<%page contentType="text/html;charset=gbk"%><jsp:useBean id="count" class="org.zxl.demo.Count" scope="session"/><h2>页面被访问了<font color
32、="red"><jsp:getProperty name="count" property="count"/></font>次!</h2>4.application范围范例:ApplicationDemo01.jsp4、总结1、JavaBean可以封装Java程序2、JavaBean中自动设置形式对于接收表单参数比较方便3、JavaBean也存在四种属性范围注册验证:package .hbmu.demo;import java.util.HashMap;import java.ut
33、il.Map;public class Register private String name;private String age;private String email;private Map<String, String> errors = null;public Register() = ""this.age = ""this.email = ""this.errors = new HashMap<String, String>();public boolean isValida
34、te() boolean flag = true;if (!.matches("w6,15") flag = false; = ""this.errors.put("errorname", "用户名应该是六到十五位的字母或者数字");if (!this.email.matches("w+w+.w+.?w*") flag = false;this.email = ""this.errors.put("errormail",
35、 "输入的邮件地址不合法");if (!this.age.matches("d+") flag = false;this.age = ""this.errors.put("errorage", "年龄只能是数字");return flag;public String getErrorMsg(String key) String value = this.errors.get(key);return value = null ? "" : value;public String
36、 getName() return name;public void setName(String name) = name;public String getAge() return age;public void setAge(String age) this.age = age;public String getEmail() return email;public void setEmail(String email) this.email = email;<% page language="java" import="java.
37、util.*" pageEncoding="GB2312"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html><%request.setCharacterEncoding("GBK");%><jsp:useBean id="reg" class=".hbmu.demo.Register" scope="request">
38、;</jsp:useBean><body><form action="check.jsp" method="post">用户名:<input type="text" name="name"value="<jsp:getProperty name="reg" property="name"/>" /><%=reg.getErrorMsg("errorname")%>&
39、lt;br>年龄:<input type="text" name="age"value="<jsp:getProperty name="reg" property="age"/>" /><%=reg.getErrorMsg("errorage")%><br>email:<input type="text" name="email"value="<jsp:getProperty name="reg" property="email"/>" /><%=reg.getErrorMsg("errormail")%><br><input type="submit" value="提交"></form></body></html><% pag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西贵港桂平市南木镇卫生院招聘编外人员1人考试模拟试题及答案解析
- 2026湖南郴州临武县人民法院招聘审判辅助人员3人笔试备考试题及答案详解
- 2026年安庆市中小学(幼儿园)教师招聘考试备考试题及答案详解
- 2026江苏宿迁泗洪县第一人民医院招聘事业编制工作人员25人考试备考试题及答案解析
- 2026海关总署在京直属事业单位招聘应届毕业生23人笔试备考题库及答案解析
- 2026年贴片铝电解电容器行业分析报告及未来发展趋势报告
- 2026黑龙江牡丹江市穆棱市特聘农技员招募8人考试备考题库及答案解析
- 2026年航道管理行业分析报告及未来发展趋势报告
- 2026年异丁烯行业分析报告及未来发展趋势报告
- 2026年鸟嘌呤行业分析报告及未来发展趋势报告
- 2026年乡村医生培训考试试卷及答案(共十九套)
- 2026年湖北省武汉市辅警协警笔试真题及答案
- GB/T 47417-2026蜂蜜中水不溶物的测定
- 泰山教育联盟2026届高三年级4月考试模拟 政治试题(含答案)
- 2026年成都市新都区街道办人员招聘笔试模拟试题及答案解析
- 2026届广东省惠州市高三下学期模拟考试历史试题(含答案)
- 110kV变电站电气设备吊装专项施工方案
- 2025年江苏省南通市海门市小升初数学试卷
- 2026年云南省初中学业水平考试数学仿真卷(一)(含答案)
- GB/T 4348.1-2026工业用氢氧化钠成分分析第1部分:氢氧化钠和碳酸钠
- 质量管理培训及考核制度
评论
0/150
提交评论