上一篇:[asp]让你知道codepage的重要,关于多语言编码 >>
Jsp+JavaBean制作站点图片计数器
完成时间:2004.12.28
版权申明:仅授权http://www.blueidea.com,转载请注明版权与作者
联系方式:fendou2005@hotmail.com
一、写在前面
自从8月份离开学校,来当老师,老久没动程序了,今天为了练一下手,写了一个简单的图片计数器,发布到这里。麻雀虽小,但五脏俱全,对初学者是一个简单明了的例子,从中可以学到javabean的一般用法。
二、环境配置并设置程序运行相关目录
1、下载j2sdk-1_4_2和web服务器兼jsp引擎的jakarta-tomcat-4.1.31(或更高版本),并进行安装,详细方法参考网上资料。下载地址参考附录。
2、在%tomcat_home%\webapps\目录下面建立counter目录(这里设%tomcat_home%为c:\tomcat),并在counter目录下建立db、images和web-inf三个子目录,分别用于放置本项目中存储记数的counter.txt文件,项目用到的“数字图片”,以及本项目的配置目录。在web-inf项目配置目录中建立classes和lib目录,分别用于存放本项目javabean编译后的*.class类文件,项目用到的*.jar库文件(例如,我们如果连接mysql数据库时,会用到mysql.jar文件)。将%tomcat_home%\webapps\root目录下的web.xml文件拷贝到我们当前项目%tomcat_home%\webapps\counter\web-inf目录当中。示例如下图:
screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>
screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>
screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>
3、将下面代码行的*.jsp文件保存到%tomcat_home%\webapps\counter目录下,将java bean文件编译产生的class文件保存到%tomcat_home%\webapps\counter\classes目录当中。如上图所示。
4、在浏览器地址栏输入:http://localhost:8080/counter/counter.jsp进行访问。如下图:
screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>
5、几点应注意的问题:
许多朋友在应用tomcat开发的时候,往往将项目放置的位置搞错,常常将其放置在%tomcat_home%\webapps\root下面,将自己的class放在%tomcat_home%\webapps\root\web-inf\classes中,这样做,同样可以通过在浏览器地址栏输入:http://localhost:8080/yourproject进行访问,但实际上这样的放置是个错误的做法,root目录是tomcat这个web服务器自身所带相关文件的一个根目录,并不是放置自己建立的项目的目录,我们的项目应当放到%tomcat_home%\webapps\这个目录下面。其实webapps这个词是web applications是(web应用程序群)的一个缩写,那我们的项目作为一个完整的应用程序理所当然放在它的下面了。
web.xml是用来定义我们某个项目的一些相关配置信息,所以也要记得将它复制到我们的项目目录中来,虽然有时候我们并不需要修改这个文件,但为了保持项目的完整性,我们最好这样做,以便以后项目的转移或升级的时候方便设置。
其次是lib(library的缩写)目录的设置,很多朋友喜欢将自己用到的*.jar文件直接放在%tomcat_home%/lib目录下面,诚然,这样做也是可以使程序正常工作的,但这样做其实是将我们所用到*.jar目录共享给了%tomcat_home%\webapps目录下所有的项目,就好象我们在设置环境变量时,设置系统变量和用户变量一样,如果我们按照上面的方法进行*.jar文件的放置,就如同设置了一个系统变量,是应用于我们整个%tomcat_home%/webapps目录下的所有项目,我们并不提倡这种做法,因为:第一,通常我们希望在不更改tomcat本身的情况下,使得项目能够正常工作,如果有多个人在一个tomcat服务器下开发不同的项目,大家都不希望去修改tomcat本身的一些设置,而是希望能在自己项目所在的目录内进行一些设置而适应tomcat服务器,并不是要tomcat服务器来适应你的项目。第二,通常jsp空间提供商提供给我们的是一个虚拟目录,不管他们用的是那种jsp的web服务器,resin,tomcat jboss或者weblogic等等,那么你的项目一旦上传就要能适应提供商的jsp空间环境,我们不可能去修改提供商的jsp web服务器引擎。说明一点,这里为了简单期间,我们并没有介绍tomcat的虚拟目录配置,我们的项目也没有放置到虚拟目录当中,当然,作为个人学习或开发,这完全是不必要的,有兴起的朋友可以尝试去做一下。
三、javabean知识准备
1、javabean(我们简称“bean”)是java程序的一种元件结构,同时也是java类的一种。一个标准的bean通常具有以下几个特征:
a.它是一个公开的类。
b.它的构造方法没有传入参数。
c.它用一组“get”类型的公开函数(如下面程序中的getcount()),提供外界来撷取内部的属性值。
d.若要改变bean内部属性值时,则是利用一组“set”类型的公开函数(如下面程序中的setcount(int count))来做设定。
2、使用bean的优点:
a.bean本来的中文意思就是“豆”的意思,所以其实它就是一些java程序片段,用来实现某些功能,实现对逻辑处理的隐藏、封装,从而实现功能模块的重复引用,提高项目开发的效率,它相当于asp中的com组件。
b.配合jsp中使用bean的标签指令语法(如下面程序中的<jsp:usebean id="peoplecount" scope="request" class="count.counter">)中的scope属性,我们可以让bean对于不同的应用程序需求,拥有不同的生命周期,从而实现web应用程序的复杂实现。例如,在本“图片记数器”的例子当中,我们的bean的scope属性值为request,则表示我们的bean的生命周期存在于每次从“数字计数器”页面获取“记数”的这一过程当中。
3、bean的使用方法
a.bean语法格式
<jsp:usebean id="beaninstancename"
scope="page request session application"
class="package.class"
type="package.class"
other elements
/>
<jsp:usebean>动作用来查找或实例化一个jsp页面使用的javabean组件。在程序中可把逻辑控制、数据库操作放在javabean组件中,然后在jsp文件中调用它,这样可增加程序的清晰度及程序的可重用性。
b.bean属性详解参考
id="beaninstancenam 用来绑定bean实例的变量。
scope="page request session application" 表示该bean的有效范围。
page:实例的有效范围是当前页面。
request:实例的有效范围是一个单独客户请求的生命周期内。
session:实例的有效范围是整个用户会话的生命周期内。
application:实例的 有效范围是应用的生命周期内。
class type="package.class" 表明该bean具体是对哪个类的实例化。
c.bean使用注意事项
<jsp:usebean>中class属性值应该是“包名.类名”,我在做的时候开始因为没有将类放到一个包中,而直接放到%tomcat_home%\webapps\counter\web-inf\classes\目录下面,结果出现找不到类的情况,后来加了一个count包,问题成功解决(即就是将类放在了%tomcat_home%\webapps\counter\web-inf\classes\count目录下)。
d.配合标签<jsp:setproperty>
jsp:setproperty这个标签位置是如下状况:
<jsp:usebean>
<jsp:setproperty name="beaninstancename"
property="*"
property ="propertyname"
property ="propertyname" value=" propertyvalue"
property ="propertyname" param=”parametername”
/>
</jsp:usebean>
该动作标签的含义是使用bean中相应的setproperty()方法设置一个或多个属性的值,值的来源是通过value属性明确给出,或者利用request对象中相应的参数。
例如在我们后面的counter.java这个bean中,它里面有一个类型为int的私有变量count是可以被我们convetimg.jsp这个jsp文件使用的属性,则我们这个bean中必须有一个public方法setcount(int count),<jsp:setproperty>动作使用的就是该方法。事实证明我们是那样做的。
jsp:setproperty动作有下面四个属性,分别加以说明:
name="beaninstancename" 这个属性是必须的,用来表明对哪个bean实例执行下面的动作,这个值和动作<jsp:usebean>中定义的id必须对应起来,包括大小写都必须一致。
property="*" property ="propertyname" 这个属性是必须的,用来表示要设置哪个属性。如果property的值是"*",表示用户在可见的jsp页面中输入的全部值,存储在匹配的bean属性中。匹配的方法是:bean的属性名称必须与输入框的名字相同。
value=" propertyvalue" value属性是可选的。该属性用来指定bean属性的值。字符串数据会在目标类中通过标准的valueof方法自动转换成数字、boolean、boolean、byte、byte、char、character。例如,boolean和boolean类型的属性值(比如“true”)通过boolean.valueof转换,int和integer类型的属性值(比如“42”)通过integer.valueof转换。value和param不能同时使用,但可以使用其中任意一个。
param=”parametername” param是可选的。它指定用哪个请求参数作为bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给bean属性的set方法。因此,你可以让bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
e.配合标签<jsp:getproperty>
jsp:getproperty这个标签位置是如下状况:
<jsp:getproperty name="beaninstancename" property="propertyname"/>
这个动作标签的含义是提取指定bean属性的值,转换成字符串,然后输出。该动作实际是调用了bean的getproperty()方法。
按上文提到的们后面的counter.java这个bean,它里面有一个类型为int的私有变量count是可以被我们convetimg.jsp这个jsp文件使用的属性,它必须有一个返回类型为int的public方法getcount()。<jsp:getproperty>使用的就是这个方法。事实证明我们也是那样做的。
jsp:getproperty动作属性,分别加以说明:
name="beaninstancename" 这个属性是必须的,用来表明对哪个bean实例执行下面的动作,这个值和动作<jsp:usebean>中定义的id必须对应起来,包括大小写都必须一致。
property="*" property ="propertyname" 这个属性是必须的,用来表示要获取哪个属性。
四、程序代码
counter.java
//功能:将“数字”转换为“数字图片”,并将“数字图片名称”存储在数组对象当中
package count; //定义此bean程序编译后的class文件存在的包目录
public class counter{
private int count; //定义“访问次数”的变量
public counter() //此类的构造方法
{
}
public void setcount(int count) //用于设置“访问次数”变量的值的方法
{
this.count = count;
}
public int getcount() //用于获取“访问次数”变量的值的方法
{
return this.count;
}
/*用于将“访问次数”的数值字符串化并将其分割为字符数组。建立一用于存储“数字图片名”的数组,并对此数组元素分配相应“数字图片”名称,然后返回该数组对象的方法*/
synchronized public string[] getcounterimage()
{
//将“访问次数”的值转化为字符数组
char[] chars = string.valueof(count).tochararray();
int numchars = chars.length; //获取字符数组的长度
string[] images = new string[numchars]; //建立存储“数字图片名”的数组
for(int i=numchars-1;i>-1;i--) //遍历“数字图片名”的数组的各个元素,并赋值
{
images[i] = string.valueof(chars[i])+".gif";
}
return images; //返回“数字图片名”的数组对象
}
}
counter.jsp
//功能:实现访问记数功能
<%@ page contenttype="text/html; charset=gb2312" language="java" errorpage="errorpage.jsp" %>
<%@ page import="java.io.*"%>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>图片计数器</title>
<style type="text/css">
<style type="text/css">
<!--
.font {
font-size: 9pt;
color: #ff0000;
}
-->
</style>
</head>
<body>
<%
out.print("<font class='font'>您是访问的第 ");
string guest = new string(); //建立guest字符串对象,并将其实例化
string path=request.getrealpath(""); //获取counter.jsp页面所在磁盘的绝对路径
//获取名为guest的session对象
string tempstr = (string)session.getattribute("guest");
/*如果有人访问该counter.jsp页面,发现tempstr对象值为null(即不存在名为gues的session对象),则在%tomcat_home%\webapps\counter\db\counter.txt中读取存储的访问数值,并将此数值加一*,并重新写入到counter.txt文件中*/
if(tempstr==null){
//建立i/o流中的文件流对象,对%tomcat_home%\webapps\counter\db\counter.txt进行读操作。
filereader fr=new filereader(path + "\\db\\counter.txt");
bufferedreader br=new bufferedreader(fr); //将文件流读出的内容读入到缓冲区
string strnum=br.readline(); //读取缓冲区对象内存储的内容
int num=integer.parseint(strnum) + 1;
br.close(); //关闭缓冲流对象
fr.close(); //关闭读文件流对象
%>
<jsp:include page="convetimg.jsp" flush="true">
<jsp:param name="num" value="<%= num %>" /> //传递参数到包含页面convetimg.jsp
</jsp:include>
<%
out.print("位</font>");
//建立i/o流中的文件流对象,对%tomcat_home%\webapps\counter\db\counter.txt进行写操作。
filewriter fw = new filewriter(path + "\\db\\counter.txt");
fw.write(string.valueof(num)); //将num变量值字符串化,并写入counter.txt文件中
fw.close(); //关闭写文件流对象
session.setattribute("guest","name");
guest=(string)session.getattribute("guest");
}
/*如果有人访问该counter.jsp页面,发现tempstr对象值不为null(即已存在名一个为gues的session对象),则只在%tomcat_home%\webapps\counter\db\counter.txt中读取存储的访问数值*/
else{
filereader fr=new filereader(path + "\\db\\counter.txt");
bufferedreader br=new bufferedreader(fr);
string strnum=br.readline();
%>
<jsp:include page="convetimg.jsp" flush="true">
<jsp:param name="num" value="<%= strnum %>" />
</jsp:include>
<%
out.print("位</font>");
}
%>
</body>
</html>
convetimg.jsp
/*功能:用于调用bean文件对counter.jsp传递来的“数值”,利用counter.java这个bean将其“数字图片”化,并显示这些图片*/
<%
//获取counter.jsp传递来的“数值”
int num=java.lang.integer.parseint(request.getparameter("num"));
%>
<jsp:usebean id="peoplecount" scope="request" class="count.counter"> //引用bean
//设置bean中count变量的值
<jsp:setproperty name="peoplecount" property="count" value="<%= num %>"/>
</jsp:usebean>
<%
/*通过bean所产生的引用对象peoplecount以及bean中getcounterimage()方法获得“数字图片名”数组对象*/
string[] imgs = peoplecount.getcounterimage();
//遍历该“数字图片名”数组对象,并在页面中显示各数组元素
for(int i=0;i<imgs.length;i++)
{
out.print("<img src=images\\"+imgs[i]+" width='20' height='20'>");
}
%>
errorpage.jsp
//功能:用于获取tomcat引擎产生的访问错误
<%@ page contenttype="text/html; charset=gb2312" language="java"%>
<% out.println("程序出错!");%>
六、附录:
a、本教程word格式下载地址:
classshare1.chinaren.com/classshare/classshare_show.jsp?classuuid=5632066890867061178&shareid=897870&pid=72941
b、本站点图片计数器下载地址:
classshare1.chinaren.com/classshare/classshare_show.jsp?classuuid=5632066890867061178&shareid=897870&pid=72940
c、j2sdk-1_4_2下载地址:
count.skycn.com/softdownload.php?id=3116&url=http://gd-http.skycn.net:8080/down/j2sdk-1_4_2-windows-i586.exe
d、tomcat下载地址:
apache.freelamp.com/jakarta/tomcat-4/v4.1.31/bin/jakarta-tomcat-4.1.31.exe
e、参考网址:
publib.boulder.ibm.com/was400/40/ae/simpchinese/docs/jsp11bn.html
()
下一篇:php和asp对象的等价关系 >>
相关文章:
- · Google AdSense 全面解析 申请+操作+作弊+忠告
- · Google AdSense小技巧
- · 智能跳转的404错误页面
- · HTML基础代码整理
- · 常见 XHTML 验证错误
- · 页面提交时出现等待窗口示例
- · 多域名同一空间的处理实例附(PHP代码)
- · 加密你的ASP页面—Script Encoder初探
- · 正则小偷的部份核心函数
- · 让你的UTF8页面不再空白
- · 从三个方面提高网站的链接广泛
- · PHP搜索引擎技术核心揭密
- · 用cookies控制图片显示[php]
- · 如何在HTML中引用XML数据
- · PHP 程序加速探索
- · PHP数据加密
- · 商业网站设计主要原则
- · 从名称到页面:网站设计全攻略
- · 去掉网页超链接的下划线
- · Google Pr 欺骗
- · SEO基础
- · 认识iframe
- · 利用CSS改善网站可访问性
- · SaBlog 2.0 “生成”HTML的方法
- · Javascript倒计时
- · 小技巧有效增加你BLOG的PR
- · 18位身份证校验计算函数
- · ASP获取客户端MAC地址
- · 驯服不听话的网页表格
- · asp当中判断函数一览
- · 专门采色用的JAVA原代码
- · 玩透9种网页弹出窗口
- · HTML 标记语言全面详细解
- · Google AdSense 与其他广告联盟的区别
- · XML的应用(HTML结合)
- · Blogger赚钱5招
- · XML 的初步认识
- · ASP程序中同一个用户不允许同时登陆两次
