开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

ToDoTasks: Web激活的Java应用程序
作者: DJ Walker-Morgan
2006-07-25 15:26:21



现在需要添加下部构造运行它。我们使用Jetty,这是个轻量级但很灵活的HTTP服务器和servlet容器。有很多方法设置Jetty;显然最简单的是仅仅设置servlet的支持功能。在Controller的构造器上,我们添加了Jetty服务器的初始化代码:首先创建一个HttpServer,然后告诉它侦听8000端口,然后获得服务器和我们能够添加处理机的所有HttpContext。

HttpServer server=new HttpServer();

server.addListener(":8000");

HttpContext context=server.getContext("/");

然后创建一个ServletHandler,它能将来自URL的请求映射到指定的servlet。接下来,我们将servlet添加到处理机上,再将此处理机添加到内容(context)上。

ServletHandler handler=new ServletHandler();

handler.addServlet("Report","/report",

"com.builder.uk.todotasks.servlets.Report");

context.addHandler(handler);

addServlet方法给servlet命名,包含了servlet被调用的路径和servlet的类名。路径与我们用到的getContext的路径是相关的。这样,当我们访问http://localhost:8000/report时,servlet将被调用。如果我们获得内容“/fred/”,而不是“/”,servlet将会出现在http://localhost:8000/fred/report上。

ServletContext sc=handler.getServletContext();

sc.setAttribute("tasks",tasks);

打开服务器。

try {

server.start();

} catch (Exception ex) { ex.printStackTrace(); }

为了建立一个示例,我们需要org.mortbay.jetty.jar, javax.servlet.jar和commons-logging.jar这几个Jetty库,他们都可以在网站Jetty web site上得到。运行这一版本,将得到在8000端口运行的Web服务器,然后在http://localhost:8000/repor给出我们的报告。

但是,如果到另外一个页面,本地服务器将产生错误,并且如果我们添加图像或其他资源则需要添加另外的处理机,并且所有的servlet都很难编码。除非你的要求很简单,不然它不是很灵活,很快就失去控制了。这里有更好的方法:Web-app打包。关于web-app的办法是将所要供应的所有文件打包到一个路径下。为了达到此目的,我们将所有web-app都放在webapp路径下。在此路径下有个WEB-INF文件夹,里面保留有配置文件并且有一个web.xml的文件,它用于配置服务器。这里给出了web.xml文件,它用于配置我们的servlet:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>ToDoTasks</display-name>

<servlet>

<servlet-name>Report</servlet-name>

<servlet-class>com.builder.uk.todotasks.servlets.Report</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Report</servlet-name>

<url-pattern>/report</url-pattern>

</servlet-mapping>

</web-app>

<servlet>部分用于定义servlet的名字和与此名字相关联的servlet的类名。<servlet-mapping>部分将以命名的servlet与url模式相关联。这些部分与我们上面提到的handler.addHandler是等价的。为了初始化web程序,我们替换了HTTPServer,并且采用下面的代码添加了一个处理机:

Server server=new Server();

server.addListener(":8000");

WebApplicationContext context=server.addWebApplication("/","./webapp/");

context.setAttribute("tasks",tasks);

打开一个普通Jetty服务器,告诉它侦听8000端口。然后创建带根符号“/”的WebApplicationContext告诉服务器它能在webapp路径下找到web程序。我们直接在WebApplicationContext下设置“tasks”参考,在servlet下通过Tasks实例。

现在有个Web程序支持JSP,所以我们需要添加库:Jasper JSP编译器和运行时,即jasper-compiler.jar和jasper-runtime.jar,然后还需要ant.jar和commons-el.jar;这些在Jetty中都能找到。它们各就各位后,重新运行ToDoTasks,发现我们能到达http://localhost:8000/report页面并且获得报告内容,与前面运行的结果没有区别。你可能对这个没什么印象;我们替换了启动代码中的几行,添加了XML文件。这是因为我们很少用到Web程序。

回到webapp路径下,我们可以添加一个index.html文件指导人们获得报告。这个文件就位以后,我们可以浏览http://localhost:8000/并且看到一个没有任何代码的欢迎页面。也可以加入JSP页面,虽然它经过了我们的配置,但是你可以在示例中使用基本点 JSP;另外,你可以在webapp路径下找到与JSP一样的report servlet的一个简单版本jspreport.jsp。它能提供webapp路径下与WEB-INF路径分开的任何东西;人们不需要清楚了解其配置。当你构建一个应用程序时,记住与Jar文件一起取得webapp路径,你可以将webapp路径存档到.WAR文件中,并且在addWebApplication调用中指定.WAR文件而不是指定路径,像这样:

WebApplicationContext context=server.addWebApplication("/","./webapp.war");

为了创建WAR文件,可以使用标准jar工具,war文件是以.war为扩展名的jar文件。在本工程中,我们在项目目录下,运行:

jar cvf webapp. war -C webapp .

创建war文件。“-C”标记在开始存档之间改变路径到webapp;如果只运行“ar cvf webapp.war webapp”命令,将会在webapp文件夹中的war文件中创建包含所有内容的档案文件,并且在加载时不能正确工作。

现在对嵌入了web服务器和web-app的ToDoTasks应用程序有些感觉了吧,但是web接口还不稳健,还有一些没有整理没有过滤的报告。在下文中,我们将对此进行阐述。

可以下载源码指南

DJ Walker-Morgan是个有顾问资格的开发员,专门研究Java和用户对用户的通讯和会议。

责任编辑:张琎

查看本文的国际来源

【上一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号