JSP页面启动Java应用程序的原理与实现

JSP页面启动Java应用程序的原理与实现


2024年4月27日发(作者:)

软件开发与设计 SOFTWARE DEVELOPMENT AND DESIGN 

JSP页面启动Java应用程序的原理与实现 

李安东 。王余旺。 

(1.安徽T程技术学校,宿州234000;2.安徽理工大学现代教育技术中心,淮南232000) 

摘要:由JSP页面启动Java应用程序在Web应用中有时可能是一件很有意义的工作。在某些专用的Web应用系 

统中,服务器往往既要响应客户端的页面请求,又要做一些后台的处JE-z-作。有些处理可能还需要人工的参与和操 

作,比如启动和关闭一个Java后台程序等等。通过用户自定义的标签,在标签的处理类中加入启动Java程序的代 

码。同时对Java程序作必要的调整,即可实现由JSP页面启动Java程序,可以使所有管理和使用系统的操作全部通 

过JSP页面来完成。当这样的Java程序很多时,会给管理、维护和使用系统带来很大的便利,对于不熟悉Java语言 

的用户尤为如此。实现了对系统的集中化管理,提高了系统的集成度和专业化程度。这种方法还有一个明显的优.董 

就是它与平台无关。 

关键词:JSP;Java;Swing;JSP页面启动Java程序;平台无关性 

The Principle and Implementation of Starting A Java Application from JSP Page 

LI Andong ̄,WANG Yuwang2 

(1・Engineering and Technology School of Anhui,Suzhou 234000 

2.Center of Modem Educational Technology,Anhui University of Science and Technology,Huainan 232000) 

【Abstract】It is very useful for people to launch a java application via jsp page in many web application systems.In some 

web systems,a server often has to do something in backend while it makes response in frontend for clients requesting jsp 

pages.Some processes may also need to engage in human control and manual operation,for example,starting and exiting a 

java program in backend and SO forth.The implementation of launching a java application from jsp page can be carried out 

from custom tag through adding some pieces of codes into the tag handler class and adjusting the java application itself,SO 

that all tasks of management,maintenance and operation of a web application system can be simply done completely in a jsp 

page.On the other hand,however,it's especially convenient for users who are not familiar with java language and when 

there are a lot of such java applications in a system.The centralized management of system mentioned above can also 

impmve integration and specialization of application systems.Apparently,this method is platform—independent because it is 

based on java and jsp. 

【Keywords】JSP;Java;Swing;start a Java application via JSP page;platform-independent 

在目前的很多JSP Web应用系统中,所有的查询功能都 

可直接应用于各种不同系统平台,无需重新编码。由于这种 

以JSP页面的形式提供给客户端的用户。而在Jsp服务器端除 

后台处理并不经常,所以采用图形界面对服务器的效率不会 

了提供页面服务功能外,有时可能还要进行一些后台处理工 造成明显影响。 

作。而且有些比较复杂的工作可能还必须由管理员在服务器 通过JSP页面启动Java程序,对于不熟悉Java语言的用 

上手工参与操作,例如启动和关闭一个Java后台处理程序, 

户来说,具有更加明显的实用价值。本文对如何由JSP页面启 

有时就需要由管理员来决定。为了很好地与人交互,显然不 

动Java程序,特别是启动包含图形界面的程序的原理及其实 

应该将这些处理工作直接放到JSP页面或自定义的标签处理类 

现过程进行初步的分析和探讨。 

内,而应该建立独立的Java应用程序。在这样的Java程序数 

1 启动方法(一) 

量很多的情况下,通过JSP页面来启动这些Java程序,将会 

本方法主要分析其在Windows环境下的实现过程,而由 

为管理带来很大的方便,可以使所有管理和使用系统的操作 

于Java语言的平台无关性,其在Linux等其它环境下的实现, 

全部通过JSP页面来完成。这种集中化的管理方式,将会有效 

均与此类似。由JSP页面启动Java图形界面的方法就是创建 

降低管理、维护系统的难度,避免造成混乱,同时也使整个 

个专用的自定义标签(custom tag),并在该自定义标签的处 

系统更加集成化和专业化。 

理类内添加启动图形界面的代码,用户通过JSP页面引用该标 

这样的后台处理程序也可以是一个Java图形界面程序, 

签启动图形界面。现将其具体实现过程及需要注意的问题分 

比如学校教务管理系统中的排课处理功能,图形化的界面更 

析如下。 

有利于管理员的操作。使用Java语言的Swing组件编写该图 

1.1添加启动代码 

形界面,可以使应用系统更加单一,便于开发和维护;并且 

下面假设实现图形界面的类为.IWord,自定义标签处理类 

本文收稿日期:2008年5月25日 

为Mytag,这些类都放在mytag包中。可以将启动代码添加到 

8一 

s0FTWARE DEvEL0PMENT八ND DEsIcN 

…………●…………………-…●●●…●………●●…-●…●●…●●●●●●●●…●…●●…●●●●●●●●●●●●●●●●●●●●●●●●…

软件开发与设计 

●●…●●…●-●…●-●……●●● 

自定义标签处理类的某~个方法中,比如添加到标签处理类 

的doStartTag 0方法中,也就是在该方法中调用JWord的入 

口方法main 0即可。示例代码如下: 

JWord.main(nul1); 

这里要说明的是JWord入口方法的名称并不一定要是 

main.而且此方法也不一定要是静态的,只要能完成初始化图 

形界面的功能即可,但其访问类型必须是public。 

自定义标签的制作过程请参阅有关资料,本文不作介绍了。 

1.2制作启动页面 

假设该自定义标签的名称为mytagl,其所在的标签库名 

称(前缀)为mytags,启动页面start.jsp内容如下: 

<html> 

<body> 

<%@taglib uri:”/WEB-INF/tlds/mytags0.tld”prefix=” 

mytags”%> 

<mytags:mytagl> 

,/请关闭本窗口。 

</mytags:mytag1> 

</body> 

</html> 

然后在首页index.html中添加一个超级链接指向该页面: 

<a href=”start.jsp”>启动JWord程序<,a> 

当用户在浏览器窗口中单击这个链接时,即可启动该图 

形界面。 

此时,该图形应用程序与JSP容器(比如Tomcat)运行 

在同一个JVM上,属于同一个进程,应该将其看成JSP应用 

的一个组成部分。而且JWord类应该和自定义标签的处理类 

处于同一个包中,以便在启动时能够找到它。 

1.3退出时的清理工作 

通常独立运行的Java应用程序,在关闭其顶层窗口后, 

是通过调用System.exit 0或Runtime.exit 0退出程序的。但 

是,按1.1和1.2中叙述方法启动的图形界面不能调用这两个 

方法退出。因为它是和Tomcat运行在同一个JVM上,调用上 

述方法后,JVM即被关闭,因而Tomcat也就被关闭了,这是 

不应允许发生的。因此当图形界面退出时,应将代码System. 

exit 0替换为: 

myFrame.dispose 0;//顶层的JFrarne对象 

Thread.currentThread().interrupt 0; 

,,结束event dispatch thread 

通过以上两行代码,释放了Swing组件所占用的内存资 

源,并结束其事件分发线程。 

1.4启动方式的判断 

为了允许用户在命令行上也能启动图形界面,程序有必 

要对其自身被启动的方式作出判断,以便对不同情况分别作 

出相应的处理,比如退出时是否调用System.exit 0。 

可以采用下列两种方式中的任何一种进行判断: 

(1)通过JSP启动时,可以传递给程序的main 0方法一 

个特定的参数,以此来判断是否由JSP启动。 

(2)在程序中添加一个与main 0不同的方法,作为J5P 

启动该程序时调用的人口点,而在命令行启动时,调用的一 

定是main 0方法,由此即可区分是以何种方式启动的程序。 

通常情况下,即使是由命令行方式启动,退出时不调用 

System_exit 0方法,而是按1.3中的方式处理也是可以的。当 

然,为了确保不出问题,还是应分别处理,详情请参见JDK6 

DOC中的资料“AWT Threading Issues”,地址是http://java.sun. 

comJjavase/6/docs/api/javalawlIdoe—files/AWqq'hreadlssues.html。 

1.5避免多实例运行问题 

如果启动的图形界面程序要进行数据库操作的话,可能 

需要避免多个实例同时在同一台机器上运行,以免数据的一 

致性遭到破坏。为了保证任何时候至多只有一个实例运行, 

可采取以下措施。 

在图形界面JWord类内设置一个静态变量: 

static public boolean existing false; 

在标签处理类Mytag的doStartTag 0方法内添加一个条件 

语句,判断JWord.existing为假时,就启动一个JWord的实例, 

否则就不启动。当第一个实例启动时,JWord的方法首先将静 

态变量existing改为true,这样即阻止了后续实例的建立。当 

图形界面退出时,再将existing恢复为false,以便需要时可以 

再次启动新的JWord实例。 

1.6禁止远程启动 

由于启动的图形界面是在服务器上运行的,所以应当禁 

止从客户机上远程启动。因此,启动图形界面时,应当检测 

是由本地启动,还是由远程启动。如果是远程启动,则应拒 

绝本次启动。此功能可通过比较请求者和本地机的IP地址 

来实现,如果请求者IP地址与本机IP地址相等,则是本地 

启动。 

在标签处理类内用如下代码可以获取客户机的IP地址: 

ServletRequest request pageContext.getRequest 0; 

String addr=request.getRemoteAddr 0: 

使用Networklnterface类提供的功能枚举出本机的IP地 

址。因为本机可能会有多块网卡绑定了多个IP地址,以及 

Linux定义的loealhost的IP地址127.0.0.1,所以本地机一般有 

多个IP地址。将客户端IP地址与本机的地址逐一进行比较, 

即可获知是否本地启动。获取本机IP地址的代码如下所示: 

import java.net.*; 

boolean loop true; 

Enumeration<Networklnterface>enum net=null; 

try{enum_net=Networklnterface.getNetworkInterfaces(); 

J 

catch(SocketExcepfion e) {loop=false;} 

while(enum_net.hasMoreElements 0&&loop) 

{ 

Networklnterface/let=enum

_

net.nextElement 0: 

Enumeration<InetAddress>enum

_

ip net.getInetAddresses 

0; 

while(enum_ip.hasMoreElements()) 

I 

InetAddress ip:enum

_

ip.nextElement 0: 

(下转到2l页) 

9一 

S0FrWARE DEVEL0PMENT AND DESIGN 

●…●●…●●●…●●-●●●●●●…●●●……●…-●●●●…●…●●●●●…………●●●…●…●●……●●●’…●……●●●● 

该算法的不足之处是,当求解问题比较复杂时,需要的 

业出版社,1999;138—142. 

进化代数较多,所产生的种群规模将较大,此时所需要的计 

算机资源及时间也相应增加。随着计算机硬件的发展,这些 

不足之处将得到有效解决。 

[3玄光男.遗传算法与工程优化【3]M】.北京:清华大学出版 

社,2004;48—54. 

【4】马知恩.种群生态学的数学建模与研究【M】.安徽:安徽 

教育出版社,1996. 

参考文献 

【5】汤岩,贾红雨,廖洁君.混合遗传算法在装箱问题中的应 

【1】隆栋.全球拥堵:港口面临“生存危机”[J].中国物流, 

用研究[J】.计算机与现代化,2004;(1 I).13—18. 

2005;(6).38-4O. 

【2】周明,孙树栋.遗传算法原理及应用【M】.北京:国防工 

(上接第9页) 

if fip!=null&&ip instanceof Inet4Address) 

3 小结 

{ 

本文较为详细地讨论了由JSP启动Java应用程序的问题, 

if(addr.compareTo(ip.getHostAddress 0)=0) 

f 

对于提高Web应用系统的专业化程度、简化管理维护和操作, 

JWord.main(nul1)-/,启动图形界面 

都具有一定的实际意义和作用。由于JSP和Java的平台无关 

loop=false; 

性,上述方法显然可以直接适用于各种OS平台。 

break; 

从编程的角度来看,方法(一)和方法(二)的复杂程 

1 

度基本是相同的,但方法(二)可能要耗费更多的系统资源, 

) 

因为在启动图形界面时,又启动了一个JVM。本文所讨论的 

} 

} 

方法均已在Windows环境下经过测试通过,希望能对同行在 

2 启动方法(二) 

开发Web应用时有所帮助。 

在标签处理类内启动图形界面还有另一种方式,就是利 

用Runtime.exec 0来启动,其参数就是在命令行启动程序时 

参考文献 

所用的命令。可以将如下的代码添加到Mytag类的doStartTag 

【l】Sun Micmsystems,Inc,.Java?Platform,Standard Edition 6 

O方法中: 

API Speciifcation;http://java.sun.com/javase/6/docs/api/,2006. 

String【】sl={tf java”,”mytag.JWord”l; 

【2]Sun Microsystems,Inc..The Java Tutorials;http://java.sun.corn/ 

Runtime FUll=Runtime.getRuntime(); 

docs/booksitutorial,2007. 

if(!exist) 

[3】Sun Mierosystems,Ine..AWl"Threading Issues.jdk-6一 

{ 

exist=true; 

doc ̄api\javakawt\doc-fileskAWTrhreadlssues.html,2007. 

try 

【4]Eric Armstrong,Jennifer Ball,Stephanie Bodoff,Debbie Bode 

{ 

・ 

Carson,Ian Evans,Dale Green,Kim Haase,Eric Jendroek;The 

Process P=TUn.exec(sl,null,new File(Mytag.class.get— 

J2EE 1.4 Tutorial For Sun Java System Application Server 

ClassLoader 0 

Platform Edition 8 2.USA:Sun Microsystems,Inc.,2005. 

getResource(””).getPath())); 

P.waitFor(); 

【5】The Apache Software Foundation.Servlet API Documentation; 

) 

http://jaka ̄a.apache.org,1999—2002. 

catch 0ava.io.IOException e){) 

【6]Sun Microsystems Ine..JavaServer Pages AP1 Documentation; 

catch(1nterruptedException e){} 

http://java.sun.com/does,2005. 

exist=false; 

【7】Sun Mierosystems,Inc..JavaServer Pages Standard Tag Li- 

} 

用这种方法启动,图形界面的每一个实例都将会作为一 

brary 1.1 Tag Reference.http://java.sun.tom/docs,2002-2003 

[8】The Apache Software Foundation.Jakarta Taglibs.http:// 

个独立的程序运行在一个新的JVM上,与Tomeat属于不同的 

jaka ̄a.apache.org,2000-2004. 

进程。此时,如果要禁止多实例同时运行,就不能用JWord 

类中的静态变量来控制了,而应使用标签处理类Mytag类的静 

[9】Sun Micmsystems Inc..Tag Libraries Tutorial(v.1.o).http:// 

态变量来控制,因为这两个类在运行时属于不同的地址空间。 

java.sun.com/does,2000. 

所以此时应将exist定义成Mytag类的静态变量。 

作者简介 

static private boolean exist=false; 

李安东,男, (1958一),高级程序员,工学硕士,专业方向 

此时因为每个图形界面的实例都是一个独立进程,所以 

计算机网络与软件工程。 

其退出时可以调用System.exit 0。禁止远程启动等问题仍然按 

王余旺,硕导,副教授,安徽理工大学现代教育技术中心 

方法一中的分析来处理。 

主任。 

21— 


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714225722a2405756.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信