javaweb编程-javaBean的概念与用法举例

javaBean:

—-web目录的标准结构:
WEB ROOT—>根目录,一般目录直接在其中配置;
        |-WEB-INF,整个web的安全目录;
                |-classes,存放所有的class文件,所有class文件必须放在包中!
                |-lib, 存放第三方的jar包;
                |-web.xml, 存放WEB的部署描述符;
        |-css,存放所有*.css文件;
        |-, 存放所有*.js文件;
        |-jsp, 存放所有*.jsp文件;
        |-index.html,欢迎页面;
—使用javaBean:
把写好的javaBean编译的*.class        文件放在classes目录下对应的包中;
但每次添加或修改javaBean都必须重新启动tomcat服务器,才能生效;
可以修改server.xml:完成自动加载,但损耗性能,项目部署时一定要关闭此功能:
tomcat的自动重新加载功能,重新加载时将清空容器中的所有内容,此时如果有sesion存在的话,也将被清空,那么使用session的实现将失效!实际开发中使用此功能,但项目后一定要关闭此功能!

这样修改server.xml后,tomcat服务器可以自己侦测到一个类是否被修改了!
//1. 使用page指令导入一个javaBean:
// hello.jsp:

Hello h = new Hello();

h.setName(“李三”);

h.setAge(23);

h.setSay(“Hello, World!”);

%>

// 2.使用jsp语法导入一个Bean:
// hh.jsp:

hello.setName(“李三”);

hello.setAge(23);

hello.setSay(“Hello, World!”);

%>

// 语法解析:

|-jsp:useBean,表示jsp中要使用javaBean,就是类;
|-id,表示当前使用的javaBean的实例化对象名称;
|-class,表示使用的classes目录下完整的包.类名称;
|-scope,表示此javaBean可以被访问的范围,包括:page,request,session,application;
这里的page不是pageContext,page是当前页面对象,pageContext是四种属性作用范围中最小的范围,用来定义当前页的上下文,可以手工配置当前页所有属性的保存范围!
此处是通过反射机制获得当前类的实例化对象的,Class.forName(“完整包.类”).newInstance(); ,但此方法要求必须实现了无参构造函数,
若没有实现,就会通过构造方法的反射机制通过可变参数的传递获取到有参构造!

——–javabean接收参数:
1.接收表单传递的参数:
//…….
2.使用javaBean的语法:
// bean.html提交表单数据:

用户名:

年 龄:

方言:

// 请求的jsp:bean.jsp:

request.setCharacterEncoding(“utf8”);

%>

姓名:

年龄:

方言:

// 以上发现,只有表单中的参数的name属性和javaBean中的属性的名称相同(实际上是set方法的后半部分的小写),则系统默认是该javabean的属性值!
// 这是用反射机制完成的,此过程只简单地判断表单中name属性和set方法的后半部分(setXy() —- xy)一致,则传递表单参数给javabean的
// set方法!

——设置javaBean中的属性:
方法1.使用自省的方法,最常用的方式:

|-name表示useBean中的id,即javaBean的对象名;
|-property=“*”,表示此后的叫阿vaBean的所有属性通过属性的名称自动完成值的传递!
这就是接收参数的方法;
方法2.指定特定的属性:

// 实例:
// html传递表单数据:

用户名:

年 龄:

方言:

// 被请求的jsp,用于接收参数给指定的属性赋值: bean.jsp:

request.setCharacterEncoding(“utf8”);

%>

姓名:

年龄:

方言:

方法3. 用特定的参数为指定的属性赋值:


就是把本来给a的值传给属性b,本来给b的值传给属性a;
实例://提交表单同上html:

request.setCharacterEncoding(“utf8”);

%>

姓名:

年龄:

方言:

方法4. 为单独的属性指定值:

// value指定的值可以是一个表达式也可以是个值!此时jsp不需要html传递表单数据!

request.setCharacterEncoding(“utf8”);

int aage = 20;

%>


实例:bean.jsp:

request.setCharacterEncoding(“utf8”);

int aage = 20;

%>

年龄:

// 结果:
姓名:张三
年龄:20
姓名:张三
年龄:20

——-javaBean的四种属性范围:
javaBean同样定义了四种属性范围,但javaBean的范围一旦确定不建议去修改,比如指定了‘page'范围,不用修改为其他范围;
1.page属性范围:
—实例:

package com.k187.demo;

public class Count

{ // 静态的是全局的属性

private static int count = 0;

private static int temp = 0; // 实例化当前类的次数

public Count()

{

++temp; // 每实例化一次

}

public int getCount()

{

return this.count++; // 返回count计数器的值

}

public int getTemp()

{

return this.temp;

}

}

// 该javaBean声明了两个static变量,在类中是全局的,所有对象将通过get方法访问其值;
// 下面是使用该javaBean的jsp:

request.setCharacterEncoding(“utf8”);

%>

对象实例化了:

访问了:

输出:
对象实例化了:22次
访问了:0次;
// 说明javaBean的属性page属性范围只在当前页面有效!
// 每次调用或请求page属性的jsp时(page页面对象重新实例化,他范围内的元素自然跟着实例化),都将重新实例化该javaBean;
// tomcat默认的classpath: $tomcat_home/Webapps/目录/WEB-INF/classes、或lib;
2.javaBean的reqeust属性范围:
对一个javaBean的属性范围设置要前后一致;
// 跳转前jsp:

request.setCharacterEncoding(“utf8”);

%>

对象实例化了:

访问了:

// 端跳转请求的jsp:

request.setCharacterEncoding(“utf8”);

%>

对象实例化了:

访问了:

// 结果: 发现属性值传递了过去!
// javaBean的requset属性范围将当前jsp页面的javaBean的属性传递到请求的jsp中,并可以直接在被请求jsp中访问javaBean的属性,而被请求的jsp将不必再实例化javaBean对象;
3.javaBean的session属性范围,此时将没有必要跳转来维持request范围,只要是当前session范围,所有页面都可以访问该javaBean对象的属性;
// 第一个访问该javaBean的jsp:

request.setCharacterEncoding(“utf8”);

%>

对象实例化了:

访问了:

// 第二个访问该javaBean的jsp:

request.setCharacterEncoding(“utf8”);

%>

对象实例化了:

访问了:

结果:
对象实例化了:1次  //只需要实例化一次
访问了:10次   // 无论哪个页面访问都将增加访问次数;
// 当前用户将保持对该bean的访问!
4.javaBean的application属性范围,
此种范围,保证所有用户都可以共享此bean的属性!即此bean只在启动时实例化,用户共享这个对象!

————javaBean应用:
1.查询数据库并真分页:work.jsp:

// 解决提交时的中文乱码问题

request.setCharacterEncoding(“utf8”);

%>

JSP + MySql分页应用

function changeColor(obj, color)

{

obj.bgColor = color;

}

function goInsert(thisurl)

{

window.open(thisurl, "用户管理", "width=600,height=420,scrollbars=yes,resizable=yes");

}

function goUpdate(thisurl)

{

window.open(thisurl, "用户管理", "width=600,height=420,scrollbars=yes,resizable=yes");

}

function goDelete(thisurl)

{

window.open(thisurl, "用户管理", "width=360,height=200,scrollbars=yes,resizable=yes");

}

会员管理系统


增加用户

private static final String CTRLURL = “contrl.jsp”;

private int line = 5;

%>

// 接收查询内容

String keyWord = request.getParameter(“keyword”);

if (keyWord == null)

{

keyWord = “”;

}

%>

Connection conn = dbc.getConn();

int allRow = 0; // 总匹配记录数!

int current = 1;

// 计算匹配的记录数:

String sql = “SELECT userID FROM members WHERE userID LIKE upper(?) OR userName LIKE upper(?) OR userClass LIKE upper(?) OR score LIKE upper(?) OR hotNum LIKE upper(?) OR joinDay LIKE upper(?)”;

allRow = countRow.getAllRecorder(conn, sql, 6, keyWord);

%>

// 当前页

String str = request.getParameter(“cp”);

if (!(“”.equals(str) || str == null))

{

// cp表示控制端,可以控制当前页码

current = Integer.parseInt(str);

}

// 每页行数

String str1 = request.getParameter(“ls”);

if (!(“”.equals(str1) || str1 == null))

{

// ls表示控制端,可以控制页显示行数

line = Integer.parseInt(str1);

}

%>

int a = (current – 1) * line; // 打印起点

int b = line; // 打印行数

sql = “SELECT userID, userName, userClass, score, hotNum, joinDay FROM members WHERE userID LIKE upper(?) OR userName LIKE upper(?) OR userClass LIKE upper(?) OR score LIKE upper(?) OR hotNum LIKE upper(?) OR joinDay LIKE upper(?) limit ” + a + “,” + b;

ResultSet rs = null;

rs = countRow.getResult(conn, conn.prepareStatement(sql), 6, keyWord);

%>

while (rs.next())

{

int userID = rs.getInt(1); // 用户编号

String userName = rs.getString(2); // 用户名

String userClass = rs.getString(3); // 用户等级

float score = rs.getFloat(4); // 积分

int hotNum = rs.getInt(5); // 精华贴数量

.util.Date joinDay = rs.getDate(6); // 注册日期

%>

会员编号 会员姓名 会员级别 会员积分 精华贴数 注册日期 操作

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《javaweb编程-javaBean的概念与用法举例
本文地址:https://www.zhiletu.com/archives-197.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微