将返回给JavaScript一个空字符串,在别的情况下(如果不是数组),将返回Java对象的字符型返回值。如果你的Java函数返回数组或者向量(Vector)或枚举(Enumeration),结果将被表示为JavaScript中的数组。例如:在类dbpool中,你如果有某个函数performQuery(some_sql_string)来通过JDBC来调用SQL查询,将转换ResultSet成为数组(或向量)然后把这个数组返回给JavaScript。
res=java.dbpool.performQuery("select * from emp");
first=res[0];
second=res[1];
程序还应该实现控制台(JINJ控制台),这样你就可以直接从浏览器中运行这个Servlet,并且可以创建/删除对象,相应的命令是: http://your_host/servlet/JINJ?your_password
在JavaScript程序中整合Java函数(5)
时间:2010-12-25
或者,如果你使用扩展名映射JinJ的话,则::
http://your_host/your_file.JinJ?your_password ,这些都应当在程序中体现,你可以在servlet的初始化参数中设置口令,参数名是admin. 如:
JINJ.code=JINJ
JINJ.initparams=admin=secret,
servlet=http://myhost/servlet/JINJ,
root=/home/www/pub,
objects=/home/load/obj.txt,
codebase=http://myhost/
默认的密码值是abcd,所以使用JINJ?abcd 将运行管理员界面,通过这一页,你可以删除或者创建新的对象的实例。
下面,然我们来看看具体在Java代码上如何实现我们的构思:
JinJ.java
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class JinJ extends HttpServlet
{ public JinJ()
{
}
public void init(ServletConfig servletconfig)//初始化
throws ServletException
{
super.init(servletconfig);
inst = new Hashtable();
cls = new Hashtable();
NEWLINE = System.getProperty("line.separator"); file://获取行分割符在本系统中的属性值,例如在UNIX下为
separator = System.getProperty("file.separator");//获取文件分割符在本系统中的属性值,例如在UNIX下为/
if((THIS_SERVLET = getInitParameter("servlet")) == null)
file://getInitParameter方法,返回一个字符串,包含命名的初始化参数的值,如果参数不存在则为空。
THIS_SERVLET = "";
if((admin = getInitParameter("admin")) == null)
admin = "abcd";
if((DOCUMENT_ROOT = getInitParameter("root")) == null)
DOCUMENT_ROOT = "";
if(DOCUMENT_ROOT.length() > 0 && !DOCUMENT_ROOT.endsWith(separator))
file://如果DOCUMENT_ROOT的长度为正值,并且不以文件分割符结尾则
DOCUMENT_ROOT = DOCUMENT_ROOT + separator;
if((CODEBASE = getInitParameter("codebase")) == null)
CODEBASE = "";
JAVA_FILE = getInitParameter("objects");
if(JAVA_FILE != null && inst != null)
loadJava(JAVA_FILE);
}
private void loadJava(String s)
{
System.out.println("从" + s +"调用Java对象 ");
try
{
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new FileInputStream(s)));
file://创建一个文件输入流缓冲区
String s1;
file://开始分析文件
while((s1 = bufferedreader.readLine()) != null)//每次读入一行
{
s1 = s1.trim(); file://把字符串两端的空格去掉
/*********************************************************
* 如果以";"结尾则去掉";"
***********
|