Servlet/JSP学习笔记(4)-Servlet入门
介绍完工具和基本概念,现在终于开始介绍Servlet的编写方法了。 为了便于理解,我们将采用eclipse+Lomboz作为开发环境, 一切的操作都可以在eclipse中完成。 如果你还没有安装好Lomboz,请参考前几篇文章配置好环境。
我们将建立一个名为 com.idv2.learnjsp 的包,用于容纳所有的示例程序。 下面我们就看看最基本的Servlet的创建方法。
介绍完工具和基本概念,现在终于开始介绍Servlet的编写方法了。 为了便于理解,我们将采用eclipse+Lomboz作为开发环境, 一切的操作都可以在eclipse中完成。 如果你还没有安装好Lomboz,请参考前几篇文章配置好环境。
我们将建立一个名为 com.idv2.learnjsp 的包,用于容纳所有的示例程序。 下面我们就看看最基本的Servlet的创建方法。
在Servlet/JSP学习笔记(1)-tomcat和eclipse的安装中, 我介绍了eclipse和tomcatPlugin的安装和配置方法。 但今天发现,使用tomcatPlugin创建项目时,不会自动生成web.xml,需要手工编辑,这多少有些不方便。 (关于web.xml的简单介绍参考这里。)
实际上,开发和调试Servlet/JSP程序时,一个叫做Lomboz的插件更为强大、更好用。 Lomboz其实是一个开发J2EE程序的强大插件,Servlet/JSP只是小菜一碟而已。
下面就来介绍一下Lomboz的安装方法。关于 eclipse 和 Tomcat 的安装请参考 前一篇文章。
关于BS结构(浏览器-服务器结构)、HTTP基本原理等基础知识相信大家比我清楚, 我就不废话了。不知道的同学去google一下。
用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP。 Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序。而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行。
由于项目需要,最近不得不开始学习JSP和Struts了。 三年前曾经学过JSP,而且还做过一个小程序,不过现在早已经扔到九霄云外去了。 为了不落后于时代,决定开始从今天学习JSP!
虽然我很喜欢用vim,但开发Java程序首选环境是eclipse,咱也不能太无知了啊。 所以安装eclipse是第一件事儿。另外Web服务器Tomcat也是必不可少的。 下面是各个软件的下载链接。
eclipse我没有使用最新版本的3.3,而是用了稍老些的3.2.2。这个旧版本的还真不好找, 你如果是从eclipse的主页上进入下载页的话, 应当选择右侧的Browse downloads中的By Project,然后选择Eclipse Platform, 才能到达上述的下载页面。
至于JDK,大家应该都知道怎么装我就省略了。
Windows XP连接远程共享时,有一个“保存密码”的功能。保存之后当然可以免去每次输入密码的麻烦,但当你想以其它用户身份重新连接共享时却有了麻烦:Windows不会再让你输入用户名和密码,即使用net use 共享名 /delete
命令删除所有的共享也不行。用这个方法可以让Windows忘记密码。
打开命令行,输入
rundll32 netplwiz.dll, UsersRunDll
会出现“用户帐户”对话框,单击其中的“高级”选项卡,再单击“管理密码”按钮,接下来的事情就不用我说了吧。
另外,用上述方法弹出的用户账户跟控制面板中的是不一样的,从控制面板中启动的那个太傻瓜了。
加入域之后则可以通过控制面板直接启动那个不傻瓜的用户帐户对话框。
最近在抓虾上看到一篇关于BlackBerry 7230的介绍。 无摄像头、无和弦,强大的短信管理、联系人管理,附带日历和任务列表, 能上网,手动背光,以及太阳下仍然很清晰的液晶屏。 这就是我一直想要的一款手机,而且价格才300多,于是立即到淘宝上买了一台。 到今天整整一个星期了,玩机也玩出一些体会来,在这里跟大家分享一下。
总觉得在Perl里面读取文本文件应该用个循环:
while (<FH>) { print; }
或者是用数组:
@data = <FH>;
今天看代码时看到这样一段,真有种大开眼界的感觉。
$data = do { local $/; <FH>; };
查了查资料才明白:do
表示执行后面括号内的语句,$/
变量是读取文本文件时的行分隔符,默认是换行(\n
)。
那么这段代码的意思是,声明 local $/
,使得在 {}
内 $/
的值变成空值,那么从<FH>
读取时就不会再以
换行为分隔符,而是一次性将所有内容全部读出来。最后再用 do
将返回值赋给$data
。
其实做一个像feedburner和feedsky那样的feed统计功能并不难——如果你只是想自己用的话。
做feed统计需要实现的几个功能:
而在实际操作中需要注意,统计user-agent时要排除掉浏览器、spider、bot等,仅统计阅读器的数字。而阅读器则分为在线阅读器和离线阅读器两种,在线阅读器一般都会通过user-agent报告订阅者数量(40 subscribers),而离线阅读器则不会。因此在线阅读器仅需要根据报告的数字统计订阅者即可,而离线阅读器则要根据IP地址来统计订阅者。
那么如何安装到wordpress里面?在init action上挂个钩子,判断一下request_uri是不是feed就行了。
最后,这个方法会跟wp-cache插件冲突,因为wp-cache会cache feed,一旦cache之后init action就不动了,所以要注意设置wp-cache使其不cache feed才行。
最近由于feedburner不能访问,因此今日起将原来的feedburner地址转移到wordpress自带的feed上,不再使用feedburner托管。 新的feed地址为:
http://tech.idv2.com/feed/
使用在线阅读器的同学们应该不会受到任何影响,而使用离线阅读器的同学们就得麻烦你们手动将地址修改为上述的新地址了。
这一篇是扫盲用的,主要讲解了几个最常用的函数IF、AND、OR、COUNT、COUNTA、COUNTIF和SUM, 会用的同学就可以跳过了。以后会逐渐讲解其他函数的应用。
逻辑判断
逻辑判断所用的函数不多,IF、AND、OR三个就足以应付日常工作了。
IF函数可以用来转换值,如将1和0转换为OK和NG:
=IF(A1=1,"OK","NG")
与AND和OR组合使用可以判断多个条件,如判断是否是周末:
=IF(OR(WEEKDAY(A1)=0, WEEKDAY(A1)=6),"周末","工作日")
统计数量的COUNT、COUNTA、COUNTIF
COUNT和COUNTA统计对象不同,COUNTA统计所有非空单元格的数量(包括出错的单元格), COUNT仅统计看起来像数字的单元格。
COUNTIF则可以添加搜索条件,这个特性可以用来做统计。如
=COUNTIF(F:F,"OK") 统计F列中OK的个数
=COUNTIF(F:F,"NG") 统计F列中NG的个数
求和的SUM
这个函数简单得不能再简单了:
=SUM(A10:A254) 对A10~A254的范围求和
没了。别看Excel函数成百上千,常用的就这几个。充其量再加上其他几个信息函数, 如求日期的DATE、YEAR、MONTH、DAY、NOW、WEEKDAY,数值计算的FLOOR、INT、MOD、ROUND, 字符串操作的CHAR、LEFT、RIGHT、MID(具体使用方法参见帮助), 几乎可以应付全部的日常应用。
下面举几个例子来说明这些函数的应用。
测试用例。一般测试用例的表格会是这样:
A | B | C | D | E | F | |
1 | 编号 | 类别 | 测试内容 | 确认内容 | 结果 | 测试时间 |
2 | 1 | 界面 | 单击新建按钮 | 建立新文档 | OK | 8/27 |
3 | 2 | 界面 | 单击保存按钮 | 保存文档 | OK | 8/27 |
3 | 2 | 界面 | 单击另存为钮 | 打开保存对话框 | NG | 8/27 |
那么统计OK和NG的个数就分别用
=COUNTIF(E:E,"OK") 统计OK个数
=COUNTIF(E:E,"NG") 统计NG个数
如果测试用例分成好几个工作表,那么可以在最前面加一个统计用的工作表,并用SUM求出所有用例的状况。
日历。这个日历是用在项目进度管理上的,格式类似于下面这种横向的日历。
8月 | ||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
三 | 四 | 五 | 六 | 日 | 一 | 二 | 三 | 四 | 五 | 六 |
可按以下格式输入:
A | B | C | D | E | F | G | |
1 | 8/1 | =A1+1 | =B1+1 | ... | ... | ... | ... |
2 | =MONTH(A1) | =IF(MONTH(B1)=MONTH(A1), "",MONTH(B1) | ... | ... | ... | ... | ... |
3 | =DAY(A1) | =DAY(B1) | ... | ... | ... | ... | ... |
4 | =MID("日一二三四五六",WEEKDAY(A1),1) | ... | ... | ... | ... | ... | ... |
然后隐藏掉第一行即可。
2008-2-14更新
回答读者妮妮的问题,讲解一下VLOOKUP函数的用法。
VLOOKUP用于查找信息,更确切地说,它用来“翻译”信息。比如员工名单上有员工号和姓名的对应关系, 那么给出一个员工号的列表,就可以通过VLOOKUP将其“翻译”成姓名列表。先来看个例子:
A | B | C | D | |
1 | 排行 | 姓名 | 排行 | 姓名 |
2 | 1 | 柯镇恶 | 3 | =VLOOKUP(C2,$A$2:$B$8,2) |
3 | 2 | 朱聪 | 3 | =VLOOKUP(C3,$A$2:$B$8,2) |
4 | 3 | 韩宝驹 | 4 | =VLOOKUP(C4,$A$2:$B$8,2) |
5 | 4 | 南希仁 | 7 | =VLOOKUP(C5,$A$2:$B$8,2) |
6 | 5 | 张阿生 | ||
7 | 6 | 全金发 | ||
8 | 7 | 韩小莹 |
这个表的$A$2:$B$8区域为参考数据(原始对应关系),C列为需要翻译的原始数据,D列为翻译结果。 具体的结果大家可以实际放到Excel里面执行一下。
VLOOKUP有三个参数,分别如下:
VLOOKUP(原始数据, 参考数据, 搜索结果在参考数据中的列位置)
Excel会在参考数据的第一列中搜索原始数据(上例中,在$A$2:$B$8的第一列即$A$2:$A$8中搜索原始数据C2), 找到后,返回第三个参数——列位置所对应的数据(上例中,在$A$2:$A$8中找到与C2相等的3之后, 返回3所对应的第2列——韩宝驹,这个“第2列”即为第三个参数)。
那么找不到时怎么办?其实VLOOKUP还有第四个参数,值为TRUE或FALSE,默认为TRUE。
取值TRUE时,VLOOKUP会返回不大于原始数据的最小值所对应的结果,例如=VLOOKUP(2.5,$A$2:$B$8,2,TRUE)
会返回“朱聪”
(朱聪的“2”为不大于2.5的最大值)。
取值为FALSE时,VLOOKUP会返回#N/A。
通常在处理字符串时,大多情况下希望在找不到时返回错误或空串。 这时可以为VLOOKUP加上第四个参数FALSE,再用ISNA函数将#N/A转换为空串。如:
[D2]=VLOOKUP(C2,$A$2:$B$8,2,FALSE)
[D3]=IF(ISNA(D2),"",D2)