Servlet

2024-05-10

Servlet(共9篇)

Servlet 篇1

0 引言

随着因特网的迅猛发展,网络信息量的增加,如何从海量的信息中找到所需要的信息已经成为当今社会人们需要关注的问题,信息检索也成为计算机领域的热点问题。从海量数据中找到所需要的信息首先需要将海量的数据组织成便于查找的数据结构,其次在组织过程中必须体现关键字的作用,即以关键字为标识,标识记录条目,再者,能够随着网络信息的不断更新,信息数据库能够实现自我维护,从而确保信息数据库的全面性和及时性。

本文从搜索引擎的角度出发,以J2EE[1]为基础,介绍一种基于Servlet和索引表结构的搜索引擎。该搜索引擎以用户的输入作为关键字来查询索引表,并在用户使用搜索引擎的过程中不断维护和重构索引结构,以实现索引表(也可理解为信息数据库)的自我更新。此搜索引擎是以文件的型式作为信息数据库保存在磁盘上,并在内存中设置缓存来实现信息的备份与更新。此搜索引擎作者已经实现,可广泛应用在中小型服务器上作为站内搜索引擎,同时也在可在大中型服务器上作为web搜索引擎。

2 索引的磁盘文件结构

索引在搜索引擎中的作用可以理解为目录对于一本字典的作用,当我们需要查找某个单词时,通过目录找到该单词所在字典中的页码,往往比随机翻查字典快得多,搜索引擎中的索引同样也是这个作用。为了在最短的时间内找到所需的信息,需要为所有现存信息构建一个便于组织和查找的数据结构——索引。当接收到用户提出的关键字时,对此索引表进行查找,从而找到所需的信息。该索引表的数据结构以及相应的查找算法[2]决定着搜索引擎的性能。

索引表[3]中的索引条目模仿了字典中的目录项结构,以关键字作为标识,另一端指向目标URL的唯一标识。目标URL的结构采用单独的字符串结构,按顺序排列,并以其顺序值作为唯一标识。构建好索引条目后,将目标URL和索引条目组织在一起就形成了索引表的磁盘文件。

2 索引逻辑结构

2.1 数据结构

哈希表类型的the Index,是整个索引表在内存中的结构(缓存)[4],也是搜索引擎主要的数据结构。由索引表的文件结构可以发现每一个关键字对应着一个记录条目,可以认为这个记录条目为一行字符串,如“add|2 1|3 3|4 1|5 7”表示“add”关键字在2号URL中出现1次,在3号URL中出现3次,在4号URL中出现1次,在5号URL中出现7次。

2.2 延迟加载

为了能够在最短时间内得到与关键字对应的URL,需要把字符串结构的索引条目解析为URL数组结构(将“|2 1|3 3|41|5 7”解析成含有四个元素的URL数组),存放到the Index中作为与关键字的对应值,从而在以后的查找过程中省去解析字符串过程进而直接使用URL数组。但是如果在搜索引擎初始化时对所有的字符串索引项进行解析,势必大大降低效率,因而可行的办法是使用延迟加载[5],当初始化时以字符串作为与关键字对应的值,在第一次使用时对其进行解析,使其变成URL数组结构,并替代字符串,作为该关键字对应的值(利用了java语言中Hash Table的特性),以后再使用时直接使用URL数组而不需要再次解析。

2.3 搜索过程

根据关键字通过查找the Index哈希映射表得到该关键字对应的URL信息,由于一个键对应的值在java语言下的Hash Table中为Object类型(所有数据类型的父类),因而返回一个Object类型对象,如果该对象为数组类型的对象,则说明缓存中的关键字已经过解析,形成了可以直接使用的查询结果,否则需要对字符串进行解析,最后得到数组类型的结果。并将the Index表中的数据更新。

3 索引表的管理维护

由于索引表作为搜索引擎的关键,对其的维护显得十分重要,因而需要设置相应的索引管理器来对其结构进行维护。对于索引表的维护主要表现在索引表的定期更新[6]。因而,需要设置时间记录表(哈希映射集)的数据结构来记录索引表的更新时间,从而达到对索引表的定期维护。对于索引表的维护工作[7],可以采取两种方案,一种是构建一个单独的计时线程,定期进行索引维护工作;第二种方案是每次在用户搜索时触发索引管理器,根据系统时间决定是否进行维护工作,这里我们采用第二种方案。当索引管理器被触发后,进行索引管理工作,如果达到更新时间,则对索引文件进行更新,由于更新磁盘索引文件涉及到IO操作,因而是一个比较费时的过程,所以需要单独启动一个读写线程来对磁盘文件进行更新。以上便是索引管理器的工作过程。

4 搜索引擎实现

4.1 类之间的依赖关系

My Search Servlet为接收HTTPRequest请求入口,解析浏览器端参数(关键字),加载索引管理器,调用索引查询方法。Index Entry为索引条目的模型对象,记录着关键字在指定URL中出现的次数,可以理解为索引文件中的“|2 1”为一个Index Entity对象。HTMLIndex为系统整个索引表的模型对象,包含着全局索引信息,以及一系列相关查询方法。Index Builder为构建索引文件的模型对象,用来读取站点信息,按照指定的格式,在磁盘上构建索引文件[8]。Index Manager为索引管理器对象,用于定期维护磁盘的索引文件。

4.2 测试关键字搜索

用户输入要搜索的关键字(英文单词)后单击search返回搜索结果,搜索结果以URL的方式反映到浏览器端,并通过超链接跳转到指定网页。

5 结论

本文介绍了一种基于Servlet的搜索引擎,其核心数据结构为索引表和哈希映射。这种搜索引擎具有实现简单,性能优良,维护成本低等特点,尤其适合于中小站点作为站内搜索引擎。虽然索引文件是以文件的型式存储在磁盘上,但是由于缓存的作用使得搜索的过程中大大减少了IO操作,从而提高了效率。此外由于索引管理器的存在,在维护索引文件时,会不断的将新的索引信息加入索引文件以实现索引文件的自我更新。由于缓存索引在数据结构上采用了哈希映射,同时结合了java语言的特点,从而实现了索引信息的延迟加载,大大的提升了站点的整体性能。

参考文献

[1]蒋凯,武港山.基于Web的信息检索技术综述.计算机工程,2005,12:7-9.

[2]David Flanagan.Thinking in Java,Third Edition by Bruce Eckel,2003

[3]Peter Drake.Data Structures and Algorithms in java.朱剑平,译.北京:清华大学出版社,2006

[4]Stephen Asbary.Developing Java Enterprise Applications.王强,译.机械工业出版社,2004

[5]白胜普.J2EE企业级应用测试实践.北京:清华大学出版社,2009.

[6]W Bruce Creeft.搜索引擎:信息检索实践.刘挺,译.机械工业出版社,2010

[7]Witten I.H.深入搜索引擎.电子工业出版社,2009

[8]Jaimie Sirovich.搜索引擎优化高级编程.邓少,.译.北京:清华大学出版社,2009

Servlet 篇2

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

2、Servlet版本间(忘了问的是哪两个版本了)的不同?

3、JAVA SERVLET API中forward 与redirect()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用

sendRedirect()方法。

4、Servlet的基本架构

public class ServletName extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

}

}

5.servlet的生命周期是什么?

6.如何现实servlet的单线程模式?

7. 页面间对象传递的方法是什么?

8.四种会话跟踪技术包括哪几项?

9.Request对象的主要方法包括哪些?

10.我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

11.Servlet执行时一般实现哪几个方法?

12.说出数据连接池的工作机制是什么?

13.Class.forName的作用?

14、什么情况下调用doGet()和doPost()?

15、servlet的生命周期?

16、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

Servlet 篇3

MIDlet是Java ME应用程序中的一个可以执行的应用程序基本单位, 在实际的Java ME程序中, 至少需要包含一个继承于javax.microedition.midlet.MIDlet的MIDlet类, 通过实现该类的startApp、pauseApp和destroyApp方法控制MIDlet的运行、暂停和销毁状态。实现移动应用程序的功能。因此, Java ME的手机程序也可以叫做MIDlet程序, ?Java ME程序执行的入口必须是MIDlet的子类。

Servlet是Sun公司推出的一种在服务端运行的小程序, 它是在Web服务器上驻留着的可以通过“请求-响应”编程模型来访问的应用程序, 它被用来扩展Web服务器的性能。Servlet程序在服务器端运行, 动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比, Java Servlet具有更高的效率, 更容易使用, 功能更强大, 具有更好的可移植性等特点。通过继承于javax.servlet.HttpServlet类, 可以编写Servlet程序。MIDlet和Servlet之间的通信过程如图1所示。

2 Servlet的开发和配置

2.1 配置Tomcat服务器

准备Tomcat5.5服务器和JDK1.6, 配置环境变量CLASSPATH、Path、JAVA_HOME、CATALINA_HOME, 关于Tomcat服务器的配置请参阅Java Web开发相关资料。

2.2 配置数据源

这里通过JDBC-ODBC桥的方式实现Servlet对SQL Server数据库的访问。因此, 首先要配置ODBC数据源mydata, 指向数据库pubs。接下来设置SQL Server 2000的登录用户名为sa, 密码为空, 以便通过sa用户访问pubs数据库。Servlet程序的主要功能读取pubs数据库中authors数据表中的作者ID和作者名称, 以便在移动设备上进行显示。

2.3 创建Servlet

(1) 在Tomcat5.5webapps目录下创建保存Servlet的目录midlet。

(2) 编写读取pubs数据库中authors表中的用户的Servle文件ReturnMsg.java。

程序代码如下:

2.4 部署Servlet

(1) 将编译后的com.lzc包中的ReturnMsg (连同包) 复制到在D:Tomcat 5.5webappsmidletWEB-INFclasses目录下。

(2) 修改Tomcat5.5webappsmidletWEB-INF目录下的web.xml文件, 在标签之前添加如下内容:

部署完成后, 可以在浏览器的地址栏中输入http://127.0.0.1:8080/midlet/ReturnMsg, 测试Servlet是否编写和部署成功。

3 MIDlet的开发和配置

3.1 设备上的程序SendMsg.java

该程序启动一个独立的线程, 创建到Servlet的连接, 从在移动设备上发送HTTP请求, 程序代码如下:

3.2 ServletDemo.java程序

该程序负责启动SendMsg中的线程, 并显示返回的信息。程序代码如下:

程序运行的主界面如图2所示, 选择“连接”后, 经过“网络通话”确认界面后, 进入“返回结果”界面, 如图3所示。

4 结语

随着移动设备能力的增强, 单纯的基于WAP的B/S信息浏览方式已经不能满足需要, 传统的娱乐、工作、信息交互和共享等事务越来越多的拓展到移动设备上。因此, 无线应用程序 (比如MIDlet) 和外部的Web系统之间的交互也就变得非常重要了。Midlet和Sevlet借助于HttpConnection实现基于HTTP协议的通信, 方便实现移动设备与Web服务器的联系, 也为移动设备信息访问的安全Web验证提供了良好的解决方案。

摘要:MIDlet是创建和部署在移动设备上的程序, Servlet是创建和部署在Tomcat等Web服务器上的程序。在移动应用程序开发中, 可以借助于HttpConnection建立移动设备和Web服务器之间的连接并进行通信。本文通过一个实例详细说明MIDlet和Servlet之间通信的完整过程。

关键词:MIDlet,Servlet,移动开发

参考文献

[1]刘志成, 等.Java ME程序设计案例教程[M].北京:清华大学出版社, 2009.

Servlet 篇4

如果web.xml中struts2和servlet的配置如下:

struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

ImageServlet com.servlets.ImageServlet ImageServlet /myImageServlet/* 当我们在页面在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常响应的(报错信息为:HTTP Status 404target.lastIndexOf(“/”)): target

.substring(target.lastIndexOf(“/”)+ 1);

if(this.includes.contains(target)){

RequestDispatcher rdsp = request.getRequestDispatcher(target);

rdsp.forward(req,resp);

} else

chain.doFilter(req, resp);

}

@Override

public void init(FilterConfig config)throws ServletException {

this.includes.addAll(Arrays.asList(config.getInitParameter(“includeServlets”).split(“,”)));

}

}

2.在web.xml中做适当配置,在struts2的配置前加上下面的代码:

redisp

com.kcjxkj.filter.ReDispatcherFilter

includeServlets

ValidateEmail

redisp

/*

其中,

Servlet 篇5

1.1概念

Servlet实际上是Server+Applet的意思, 全称Java Servlet。是用Java编写的服务器端程序。狭义的Servlet是指Java语言实现的一个接口, 广义的Servlet是指任何实现了这个Servlet接口的类, 一般情况下, 人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲, Servlet可以响应任何类型的请求, 但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。最早支持Servlet技术的是Java Soft的Java Web Server。此后, 一些其它的基于Java的Web Server开始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据, 生成动态Web内容。实现过程如下:

1) 客户端发送请求至服务器端;

2) 服务器将请求信息发送至Servlet;

3) Servlet生成响应内容并将其传给服务器。响应内容动态生成, 通常取决于客户端的请求;

4) 服务器将响应返回给客户端。1.2生命周期

每个servlet模块有其生命周期。一般过程如下:

1) 客户端请求该Servlet;

2) 加载Servlet类到内存;

3) 实例化并调用init () 方法初始化该Servlet;

4) service () (根据请求方法不同调用do Get () 或者do Post () , 此外还有do Get () 、do Put () 、do Trace () 、do Delete () 、do Options () ) ;

5) destroy () 。

在这个过程中, 加载和实例化Servlet这项操作一般是动态执行的。然而, Server通常会提供一个管理的选项, 用于在Server启动时强制装载和初始化特定的Servlet。第一个客户端的请求到达Server, Server调用Servlet的init () 方法 (可配置为Server创建Servlet实例时调用, 在web.xml中<servlet>标签下配置<load-on-startup>标签, 配置的值为整型, 值越小Servlet的启动优先级越高) 。之后Server创建一个请求对象, 处理客户端请求, 再创建一个响应对象, 响应客户端请求。

Servlet的service () 方法很重要, 它将传递请求和响应对象作为参数, 获得关于请求对象的信息, 处理请求, 访问其他资源, 获得需要的信息。它使用响应对象的方法, 将响应传回Server, 最终到达客户端。service () 方法可能激活其它方法以处理请求, 如do Get () 或do Post () 或程序员自己开发的新的方法。

对于更多的客户端请求, Server创建新的请求和响应对象, 仍然激活此Servlet的service () 方法, 将这两个对象作为参数传递给它。如此重复以上的循环, 但无需再次调用init () 方法。一般Servlet只初始化一次 (只有一个对象) , 当Server不再需要Servlet时 (一般当Server关闭时) , Server调用Servlet的destroy () 方法。

我们可以在eclipse等开发平台中直接创建web工程, 平台工具可以自动对项目进行组织和部署。Servlet和页面文件分开存储, 使项目结构清晰, 也实现了软件分层架构模型。

1.3 servlet优势

1) 方便

Servlet提供了大量的实用工具例程, 例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。

2) 功能强大

在Servlet中, 许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如, Servlet能够直接和Web服务器交互, 而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据, 使得数据库连接池之类的功能很容易实现。

3) 可移植性好

Servlet用Java编写, Servlet API具有完善的标准。几乎所有的主流服务器都直接或通过插件支持Servlet。

2.1概念

Java Bean是使用Java语言描述的软件组件模型, 简单地说, 它就是一个可以重复使用的Java类。Java Bean可分为可视化组件和非可视化组件, 其中可视化组件包括简单的GUI元素 (例如, 文本框、按钮) 及一些报表组件等。非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作用。其主要功能是用来封装业务逻辑 (功能实现) 、数据库操作 (例如, 数据处理、连接数据库) 等。

在实际的开发过程中, 通常会出现重复的代码或者段落, 此时就会大大降低程序的可重用性并且浪费时间。使用Java Bean就可以大大简化程序的设计过程并且方便了其它程序的重复使用。Java Bean在服务器端的应用具有非常强大的优势, 非可视化的Java Bean可以非常好地实现控制逻辑、业务逻辑、表示层之间的分离, 从而大大降低了它们之间的耦合度。非可视化的Java Bean现在多用于后台处理, 这样会使系统具有一定的灵活性。

2.2 Java Bean规范

编写Java Bean就是编写一个Java的类, 这个类创建的一个对象称作一个Bean。为了能让使用这个bean的应用程序构建工具 (比如JSP引擎) 知道这个bean的属性和方法, 只需在类的方法命名上遵守以下规则:

1) 如果类的成员变量的名字是xxx, 那么为了更改或获取成员变量的值, 即更改或获取属性, 在类中可以使用两个方法:

◆get XXX () :用来获取属性xxx。

◆set XXX () :用来修改属性xxx.。

2) 对于boolean类型的成员变量, 即布尔逻辑类型的属性, 允许使用"is“代替上面的"get"和"set"。

3) 类中方法的访问属性都必须是public的。

4) 类中包含公共无参构造方法

3 servlet与Java Bean的区别

(上接第241页) Servlet和Java Bean都是用Java语言写的程序模块, 在服务器运行, 但二者的实际意义和使用层面是不同的。Java Bean是一个普通的Java类, 里面为属性增加了getter和setter进行封装并提供默认构造。而Servlet应当只在展示层存在。在一个完整MVC模式中, Java Bean、servlet、JSP分别对应M (model) 、C (controller) 、V (view) 三个层面。举例:servlet查询数据库———Java Bean保存查询结果———JSP显示查询结果。

Servlet是只能在Java EE容器中存活的特殊Java类, 就像是鱼缸里的鱼, 没有容器Servlet是不能生存的。而Java Bean则可以脱离Java EE环境单独存在, 按照Sun公司的说法, 既可以用在客户端, 也可以用在服务器端。另外, 根据上文对于二者规范的说明, 也可以明显看出, 二者在程序语句方面的规范与实现的接口有很大区别。Servlet需要生命周期框架, 而Java Bean并不需要。

4结束语

Servlet与Java Bean是JSP技术乃至J2EE平台中很常用的技术。掌握二者的编程规范、工作层面和区别, 才能编写出功能明确、结构正确的web项目。

参考文献

[1]王先国.JSP基础与编程实践[M].清华大学出版社, 2012, 1.

[2]李迎秋.JSP实用教程[M].大连理工大学出版社, 2008.2.

Servlet 篇6

关键词:网络传输,服务器,请求,响应

1 Servlet的工作原理及过程

Servlet运行在包含有WEB容器的应用程序服务器上,WEB容器是负责管理Servlet并对其进行初始化操作,管理多个Servlet实例。WEB容器会将客户端的请求传给Servlet,并且将它的响应返回到客户端。在Servlet结束时终结该Servlet,当服务器关闭时,WEB容器在内存使用中移除,具体流程如图1所示。

Web服务器接收该请求并将其发给Servlet。如果这个Servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它,Servlet将接收该HTTP请求并执行某种处理,Servlet将向Web服务器返回应答,Web服务器将从Servlet收到的应答发送给客户端。

2 为什么要使用Servlet

2.1 与平台无关

Servlet可以很好地替代公共网关接口(Common Gateway Interface,CGI)脚本。Servlet是用Java编写的,所以它们一开始就是平台无关的。

2.2 Servlet是持久的

Servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务。与之相反,CGI脚本是短暂的。

2.3 Servlet是可扩展的

由于Servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应需求。

3 在程序中如何使用Servlet

第一步通过设置Content-Type(内容类型)应答头完成。一般地,应答头可以通过HttpServletResponse的setHeader方法设置,但由于设置内容类型是一个很频繁的操作,因此Servlet API提供了一个专用的方法setContentType。注意设置应答头应该在通过PrintWriter发送内容之前进行。

第二步是通过out.println语句构造响应的HTML页面,下面介绍在程序中编写Servlet程序的代码,具体编写如下所示。

第三步对Servlet进行配置,除了代码以外,Servlet的信息还需要在Web应用的部署描述文件web.xml中描述,它包含如何将URLS映射到Servlets。配置文件编写如下所示。

第四步运行Servlet,可以使用Tomcat服务器对Servlet程序运行。

3 结语

根据对Servlet的描述可知其在web应用开发中具有重要的地位。在开发Java Web应用程序时要尽量避免使用CGI的服务器端小程序,而在程序中加入Servlet以提交应用程序的执行效率和程序的安全性。

参考文献

[1]郝玉龙.JavaEE编程技术.北京:清华大学出版社,2008.

Servlet 篇7

随着计算机在高校信息管理中的广泛应用, 许多高校建立了基于Web的学生成绩查询系统, 为在校学生查询成绩提供了方便。使用该系统, 只要电脑连接到Internet, 在浏览器中输入学号和密码, 学生就可以查询课程成绩。然后, 由于计算机的有线或无线网络并没有得到充分的普及, 因此基于这种技术实现的查询系统并不能实现“随时随地获得信息”。

目前, 手机已基本成为高校学生的生活必需品, 而且大学生所拥有的手机几乎都支持Java技术。如果采用Java技术开发手机程序, 将会使已有的基于Web的成绩查询系统得到更广泛的应用。

1 系统分析与设计

1.1 系统架构设计

系统使用J2ME访问网络, 采用Http协议作为与服务器端交互数据的方式, 如图1所示:

在客户端MIDlet程序中, 用户可以在“请输入学号”文本框中输入学号, 输入完毕后按“OK”按钮发送请求, 手机将把数据发送到服务器端, 服务器端进行相应的处理后把查询结果返回给客户端, 客户端MIDlet程序会把查询结果显示在用户手机上。

1.2 客户端的设计与实现

客户端MIDlet程序主要实现客户端与服务器端的连接, 其代码如下所示。其中特别要注意的是, 当单击“OK”按钮实现网络连接时, 一定要另开辟一个线程来予以实现。

send Msg.java的主要作用是开启一个新线程, 将用户输入信息发送到服务端并接受服务返回的信息。

2 服务器端的设计与实现

系统的Web服务器平台使用Apache Tomcat 5.5, 数据库采用mysql软件建立名为score的学生成绩数据库, 其中的学生成绩相关数据存储在表user中。

在服务器端编写的Servlet为Servlet Score.java, 用于接收客户端请求, 执行与数据库的通信, 并将查询结果返回给客户端, 其代码如下所示。服务器端实现的关键是如何获取客户端输入的查询参数并根据该参数实现对数据库的访问。我们使用do Get方法中的Http Servlet Request参数来获取查询参数, 查询结果则通过Http Servlet Response参数返回给客户端。

3 结束语

基于J2ME/Servlet技术的移动成绩查询系统, 大大地方便了学生成绩的查询, 具有非常实用的价值。该系统适当修改后, 可以应用于其他领域的应用, 例如用于查询工资、教务信息、天气预报、股票信息等, 可以更加充分地发挥移动查询的功能, 扩展移动网络的应用。

参考文献

[1]催光佐, 陈虎.基于短信的移动教育系统结构研究与实现[Z].北京大学现代教育技术中心, 2002.

[2]陈立伟, 张克非.精通Java手机游戏与应用程序设计[M].北京:中国青年出版社, 2005.

Servlet 篇8

关键词:博客,网站,JavaBean

1 概述

博客 (Blog) 是继电子邮件、网络论坛、即时通讯之后出现的第四种网络交流载体, 是web2.0的重要组成部分。它具有“零机制、零技术、零成本、零编辑、零形式”的使用特征, 使用简便快捷, 任何人都可以轻松建立自己的博客空间, 博客的内容都是作者本人的自由个性表达, 博客具有开放交互性, 为具有相同兴趣和目标的人提供了一个充分交流沟通和协作的空间, 在博客里共享资源, 进行深度交流, 实现从资源共享到思想共享。随着博客技术的发展和博客理念的推广, 博客现象也受到各界的广泛关注, 各种博客也应运而生。

2 Java Bean和Servlet技术

Java Bean是一种可以重用的Java组件, 它类似于COM, 在JSP程序中常用来封装事物逻辑、数据库操作等, 可以很好的实现业务逻辑和前台程序的分离, 使得系统具有更好的健壮性和灵活性。

事件处理是Java Beans体系结构的核心之一。通过事件处理机制, 可以让一些组件作为事件源, 发出可被描述环境或其他组件接受的事件。这样, 不同的组件就可在构造工具内组合在一起, 组件之间通过事件的传递进行通信, 构成一个应用。

Servlet其实和传统的CGI程序等Web程序开发工具的作用是相同的, 在使用Java Servlet以后, 用户不必再使用效率低下的CGI方式, 也不必使用只能在某个固定Web服务器平台运行的API方式来动态生成Web页面。许多Web服务器都支持Servlet, 即使不直接支持Servlet的Web服务器也可以通过附加的应用服务器和模块来支持Servlet。由于Java Servlet内部是以线程方式提供服务, 不必对于每个请求都启动一个进程, 并且利用多线程机制可以同时为多个请求服务, 因此Java Servlet效率非常高。

3 功能要求和关键技术

利用Java Bean和Servlet实现的个人博客网站功能要求如下:

前台功能要求:

a.用户登录

网站用户用个人注册的帐号、密码登录到网站。网站根据用户的帐号给予其相应的操作权限。

b.用户注册

游客将个人的信息存储到博客网站的数据库中, 以成为本博客的正式用户。

c.用户修改个人信息

把已存储的用户信息用一个网页显示出来, 方便用户对个人信息进行更新。

d.文章查询和留言

用户可以检索或浏览博客中的文章同时给出感兴趣的文章。

e.公告信息查询

用户可以浏览网站中发布的公告信息, 了解博客的一些情况。

f.相片查询:

用户可以对博客中的相片、图片等进行查询和浏览。

后台功能要求:

通过计算机网络将前台与后台的数据库相连, 网站管理员将从前台得到的信息进行处理, 实现文章管理、公告管理、投票管理、个人相册管理、朋友圈、用户设置及博主设置等子系统。

a.文章管理

管理员对网站中已有的文章进行删除和更新等操作。

b.公告管理

发布、删除、更改公告。

c.投票管理

发起投票和统计投票等。

d.个人相册管理

对博客相册中的图片进行删除和更新等操作。

e.用户设置

更新普通用户对博客的操作权限。

f.博主设置

对博主的信息等进行操作。

评论信息模块显示了对博客中的文章的评论的详细内容, 日期等。评论信息模块用到的Servlet如下:

public class Discuss Servlet extends Http Servlet{private int method;private Discuss Dao disuss Dao=null;

public void do Get (Http Servlet Request request, Http Servlet Response response) throws Servlet Exception, IOException{System.out.println ("32131") ;

this.method=Integer.parse Int (request.get Pa-rameter ("method") ) ;System.out.println ("32131") ;

if (method=0) {this.add Disuss (request, re-sponse) ;//后台, 添加公告内容}

if (method=1) {this.delete Disuss (request, re-sponse) ;//后台, 删除公告内容}

if (method=2) {this.update Disuss (request, response) ;//后台, 修改公告内容}

}

//后台, 修改评论内容

public void update Disuss (Http Servlet Request request, Http Servlet Response response) throws Servlet Ex-

ception, IOException{response.set Content Type ("text/html;charset=GBK") ;

Print Writer out=response.get Writer () ;Discuss Form disuss Form=new Discuss Form () ;

disuss Dao=new Discuss Dao () ;dis-uss Form.set Id (Integer.parse Int (request.get Parameter ("id") ) ) ;

disuss Form.set Discuss Title (Chinese.to Chinese (request.get Parameter ("discuss Title") ) ;

disuss Form.set Discuss Content (Chinese.to Chi-nese (request.get Parameter ("discuss Content") ) ) ;

if (disuss Dao.operation Discuss ("修改", dis-uss Form) ) {out.print ("") ;}else{

out.print ("") ;}}

//后台, 删除评论内容

public void delete Disuss (Http Servlet Request request, Http Servlet Response response) throws Servlet Exception, IOException{response.set Content Type ("text/html;charset=GBK") ;Print Writer out=response.get Writer () ;

Discuss Form disuss Form=new Discuss Form () ;disuss Dao=new Discuss Dao () ;disuss Form.set Id (Integer.parse Int (request.get Parameter ("id") ) ) ;

if (disuss Dao.operation Discuss ("删除", disuss Form) ) {out.print ("") ;

}else{out.print ("") ;}}

//后台, 添加评论内容

public void add Disuss (Http Servlet Request request, Http Servlet Response response) throws Servlet Exception, IOException{Discuss Form disuss Form=new Discuss Form () ;disuss Dao=new Discuss Dao () ;

disuss Form.set Discuss Title (Chinese.to Chinese (request.get Parameter ("discuss Title") ) ;

disuss Form.set Discuss Content (Chinese.to Chinese (request.get Parameter ("discuss Content") ) ) ;

disuss Form.set Discuss Time (Chinese.to Chinese (request.get Parameter ("discuss Time") ) ;

String result="添加公告失败!";

if (disuss Dao.operation Discuss ("添加", dis-uss Form) ) {result="添加公告成功!";}

request.set Attribute ("result", result) ;Request Dispatcher request Dispatcher=request.get Request Dispatcher ("back_Discuss Add.jsp") ;

request Dispatcher.forward (request, response) ;}public void do Post (Http Servlet Request request, Http Servlet Response response)

throws Servlet Exception, IOException{this.do Get (request, response) ;}

}

4 结论

随着Internet的广泛应用, 动态网页技术也应运而生, 针对如何设计一个结构灵活的个人博客网站进行了研究, 并将Java Bean和Servlet技术引入到个人博客网站的设计中, 经过测试, 该网站功能基本达到了个人博客的要求。

参考文献

[1][美]Michael Morrison JavaBeans使用手册[M].北京:机械工业出版社, 1997.

Servlet 篇9

事务在线审批是现代社会自动化办公的一个基本需求, 它利用网络将还处于手工状态的行政工作转变成一个完全自动化的信息处理系统。在现代办公中, 请休假、加班、用车、外出等事务在线审批工作多作为一些并不起眼的附属功能依附在自动化办公系统中, 功能一般比较简单, 只是按流程实现了事务流程审批功能, 而缺少对事务的申请控制、关联控制、统计分析等功能。为此, 中国人民银行阳江市中心支行 (以下简称“人行阳江中支”) 结合自身的人工审批管理流程, 进行了本地事务在线审批系统的开发工作。系统在实现请休假、加班、用车、外出等事务流程及统计分析功能的同时, 也实现了用户按工作时间自动计算年休假的申请控制、加班事务与请休假事务加班补休的关联控制, 还实现了用户利用小客户端, 不须登录系统即可定时得到待办事务的弹窗提醒功能。

二、事务在线审批系统的功能设计

根据本地事务流程的需求, 事务在线审批系统设计为系统管理、事务申请、事务审批与修改等7个部分, 系统功能如图1所示。

(一) 系统管理。

包括用户管理、群组角色管理、密码修改、日志查看等内容, 实现对用户/群组的新增、查看、修改及删除, 用户密码修改、重置、日志查看等基本配置和控制管理功能。权限控制在这里实现, 由群组角色确定, 分为系统管理员、人事管理员、请休假事务管理员、加班事务管理员、加班事务查看员、用车事务管理员、外出事务管理员、各部门负责人审批者、行级领导审批者、各事务管理审批者、一般用户等众多群组角色。按照最小权限的分配原则, 系统管理员只负责群组角色的新增、修改、删除, 用户的群组分配以及密码重置功能;人事管理员负责用户信息的新增、修改、删除, 调整用户所在部门以及假期信息;加班事务查看员为保卫科人员, 负责查看当前一段时间内的加班情况, 并为相关人员开门放行;各事务管理员负责对各自相应的事务进行后期的维护或办结;各级审批者负责各自权限的事务审批处理;一般用户则可进行事务申请和修改。

(二) 事务申请。

包括请休假申请、加班申请、用车申请、外出申请等内容, 实现系统事务的生成, 进入审批流程。请休假申请由用户姓名、所属部门、请假类等要素组成, 请休假类型中的年休假、探亲假、跨年假、加班补休的可休剩余天数均由系统自动计算并控制。年休假剩余天数=本人今年可休年休假天数-本人今年已休的休假天数;探亲假剩余天数=本人今年的可休探亲假天数, 若已休息一次, 本年度不可再休;跨年假剩余天数=本人去年可休年休假天数-本人去年已休息的年休假天数-今年已休息的跨年年假天数, 跨年假只在第一季度有效, 进入4月份后, 本年度不可再休;加班补休剩余天数=本人今年的已加班累计天数-本人今年的加班补休天数。通过上述限制, 如若用户申请的休假类型及其休假天数不符合相关控制, 用户将无法进行请休假申请。加班申请由经办人、所属部门、加班起止时间等要素组成, 其中加班人员名单与加班相当天数结合, 在加班事务通过审批后, 相应人员的加班相当天数将添加至请休假申请时的可休加班补休天数中。用车申请由经办人、所属部门、用车类型、出差人员、出差地点、派车事由、出差时间、出差联系人、集中上车点等要素组成。外出申请则由经办人、所属部门、外出人员等要素组成, 若外出事务申请审批通过, 经办人可通过该外出事务一键生成用车申请表格来提请用车事务审批。

(三) 事务审批与修改。

包括请休假审批与修改、加班审批与修改、用车审批与修改、外出审批与修改等内容, 这些事务主要通过各自的待办事务进行, 按照约定的事务流程, 流转到下一级审批者审批或退回经办人修改, 直至该事务完成整个审批流程或中止进行。

(四) 事务办结。

包括请休假办结、加班办结、用车办结、外出办结等内容, 为各事务管理员对各自事务后期的维护或办结。若某事务已经中止申请, 属于无效事务, 相应的事务管理员可对该事务进行清理删除。若某事务已经完成整个审批流程, 相应的事务管理员可对该事务的未完整信息或出现变动的信息进行补充或更正, 并结束该事务。

(五) 事务查看。

包括请休假查看、加班查看、用车查看、外出查看等内容, 相应权限人员可以通过关键字搜索要看到事务的具体情况, 其中经办人可查看本人事务及审批流转情况, 部门负责人可查看本部门所有人员事务及审批流转情况, 各事务管理员则可查看所有人员对应的被管理事务及其审批流程的情况。

(六) 统计分析。

是对请休假事务、加班事务、用车事务、外出事务的统计。其中经办人可查看本人的统计情况, 部门负责人可查看本部门所有人员的统计情况, 各事务管理员则可查看对应管理事务的所有人员统计情况。

(七) 待办事务提醒。

包括页面实时提醒和桌面定时提醒功能。用户登录事务在线审批系统操作Web页面时, 可实时了解本人当前还有多少数量的请休假、加班、用车、外出事务需要处理。若用户退出系统, 还可通过一个桌面提醒客户端——待办提醒器来定时获取本人请休假、加班、用车、外出待办事务的数量信息。

三、事务在线审批系统的关键实现

事务在线审批系统采用了以B/S结构为主, C/S结构为辅的混合模式进行开发, 其中B/S结构实现系统的各项主要功能, C/S结构实现桌面定时提醒功能。在技术上, 事务在线审批系统使用JSP+Servlet+Java Bean技术, 按照MVC设计模式进行框架式开发, 其中Java Bean作用相当于模型M, JSP作用相当于视图V, Servlet作用相当于控制器C, 系统体系结构如图2所示。

在项目进展过程中, 事务在线审批系统开发小组解决了以下关键问题, 使得系统得以顺利实现。

(一) 采用连接池技术连接数据库。

利用C3PO连接池的缓冲池技术, 可以创建预设数量的数据库连接, 使之放到连接池中, 留给系统中任何需要使用数据库的用户、线程或函数, 而不需要频繁地直接打开和关闭数据库, 大大提高了系统访问数据库的速度, 从而提升了系统的性能。连接池技术如图3所示。

(二) 使用面向对象的方法设计实体Bean模型。

对事务在线审批的每一种类型的事务进行实体Bean模型设计, 并与该类事务在数据库的各个字段一一对应。利用实体Bean与数据库的对应关系, 可以以面向对象的思维轻松操作数据库。譬如, 请休假事务, 设计为实体Bean_Vac模型, 流程审批的状态也转为事务的属性存在于模型中, 所有属性与数据库表TB_VAC中的字段一一对应。

在进行事务审批时, 请休假事务的申请被识别为实体Bean_Vac的新增, 事务的审批、修改、办结被识别为实体Bean_Vac的修改, 事务的清理被识别为实体Bean_Vac的删除。这样, 通过操作实体Bean模型的面向对象方法实现各类事务的整个审批流程。

(三) 采取网络监听获取待办事务数量信息。

【Servlet】推荐阅读:

上一篇:商务综合英语课程下一篇:闭合电路

本站热搜

    相关推荐