分享
 
 
 

JBuilder2005 Servlet开发之程序改造

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

原登录模块的不足

在《JBuilder 2005实战JSP开发》专题中,我们完全用JSP技术实现了一个用户登录模块。它提供了一个登录的页面,在用户登录成功后转向欢迎页面,而登录失败后转向登录失败的页面,并且为每个页面提供了一个错误处理页面,当功能页面发生错误时,以一种友好的方式向用户报告错误。但这个模块还存在一些问题:

问题一:没有在每个JSP页面检验用户是否有登录

Web应用程序的JSP页面几乎都需要在验证用户的身份之后才可以访问,也即必须保证JSP页面处理请求之前用户已经确实登录系统了,否则应该拒绝响应并重定向到登录页面。不然如果一个非法的用户直接通过URL访问JSP页面,就会产生系统安全性问题。

我们举一个例子:如果有一个用户直接通过http://localhost:8080/webModule/welcome.jsp访问welcome.jsp界面,我们必须先判断用户有没有登录(通过查看session中是否有以"ses_userBean"命名的对象),如果已经登录,打开welcome.jsp页面,如果没有登录重定向login.jsp登录页面。

提示:

当然更正规的作法应该是通过web.xml配置文件的<security-constraint>等配置项按角色对Web资源的访问权限进行配置,但这种方式确实是比较麻烦的。所以我们一般采用在每一个请求到达处理程序前判断用户的登录信息的方式处理页面访问权限的问题。 为了达到防止非法用户访问功能页面的目的,你当然可以像劳模一样在每一个需要保护的JSP页面中添加一段如下的判断代码加以解决:

1. <%

2. if(session.getAttribute("ses_userBean") == null)

3. {

4. response. sendRedirect("/webModule/login.jsp");

5. }

6. %>

但对于一个拥有成百上千个需保护JSP页面的大型Web应用程序,在每一个页面中添加这段相同的代码,不但单调乏味,违反面向对象的宗旨,而且容易出现漏网之鱼。在本专题中,我们将通过一个Servlet过滤器轻松漂亮地完成这个任务。

问题二:每次生成login.jsp页面用户列表时都重新访问数据库

一般而言,Web应用程序的用户是不常发生变化的,但login.jsp页面的用户列表却在每次刷新时都从数据库表中获取用户数据并生成下拉列表。假设我们这个Web应用系统的用户数据(密码除外)不发生变化,那么我们就可以在Web应用程序启动时,就将用户Id和用户名下载缓存在Web应用服务器的内存中,这样每次在生成登录页面的用户名下拉框时,就不需要重新到数据库表中获取,而直接从Web应用服务器的内存中获取,在性能和效率上都会有极大的提高。

当然,将用户缓存在Web应用服务器中可能并不是很恰当,而诸如学历、性别、民族等字典表更适合缓存。对于那些不会或很少发生更改的数据、不应该每次都从数据库中获取,因为访问数据库的操作是高代价的操作,需要较多的I/O操作,CPU时间和网络通讯,在可能的情况下,应该尽量减少访问数据库的次数,这也是值对象设计模式的精髓所在。这里我们对用户数据进行缓存只是为了描述一种提高性能的解决思路。

本专题中,我们通过一个自动启动的Servlet改造生成用户列表的功能:在Web应用程序启动时,就通过这个Servlet将用户Id和用户名缓存到Web应用服务器中,生成下拉框的用户数据直接从缓存中读取。

新增的若干功能点

此外,我们还利用Servlet技术向原应用程序中加入两个新的功能作为系统日志模块:

功能一:添加一个Web容器的监听器的Servlet

在本专题中,我们将创建一个Servlet监听器,监听Web容器启动和关闭事件,在事件处理方法中记录系统启动和关闭系统事件的日志,日志以Excel文件格式保存。

功能二:通过一个Servlet下载文件

Servlet通过设置输出文件头参数向客户端返回各种类型的响应,如HTML、XML、WML等文本格式或声音、图像、Excel文件等二进制流格式。此外,还可以通过设置输出文件头参数使Servlet生成一个用于下载的文件。我们将通过一个Servlet下载Web应用程序的系统日志。

事前准备

通过File->New Project...新创建一个名为bookStore的工程,并在工程下创建名为webModule的Web模块,将原《JBuilder 2005实战JSP开发》专题的旧的bookStore工程源码拷贝到新的bookStore的工程目录下覆对应的目录。

此外,你还需要维护bookStore工程的类库,使其包含Oracle驱动器的JAR包和时间标签的JAR包,上一个专题已有提及此处从略。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有