小菜毛毛技术分享

与大家共同成长

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

#

1.hibernate中配置int和integer的区别
2.手写,spring+hibernate配置
3.JavaScript时间和如何实现继承
其他略忘了

posted @ 2010-04-08 09:35 小菜毛毛 阅读(208) | 评论 (0)编辑 收藏

下面的安装以myeclipse6.0为例

一、下载:

http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download(jdaclipse插件主页)

下载插件:

JadClipse 3.3

This release stream is appropriate for Eclipse 3.3.

Filename Size Description
net.sf.jadclipse_3.3.0.jar 45 KB JadClipse for Eclipse >= 3.3M6


JadClipse 3.2

This release stream is appropriate for Eclipse 3.2.

Filename Size Description
net.sf.jadclipse_3.2.4.jar 45 KB JadClipse for Eclipse >= 3.2M5
jadclipse_3.2.0.jar 54 KB JadClipse for Eclipse 3.2M3 and M4


JadClipse 3.1

This release stream is appropriate for Eclipse 3.1.

Filename Size Description
jadclipse_3.1.0.jar 54 KB JadClipse for Eclipse 3.1 (including milestone builds starting from 3.1M6 up to 3.2M2)

myeclipse6.0 就下载JadClipse 3.3


下载Jad反编译工具:
http://www.varaneckas.com/jad,在该页中找到适合自己操作系统平台的jad下载。下载后解压,然后将解压后的jad.exe文件复制到%JAVA_HOME%"bin目录下面(可以将jad.exe放到任意位置,只要记住其存放路径就好,下面要用到)。

二、安装:

Eclipse中的插件安装可以参考:
   
方法1、直接将x.x.x.jarx.x.x.代表版本号)复制到%ECLIPSE_HOME%"plugins目录下。

方法2、使用link方式安装,建立D"Myplugins"jadclipse3.2.4"eclipse"plugins的目录结构,将jadclipse_3.2.4.jar放到plugins目录下面(注:其中D"Myplugins为你自己定义的一个专门放置插件的目录)。再在%ECLIPSE_HOME%"links目录下面建立一个jadclipse3.2.4.link文件(该文件名随便取)。文件里面内容为:path=D/Myplugins/jadclipse3.2.4.

三、 使用:
启动eclipse,点击反编译的类文件,此时会激活jadclipse插件,在eclipse菜单中会多出一个jadclipse菜单, 如下图所示:

一般地它会自动 反编译相应的class文件,如果没有自动反编译,请点击
jadclipse->Decompile
如下图所示:


常见问题及解决:

(一)启动eclipse,打开Window->Preferences->Java->JadClipse,如果没有找到JadClipse,即JadClipse插件没有激活。

1)检查插件安装的版 本是否与你安装的eclipse版本对应

2)使用 –clean参数来启动eclipse
  (二)在使用JadClipse插件反编译class文件时出现如下类似错误:
/*jadclipse*/
 
/*
               DECOMPILATION REPORT
 
               Decompiled from: D:"Program Files"Java"jdk1.5.0_12"jre"lib"rt.jar
               Total time: 16 ms
               Jad reported messages/errors:
               Exit status: 0
               Caught exceptions:
java.io.IOException: CreateProcess: (...)
 

请确保你的Jad路径在eclipse中正确制定。
   
启动eclipse,打开:Window->Preferences->Java->JadClipse.
1
Path to decompiler,这里设置反编译工具jad的全路径名,比如:%JAVA_HOME%"bin"jad.exe.
2
Directory for temporary files,这里设置临时 文件路径。

至于Window->Preferences->Java->JadClipse目录下的DebugDirectivesFormattingMisc目录中的参数 设置,就不再罗嗦了。

(三)安装完成后,eclipse没有自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。

如果没有默认,可以在EclipseWindows—> Perference—>General->Editors->File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”。设置完成后,双击*.class文件,eclipse将自动反编译。

posted @ 2010-04-01 11:13 小菜毛毛 阅读(550) | 评论 (0)编辑 收藏

OGNL介绍
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功 能。它使用相同的表达式去存取对象的属性。
XWork遵循“不要重复地发明同一个轮子”的理论,它的表达式语言核心用的就是这个OGNL。我们先 来看看一个简单的例子:
还记得我们用户注册的那个例子吗?我们输入框的name用到的名字就是OGNL的表达式,比如:用户名的输入 框:“<input type="text" name="user.username">”,在用户注册成功之后我们要显示用户注册的信息,用了“<ww:property value="user.username"/>”。Input输入框里的“user.username”,它解析成Java语句 为:getUser().setUsername();,property标签里的“user.username”解析为Java语 句:getUser.getUsername();。
我们的两个表达式都是相同的,但前一个保存对象属性的值,后一个是取得对象属性的值。表达式 语言简单、易懂却又功能强大,关于OGNL更多的介绍可以去http://www.ognl.org, 那里有很详细的文档
 
值堆栈-OgnlValueStack
OGNL在框架中的应用,最主要是支持我们的值堆栈(Value Stack)——OgnlValueStack,它主要的功能是通过表达式语言来存取对象的属性。用户界面输入数据,它会根据保存表达式将数据依次保存到 它堆栈的对象中,业务操作完成,结果数据会通过表达式被获取、输出。
还记得我们用户注册的例子吗?下面我们用一段程序来演示它向 OgnlValueStack中保存、取得数据的步骤:
 
// DemoRegisterValueStack
package example.register;
import com.opensymphony.xwork.util.OgnlValueStack;
 
public class DemoRegisterValueStack {
    public void demo(){
        RegisterAction action = new RegisterAction();
        OgnlValueStack valueStack= new OgnlValueStack();
        valueStack.push(action);
       
        valueStack.setValue("user.username","Babydavic");
        System.out.println("username = "+valueStack.findValue("user.username"));
    }
 
    public static void main(String[] args) {
DemoRegisterValueStack demoValueStack = new DemoRegisterValueStack();
        demoValueStack.demo();
    }
}
 
我们来看一看它的demo()方法:
1、   创建我们的Action(RegisterAction)类的对象action,将action对象压入堆栈valueStack中。在WebWrok中 Action的创建、入栈是在DefaultActionInvocation构造函数中进行的,详细介绍见:ServletDispatcher原理。
2、   通过表达式语言,调用堆栈对象的get()、set()方法,设置该对象的值。
   public void setValue(String expr, Object value)
   语句:valueStack.setValue("user.username","Babydavic");
   的作用等同于:action.getUser().setUsername("Babydavic");
3、   通过表达式语言,去堆栈对象中查找我们前面保存的值,并在控制台打印。valueStack.findValue("user.username")等同 与语句:
action.getUser().getUsername()
最后控制台打印的结果:
         username = Babydavic
 
 
CompoundRoot
在OgnlValueStack中,一个堆栈其 实是一个List。查看OgnlValueStack你会发现,堆栈就是 com.opensymphony.xwork.util.CompoundRoot类的对象:
 
public class CompoundRoot extends ArrayList {
    //~ Constructors /////////////////////////////////////
    public CompoundRoot() {
}
 
    public CompoundRoot(List list) {
        super(list);
}
 
    //~ Methods ////////////////////////////////////////////
    public CompoundRoot cutStack(int index) {
        return new CompoundRoot(subList(index, size()));
}
 
    public Object peek() {
        return get(0);
    }
    public Object pop() {
        return remove(0);
    }
    public void push(Object o) {
        add(0, o);
    }
}

我们通过表达式向堆栈对象操作时,我们并不知道堆栈中有哪些对象。OgnlValueStack会根据堆栈由上向下的顺序(先入栈在下面,最后入栈 在最上面)依次去查找与表达式匹配的对象方法,找到即进行相应的存取操作。假设后面对象也有相同的方法,将不会被调用。
下面我们看一个对 OgnlValueStack操作的程序,它主要演示了如何对Map对象的存取和OgnlValueStack堆栈的原理
 
package example.register;
 
import com.opensymphony.xwork.util.OgnlValueStack;
 
public class DemoGroupValueStack {
   
    public void demoAction(){
        DemoGroupAction action = new DemoGroupAction();
        OgnlValueStack valueStack= new OgnlValueStack();
        valueStack.push(action);
       
        User zhao = new User();
        zhao.setUsername("zhao");
        zhao.setEmail("zhao@yahoo.com.cn");
       
        User qian = new User();
        qian.setUsername("qian");
        qian.setEmail("qian@yahoo.com.cn");
       
        valueStack.setValue("users['zhao']",zhao);
        valueStack.setValue("users['qian']",qian);
       
       
        System.out.println("users['zhao'] = "+valueStack.findValue("users['zhao']"));
        System.out.println("users['qian'] = "+valueStack.findValue("users['qian']"));
        System.out.println("users size = "+valueStack.findValue("users.size"));
       
        System.out.println("allUserName[0] = "+valueStack.findValue("allUserName[0]"));
    }
   
    public void demoModels(){
       
        User model_a = new User();
        model_a.setUsername("model_a");
        User model_b = new User();
        model_b.setUsername("model_b");
        User model_c = new User();
        model_c.setUsername("model_c");
       
        OgnlValueStack valueStack= new OgnlValueStack();
        valueStack.push(model_a);
        valueStack.push(model_b);
        valueStack.push(model_c);
       
        System.out.println("username = "+valueStack.findValue("username"));
        System.out.println("[1].username = "+valueStack.findValue("[1].username"));
        System.out.println("[0].toString = "+valueStack.findValue("[0]"));
        System.out.println("[1].toString = "+valueStack.findValue("[1]"));
        System.out.println("[2].toString = "+valueStack.findValue("[2]"));
       
    }
    public static void main(String[] args) {
        DemoGroupValueStack demoValueStack = new DemoGroupValueStack();
        demoValueStack.demoAction();
        demoValueStack.demoModels();
    }
}
 
 
package example.register;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class DemoGroupAction {
   
    private Map users = new HashMap();
   
    public Map getUsers(){
        return this.users;
    }
   
    public List getAllUserName(){
        return new ArrayList(users.keySet());
    }
    public String execute(){
        //执行业务操作
        return null;
    }
    public String toString(){
        return users.toString();
    }
}
注意:1、 Map属性的存取,它的表达式语言如:users['zhao'],注意它用’’来引用HashMap的key字符串。
2、 demoModels()方法演示了OgnlValueStack中堆栈的原理,请特别注意它的 [0].toString、[1].toString、[2].toString,它们依次调用堆栈中对象的toString()方法,并逐一的减少堆栈 最上面的对象。
控制台输出的结果如下:
users['zhao'] = username=zhao;password=null;email=zhao@yahoo.com.cn;age=0
users['qian'] = username=qian;password=null;email=qian@yahoo.com.cn;age=0
users size = 2
allUserName[0] = qian
 
username = model_c
[1].username = model_b
[0].toString = [username=model_c;password=null;email=null;age=0, username=model_b;password=null;email=null;age=0, username=model_a;password=null;email=null;age=0]
[1].toString = [username=model_b;password=null;email=null;age=0, username=model_a;password=null;email=null;age=0]
[2].toString = [username=model_a;password=null;email=null;age=0]

posted @ 2010-03-31 10:52 小菜毛毛 阅读(459) | 评论 (0)编辑 收藏

axis2创建web service(一)

 http://blog.csdn.net/chnic/archive/2008/03

/13/2179760.aspx

http://www.javaeye.com/topic/284387                                                

axis2 是新一代的web service开发工具,它会让你的web service开发变得轻松,快捷。下面让我们以一个实际的例子来体验一下。

首先,工欲善其事,必先利其器。就让我们先做好一些必备的准备工作吧。

 

1.下载axis2 的2进制的包和war,现在的最新版本是1.4.1 发布时间是2008-8-25

地址 http://ws.apache.org/axis2

具体的1.4.1版本的http://ws.apache.org/axis2/download/1_4_1/download.cgi

 

2.把下载后的war放入tomcat的webapps目录里,然后启动tomcat,这样war包就会自动解压为目录axis2

在浏览器中输入http://localhost:8080/axis2/ ,如果一切正常你会看到下面的画面

 




 
 3,就开始准备一下axis2的eclispe的插件 了。axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮 我们用wsdl文件生成stub代码的。

下载地址是

http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-service-archiver-wizard.zip

 

http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip

下载完2个压缩文件后,可以直接把解压后的文件拷贝到plugins目录中,也可以在links目录中写文件路径的方式来安装插件,安装完插件后, 打开eclipse,在package explorer 中点击右键--->选择new---->other

如果安装正确你会看到



 这样准备工作就都做好了。接下来就是正式开发了。

开发的过程,下回分解。。。。。

 

工具都已经准备齐全了。我们来动手做一个小例子来小试牛刀!

这一节我们先利用axis2来发布一个web service 的服务,然后在下一节我们做一客户端来调用这个服务。

我们的服务很简单的,就是输入一个字符串,然后打印出一段字符串。

代码很简单,主要是测试用。

Java代码
  1. package com.deltaj.server;  
  2.   
  3. public class SimpleServer {  
  4.   
  5.     /** 
  6.      * 简 单的测试方法 
  7.      *  
  8.      */  
  9.     public String simpleMethod(String name) {  
  10.         return name + "Say this is a Simple method ^-^";  
  11.     }  
  12.   
  13. }  

主要的过程就是如何利用axis2的eclispe插件来发布这个服务啦。

1。在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other...----->Axis2 Service Archiver


2.然后点击next进入了类选择页面,在这个页面中的Class File Location选择框中选择类所在的文件夹。 


 3.点击next之后进入了选择 wsdl文件,这里我们选择skip wsdl。


4. 点击next之后,进入的是选择jar文件的页面,这里我们没有外部的jar,所以点击next直接跳过这个页面。



 4.点击next之后,进入的是选择xml页面,这里我们选择的是自动生成xml,也就是勾选

Generate the service xml automatically这一项



 5.点击next之后,进入的是生成xml文件的页面,在service name 里填写这个服务所起的名字,这里我起名为simpleServer,然后在class name 中填写要发布的类,这里一定要写全路径,写好后就可以点击load 按钮,如果一切ok的话,你会看到如下画面




 6 点击next 后,进入的是输出artiver文件的页面,先要在output File location 中选择要输出的路径,

   在output  File Name中输入artiver文件的名称。我起的名字是simpleServer



 7.点击finish ,如果看到如下的画面,恭喜你,服务发布成功啦

8.接下来,我们就可以把这个aar文件放入tomcat中发布,首先把生成的aar文件拷贝到tomcat目录中的axis2项目的 service目录中位置如图。



 

9.接下来启动tomcat,在地址栏中输入http://localhost:8080/axis2 , 你会看到axis2的欢迎画面



 

10.点击Service连接,你会看到发布的服务列表。这里面就能看到我们发布的simpleService



 11.点击我们的服务simpleServer的连接,我们会看到。至此,服务发布成功。

 
 

   这节我们就来写一个客户端来调用一下这个服务。主要关注一下如何用elispe的axis2的插件来生成stub代码。

1.在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other...----->Axis2 Code Generator




 

2.点击next,进入下一个页面,选择从wsdl文件来产生java文件。


 

3. 点击next,然后选择wsdl文件,注意此处要填写上一节我们


 4.点击next,进入设置页面,这里我们就用默认的设置。


 

5. 点击next,选择输出文件的路径。


  (出错解决方案:

除了把backport-util- concurrent-2.2.jar加到lib中, 加<library name="lib/backport-util-concurrent-2.2.jar">
          <export name="*"/>
    </library>  到plugsin.xml
还要
1. 把Axis2_Codegen_wizard_1.3.0(eclipse/plugins/Axis2_Codegen_wizard_1.3.0)的 名字改成Axis2_Codegen_wizard_1.4.0
2. 在plugin.xml中在<plugin>中 把Axis2_Codegen_wizard的version="1.3.0"改成version="1.3.0"
5 楼 eason.j 2009-05-19   引用
在MyEclipse6.5中会报错:
An error ocurred while completing process
-java.lang.reflect.InvocationTargetException

主要的问题在于 Code Generator plugin 内缺少了 backport-util-concurrent-3.1.jar 包和geronimo-stax-api_1.0_spec-1.0.1.jar 包。
[解决方案] :

1.关闭 Eclipse

2.copy  %AXIS2_HOME%"lib" 下的
backport-util-concurrent-3.1.jar 和 backport-util-concurrent-3.1.jar
复制到 MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"lib 文件夹下。

3.注册此 jar 包:
修改MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"plugin.xml 文件
在 <runtime> 內加入下面的字串
    <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
       <export name="*"/>
   </library>
    <library name="lib/backport-util-concurrent-3.1.jar">
          <export name="*"/>
    </library>

到plugin.xml文件中,保存后重新启动Eclipse即可。

)

6.点击next,如果看到这个页面,恭喜你已经生成代码成功。

 

7.在package Explorer中刷新一下项目,然后你发现出现2个新的文件SimpleServerStub和 SimpleServerCallbackHandler 。打开SimpleServerStub你会惊喜的发现。著名的小红叉一个接一个的

这是因为没有axis2的类包。我们可以在下载的axis2-1.4.1-bin中找到lib包,把其中的jar都加入我们的工程中。

然后重新编译一下工程,这时我们发现SimpleServerStub还是有几个小红叉。这个是因为这个插件有个小bug。

生成的代码没有实现序列化方法。我们可以自己来加上,在小红叉上点一下,弹出一个小菜单,选择

Add unimplemented methods .



 

8.

Java代码
  1. /** 
  2.  * 调 用发布的服务。 
  3.  *  
  4.  */  
  5. public class SimpleClient {  
  6.    
  7.  public static void main(String[] args) throws Exception{  
  8.     
  9.   //初始化桩文件  
  10.   SimpleServerStub stub = new SimpleServerStub();  
  11.   //初始化SimpleMethod方法。  
  12.   SimpleServerStub.SimpleMethod request = new  SimpleServerStub.SimpleMethod();  
  13.   //调用simpleMethod的setName方法。  
  14.   request.setName("zt");  
  15.   //  
  16.   System.out.println(stub.simpleMethod(request).get_return());  
  17.     
  18.     
  19.  }  
  20. }  

   如果一切正常,你就会看到结果

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
ztSay this is a Simple method ^-^。

调用服务成功。这是个简单的例子,下节我们再做一个复杂一点的例子,来更好的学习axis2

posted @ 2010-03-29 16:35 小菜毛毛 阅读(1079) | 评论 (0)编辑 收藏

我们2005年底就做了一个Wap网站“WAP一把刀实用查询大全”,当 时没有统计、没有广告,只有简单的免费服务功能。

  2007年Google推出AdSense for Mobile的时候,我们对Wap网站代码进行了一些整理,以方便统一加入广告代码,同时我们也加入了一段某公司提供的Wap统计代码,可惜做Wap统计 这样的免费功能只有投入没有收入,一般公司都不愿意长久做,所以都没能用很长时间,换了1、2次统计代码后我们也放弃了统计,就从AdSense中的分渠 道统计移动广告收入的数据来大概知道网站的访问流量。

  今年从Analytics的英文官方博客中看到Google终于承担起这个免费的Wap统计任务,不过我忙于其它事情,一直没有加上代 码试试。

  前些天AdSense移动广告的代码要求更新,但我们用新代码却无法正常访问,已经给Google的人写邮件询问去了,等待答复中。

  昨天在为其它Web网站添加Google Webmastertools中的站点地图时,顺便把wap.18dao.com也验证加入了,然后试着将Analytics的移动统计代码加入,这个代 码可以从“Analytics(分析)设置 - 配置文件设置 - 检查状态 - 跟踪代码 - 高级”中选择“针对手机创建的网站”,可以提供“选择您的移动网站的服务器端语言”为:

  • PHP
  • Perl
  • JSP
  • ASPX

  我们以前是用JSP开发的,选择JSP后提示:

将代码粘贴到您的移动网站

请注意:请勿在使用移动跟踪的网页上使用台式机跟踪代码。

第 1 步:复制下列代码,然后将其粘贴到您要跟踪的每个网页的 <html> 标记之前,并使其紧邻此标记。

<%@ page import="java.io.UnsupportedEncodingException,
java.net.URLEncoder" %>
<%!
// Copyright 2009 Google Inc. All Rights Reserved.
private static final String GA_ACCOUNT = "MO-241337-53";
private static final String GA_PIXEL = "ga.jsp";

private String googleAnalyticsGetImageUrl(
HttpServletRequest request) throws UnsupportedEncodingException {
StringBuilder url = new StringBuilder();
url.append(GA_PIXEL + "?");
url.append("utmac=").append(GA_ACCOUNT);
url.append("&utmn=").append(Integer.toString((int) (Math.random() * 0x7fffffff)));
String referer = request.getHeader("referer");
String query = request.getQueryString();
String path = request.getRequestURI();
if (referer == null || "".equals(referer)) {
referer = "-";
}
url.append("&utmr=").append(URLEncoder.encode(referer, "UTF-8"));
if (path != null) {
if (query != null) {
path += "?" + query;
}
url.append("&utmp=").append(URLEncoder.encode(path, "UTF-8"));
}
url.append("&guid=ON");
return url.toString().replace("&", "&");
}
%>

第 2 步:复制下列代码,然后将其粘贴到您要跟踪的每个网页的 </body> 标记之前,并使其紧邻此标记。

<% String googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(request); %>
<img src="<%= googleAnalyticsImageUrl %>" />

将此文件复制到您的根目录

下载 ga.jsp 并将其保存到您的网络服务器的根目录 ("/")。请确保将您的根目录配置为执行服务器端代码。

  我们以前开发时,用的wml 1.x,根本就没有<html>和</body>标记,不过有对应的<wml>和</card>,我一 步一步按照上面的要求设置了。顺便还把以前浏览器报错的地方统一批量修改替换掉。

  有几个特别说明的地方:

  • 第一段代码我放在页面中不同地方试过,<wml>前或者后都可以,为了方便,我就放在<card>后,第二段放 在</card>前
  • ga.jsp中说要修改cookie存放路径,我不知道应该如何设置,没有改
  • 如果是网站子目录(例如:http://wap.18dao.com/study/index.jsp )中调用代码的话,需要将“private static final String GA_PIXEL = "ga.jsp";”改为“private static final String GA_PIXEL = "http://wap.18dao.com/ga.jsp";”

  从实际运行的情况看,对Wap网站没有特别的影响,也没有像以前其他小公司搞的统计代码都带个图标链接,Analytics的wap和web版 本一样,都不在网页中显示任何内容。

  登录Analytics后台已经可以看到有统计数据产生了,wap网站的统计数据和web网站的统计数据差不多全面,比以前的其它免费 wap统计都强很多,不仅仅是简单的访问数据统计,更重要的还有各种分析功能。我准备打开Analytics与AdSense结合的功能看看能否还统计出 AdSense的情况,另外也打开内部搜索统计试一试,有新的发现后再补充在日志中。

  用Analytics中的Wap统计有一点最放心:不用害怕Google过一阵子不再提供这个服务了。Image:Face-027.gif

posted @ 2010-03-22 14:52 小菜毛毛 阅读(2273) | 评论 (2)编辑 收藏

有关插件安装问题,四种常用的方法在此特别注明:

1. “帮助”->“软件更新”->“查找并安装”->“搜索要安装的新功能部件”->“新建远程站点”(此种方式用于在线更新)

2. “帮助”->“软件更新”->“查找并安装”->“搜索要安装的新功能部件”->“新建本地站点”(如果插件已经下载到了本地,请不要用第一种方法)

3. 直接拷贝plugins和features两个目录下的内容置于$Eclipse_Home$/对应的plugins和features下面

4. 用link外链接与外部插件关联


   前三种方法都会将插件文件拷贝至相$Eclipse_Home$/对应的plugins和 features目录下,从本质上看,没多大区别,并且插件只能安装和禁用,不能卸载(当然,如果你对插件对应的目录和文件都很熟悉的话,可以通过直接删 除拷进去的文件来达到卸载插件的目的),但方法一和方法二在安装插件的时候很容易出错或者是产生冲突,特别是当你用了Myeclipse插件、中文包的同 时,又想安装HibernateSynchronizer、 Jode Compiler(Class反编译工具)、Visual Editor等插件时,及有可能导致Myeclipse插件和中文包失效。

    所以,如果插件已经下载到了本地,请直接拷贝至$Eclipse_Home$/对应的plugins和features目录下,也就是用方法三,这样能避免冲突。

方法四是将所有的插件用一个外部目录存放起来,假如是D:\plug-in,将上面所示的插件目录文件全部拷贝到该目录下,比如Tomcat插件, 此时的文件路径就是D:\plug-in\tomcat_plug\eclipse\plugins\ com.sysdeo.eclipse.tomcat_3.1.0.beta(请注意,方法四一定要严格这样的目录路径放置文件)。然后在$ Eclipse_Home$下新建一个links目录,并在links目录下建立关联文件,假如是tomcat.link,在建立的关联文件中加入如下语 句:
path=D:\\plug-in\\tomcat_plug
也可以写成下面的形式
path=D:/plug-in/tomcat_plug
还可以写成相对路径的形式

posted @ 2010-03-18 10:16 小菜毛毛 阅读(252) | 评论 (0)编辑 收藏

用SAX解析xml文件的例子
2008-07-15 09:46
1. Xml技术简介
Xml文件有两种约束类型,包括文档类型定义(DTD)和Xml 模式(Schema)。Xml DTD被包含在xml1的标准里。Xml 模式被包含在W3C的标准中。在xml 数据和xml 模式两者之间有很多的区别。
A. xml模式支持的数据类型比xml DTD多;
B. xml模式在无序的情况下使用起来比xml DTD更方便;
C. xml模式支持名字空间,可以在不同的文件中定义相同的方法等。
D. xml模式形成的文档可以被多种标准解析,如dom,sax或者jdom等,而xml DTD方式下确不行。
2. Xml文件解析
在java语言环境里可以使用三种方法解析xml文件:dom(document object model),sax(simple api for xml)和jdom(java document object model)。
SAX提供了基于事件的方式进行解析,适合于快速,数据量小的解析情况。SAX解析有几个缺陷:A.它的解析是连续的;B.数据无法回朔。
DOM解析不同于SAX。它提供了内存中完整的xml数据映像,数据被存储在树状结构中。DOM解析方式更容易获得和处理数据。
JDOM是java语言中特有的,主要用来支持xpath标准。
3. SAX解析方式
上面我简要介绍了几种解析xml文件的技术,这里我们使用SAX技术给出一个小例子,大家可以从这个例子中发现如果你能够掌握一些开源软件包,你就可以很 快掌握解析xml数据的技术。
3.1制作一个简单的xml文件component.xml
<?xml version="1.0"?>
<XmlComponents>
<XmlComponent>
<ComNo>1</ComNo>
</XmlComponent>
</XmlComponents>

3.2下载xerces.jar软件包
在Apache网站上×××下载xerces.jar软件包,这个包中包含了上面我们列举的几种解析xml数据的API。然后将这个软件包加入到程序的 classpath中。
3.3制作解析类MySaxParser.java
import java.io.IOException;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class MySaxParser extends DefaultHandler {
private static int INDENT = 2;

// 运行主方法
public static void main(String[] argv) {
// if (argv.length != 1) {
// System.out.println("Usage: java ds.MySaxParser [URI]");
// System.exit(0);
// }
System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
// String uri = argv[0];
String uri = "Components.xml";
try {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setValidating(false);
parserFactory.setNamespaceAware(false);
MySaxParser MySaxParserInstance = new MySaxParser();
SAXParser parser = parserFactory.newSAXParser();
parser.parse(uri, MySaxParserInstance);
}
catch(IOException ex) {
ex.printStackTrace();
}
catch(SAXException ex) {
ex.printStackTrace();
}
catch(ParserConfigurationException ex) {
ex.printStackTrace();
}
catch(FactoryConfigurationError ex) {
ex.printStackTrace();
}

}

private int idx = 0; //indent
// 处理各种分隔符号
public void characters(char[] ch, int start, int length) throws SAXException {
//instantiates s, indents output, prints character values in element
String s = new String(ch, start, length);
if (!s.startsWith("\n")) //空的value不打印
System.out.println(getIndent()+ " Value: " + s);
}

// 处理文档尾
public void endDocument() throws SAXException {
idx -= INDENT;
System.out.println(getIndent() + "end document");

System.out.println("...PARSING ends");
}

// 处理标记尾
public void endElement(String uri, String localName, String qName) throws SAXException {
idx -= INDENT;
}

// 处理文档的起始点
public void startDocument() throws SAXException {
idx += INDENT;
System.out.println("PARSING begins...");
System.out.println(getIndent() + "start document: ");
}

// 处理标记头
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
idx += INDENT;
System.out.println('\n' + getIndent() + "start element: " + qName);

}

private String getIndent() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < idx; i++)
sb.append(" ");
return sb.toString();
}

}


总结,虽然解析xml数据很复杂,因为涉及了很多的递归算法,但是我们可以使用业界比较成熟的解析API来进行xml数据处理。我现在只是给出了一个非常 简单的例子,但是在真实系统中远比这个要复杂的多,大家以后在使用的使用会发现还是有很多的工作要做的。
posted @ 2010-03-17 17:37 小菜毛毛 阅读(3767) | 评论 (2)编辑 收藏

一、        前言

用 Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。

JAXP接口包含了三个包:

(1)       org.w3c.dom  W3C推荐的用于XML标准规划文档对象模型的接口。

(2)       org.xml.sax   用于对XML进行语法分析的事件驱动的XML简单API(SAX)

(3)       javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。

二、        前提

DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。

三、        使用SAX解析XML文档

SAX是基于事件的简单API,同样的我们也是用一个最简单的例子来看看SAX是如何解析XML的

先来看看我们要解析的XML代码吧

<?xml version="1.0" encoding="gb2312"?>

<books>

  <book email="zhoujunhui">

             <name addr="address">rjzjh</name>

             <price>jjjjjj</price>

  </book>

</books>

简单的不能再简单了。但是该有的都有了,根元素、属性、子节点。好了,能反应问题就行了,下面来看看解析这个XML文件的Java代码吧!

1 public class SaxParse {

2     public SaxParse(){

3            SAXParserFactory saxfac=SAXParserFactory.newInstance();

4            try {

5                   SAXParser saxparser=saxfac.newSAXParser();

6                   InputStream is=new FileInputStream("bin/library.xml");

7                   saxparser.parse(is,new MySAXHandler());

8            } catch (ParserConfigurationException e) {

9                   e.printStackTrace();

10           } catch (SAXException e) {

11                  e.printStackTrace();

12           } catch (FileNotFoundException e) {

13                  e.printStackTrace();

14           } catch (IOException e) {

15                  e.printStackTrace();

16           }

17    }

18    public static void main(String[] args) {

19           new SaxParse();

20    }

21  }

这段代码比较短,因为SAX是事件驱动的,它的大部分实现在在另一个Java文件中,先别管另一个文件,我们来一个个地分析吧!

(1)得到SAX解析器的工厂实例

3            SAXParserFactory saxfac=SAXParserFactory.newInstance();

这是一个javax.xml.parsers.SAXParserFactory类的实例

(2)从SAX工厂实例中获得SAX解析器

5            SAXParser saxparser=saxfac.newSAXParser();

使用javax.xml.parsers.SAXParserFactory工厂的newSAXParser()方法

(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它

6                   InputStream is=new FileInputStream("bin/library.xml");

InputStream是一个接口。

(4)解析XML文档

7                   saxparser.parse(is,new MySAXHandler());

后面就不用看了,都是些没用的代码(相对而言),够简单的吧!

注意了,我们新建了一个实例new MySAXHandler()这个实例里面又有什么东西呢?

这个实例就是SAX的精华所在。我们使用SAX解析器时,必须实现内容处理器ContentHandler接口中的一些回调方法,然而我们不须要全部地实现这些方法,还好,我们有org.xml.sax.helpers.DefaultHandler类,看它的类申明:

public class DefaultHandler

implements EntityResolver, DTDHandler, ContentHandler, ErrorHandler

实现了这么多接口啊,其它的先不管了,至少它实现了ContentHandler这一接口。

好了,看看这个类有些什么吧?下面是它的Java代码!

public class MySAXHandler extends DefaultHandler {

       boolean hasAttribute=false;

       Attributes attributes=null;

       /* (非 Javadoc)

        * @see org.xml.sax.helpers.DefaultHandler#startDocument()

        */

       public void startDocument() throws SAXException {

               System.out.println("文档开始打印了");

       }

       /* (非 Javadoc)

        * @see org.xml.sax.helpers.DefaultHandler#endDocument()

        */

       public void endDocument() throws SAXException {

              System.out.println("文档打印结束了");

       }

       /* (非 Javadoc)

        * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)

        */

       public void startElement(String uri, String localName, String qName,

                     Attributes attributes) throws SAXException {

              if(qName.equals("books")){

                     return;

              }

              if(qName.equals("book")){

                     System.out.println(attributes.getQName(0)+attributes.getValue(0));

              }

              if(attributes.getLength()>0){

                     this.attributes=attributes;

                     this.hasAttribute=true;

              }

       }

       /* (非 Javadoc)

        * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)

        */

       public void endElement(String uri, String localName, String qName)

                     throws SAXException {

              if(hasAttribute&&(attributes!=null)){

                     for(int i=0;i<attributes.getLength();i++){

                            System.out.println(attributes.getQName(0)+attributes.getValue(0));

                     }

              }

       }

       /* (非 Javadoc)

        * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)

        */

       public void characters(char[] ch, int start, int length)

                     throws SAXException {

              System.out.println(new String(ch,start,length));

       }

 

 

}

不要看它一大堆,我一一分解给大家看。我们说SAX是基于事件的API,我们这个类实到了ContentHandler接口中的如下方法:

(1)startDocument()  用于处理文档解析开始事件

     public void startDocument() throws SAXException {

               System.out.println("文档开始打印了");

        }

(2)endDocument()  用于处理文档解析结束事件

      public void endDocument() throws SAXException {

              System.out.println("文档打印结束了");

        }

(3)startElement  用于处理元素开始事件

     public void startElement(String uri, String localName, String qName,

                     Attributes attributes) throws SAXException {

              if(qName.equals("books")){

                     return;

              }

              if(qName.equals("book")){

                     System.out.println(attributes.getQName(0)+attributes.getValue(0));

              }

              if(attributes.getLength()>0){

                     this.attributes=attributes;

                     this.hasAttribute=true;

              }

       }

第二个参数String qName表示这个元素的名字,如:

根节点 <books></books> 它的qName为“books”

最底层节点 <price>jjjjjj</price> 它的qName为“price”

知道这一点上面程序就好解释了,当遇到根元素“books”时就什么也不做跳过,当遇到“book”元素时就打出它的属性(它只有一个属性<book email="zhoujunhui"></book>)。

当是其它节点时(这下只剩下最底层的两个节点“name”和“price”了),就把它的属性取出来存到this.attributes域中,以后中元素结束事件好处理。

(4)endElement 用于处理元素结束事件

     public void endElement(String uri, String localName, String qName)

                     throws SAXException {

              if(hasAttribute&&(attributes!=null)){

                     for(int i=0;i<attributes.getLength();i++){

                            System.out.println(attributes.getQName(0)+attributes.getValue(0));

                     }

              }

       }

代码的作用是如果这个元素的属性不为空(hasAttribute&&(attributes!=null)),就把它们打印出来。

(5)characters(char[] ch, int start, int length) 处理元素字符的内容

              public void characters(char[] ch, int start, int length)

                     throws SAXException {

              System.out.println(new String(ch,start,length));

       }

我们只用了这么几个事件,其它还有其的的一些事件,我们只要看一下ContentHandler这个接口就行了,如:

(6)startPrefixMapping(String prefix,String URI) 处理前缀映射开始事件,参数表示前缀名称和所指向的URI

(7)endPrefixMapping(String prefix,String URI) 处理前缀映射结束事件,参数表示前缀名称和所指向的URI

(8)ignorableWhitespace(Char[] ch,int start,int length) 处理元素中可忽略的空格

(9)processingInstruction(String target,String data) 处理解析中产生的处理指令事件。

posted @ 2010-03-17 16:20 小菜毛毛 阅读(2463) | 评论 (0)编辑 收藏

当你需要处理XML文档时,你的首要选择是使用DOM(文档对象模型)还是使用SAX(用于XML的简单API),即当前使用的两个主要的XML API。你可以使用任何一种(或者在同一时间使用两种)来处理XML文档,然而DOM将文档载入到内存中处理,而SAX则相反,它可以检测一个即将到来的 XML流,由此并不需要所有的XML代码同时载入到内存中。
选择DOM与SAX,与在一个数据库中的表单与视图之前选择一样:选择适合于当前实际情况的方法。如果你只是想简单地查看XML文档而不处理它,那么请选择使用SAX。


SAX与DOM之间有一些显著区别,包括:
         DOM是复杂对象处理的首选,比如当XML比较复杂的时候,或者当你需要随机处理文档中数据的时候。SAX从文档的开始通过每一节点移动,以定位一个特定的节点。
DOM 为载入到内存的文档节点建立类型描述。最终,这些描述呈现了可容易横向移动、潜在巨大、树型结构。如果XML很冗长,DOM就会显示出无法控制的胀大。例 如,一个300KB的XML文档可以导致RAM或者虚拟内存中的3,000,000KB的DOM树型结构。通过比较就会发现,一个SAX文档根本就没有被 解构,它也没有隐藏在内存空间中(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。SAX就是一种“更轻巧的”技术──它可以给你的系统带来更 轻的负担。SAX相当于观看一场马拉松比赛,而DOM就好比邀请所有的比赛选手到家里参加晚餐。
所以,你如何选择SAX和DOM?如果你处理复杂的东西,比如高级XSLT转换,或者Xpath过滤,请选择使用DOM。如果你建立或者更改XML文档,你也可以选择DOM。
相反,你可以使用SAX来查询或者阅读XML文档。SAX可以快速扫描一个大型的XML文档,当它找到查询标准时就会立即停止,然后再处理之。
在某些情况下,在一个方案中,最佳的选择是使用DOM和SAX处理不同的部分。例如,你可以使用DOM将XML载入到内存并改变它,然后通过从DOM树中发送一个SAX流而转移最后的结果。


SAX概念

   SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是“民间”的事实标准。实际上,它是一种社区性质的讨论产物。虽然如此,在XML中对SAX的应用丝毫不比DOM少,几乎所有的XML解析器都会支持它。

与DOM比较而言,SAX是一种轻量型的方法。我们知道,在处理DOM的时候,我们需要读入整个的XML文档,然后在内存中创建DOM树,生成 DOM树上的每个Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档大起来,处理DOM就会变得相当费时费力。特别是其对于内存的需 求,也将是成倍的增长,以至于在某些应用中使用DOM是一件很不划算的事(比如在applet中)。这时候,一个较好的替代解决方法就是SAX。

   SAX在概念上与DOM完全不同。首先,不同于DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就 是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。(如果你对Java新的代理事件模型比较清楚的话,就会很 容易理解这种机制了)

   在XMLReader接受XML文档,在读入XML文档的过程中就进行解析,也就是说读入文档的过程和解析的过程是同时进行的,这和DOM区 别很大。解析开始之前,需要向XMLReader注册一个ContentHandler,也就是相当于一个事件监听器,在ContentHandler中 定义了很多方法,比如startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事情。当XMLReader读到合适的内容,就 会抛出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应

posted @ 2010-03-17 15:42 小菜毛毛 阅读(299) | 评论 (0)编辑 收藏

本文引自:http://blog.csdn.net/allenzue/archive/2008/12/18/3549959.aspx

另有:http://wiki.ubuntu.org.cn/JBoss_5.0.0GA安装指南

一.下载与安装JBoss

在本文中,我下载的JBoss版本为:JBOSS5.0 Beta4。

下载地址: http://www.jboss.org/jbossas/downloads/

在如上的下载页中下载JBOSS5.0 Beta4.zip文件。

下载完成后,将其解压缩后即可完成安装,解压 缩后将其放置到一个不带空格的目录(若目录带有空格,例如:C:"Program Files,日后可能会产生一些莫名的错误),eg:E:"JBossJBOSS5.0 Beta4。同时在“环境变量设置”中设置名为JBOSS_HOME的环境变量,值为JBoss的安装路径,如下图所示:

在此,JBoss的安装工作已经结束,可通过如下方式测试安装是否成功:

运行JBoss安装目 录"bin"run.bat,如果窗口中没有出现异常,且出现:10:16:19,765 INFO [Server] JBoss (MX MicroKernel) [5.0.Beta4 (build: SVNTag=5.0.Beta4 date=20080831605)] Started in 30s:828ms字样,则表示安装成功。

我们可以通过访问: http://localhost:8080/ 进入JBoss的欢迎界面,点击JBoss Management下的JMX Console可进入JBoss的控制台。

若启动失败,可能由以下原因引起:

1)              JBoss所用的端口(8080,1099,1098,8083等)被占用。一般情况下为8080端口被占用(例如,Oracle占用了8080端口), 此时需要修改JBoss的端口,方法为进入JBoss安装目录"server"default"deployer"jboss-web.deployer 目录,修改其下的server.xml目录,在此文件中搜索8080,将其改成你想要的端口即可(例如8088);

2)              JDK安装不正确;

3)              JBoss下载不完全。

二.             JBoss 的目录结构说明

目录

描述

bin

启动和关闭 JBoss 的脚本( run.bat 为 windows 系统下的启动脚本, shutdown.bat 为 windows 系统下的关闭脚本)。

client

客户端与 JBoss 通信所需的 Java 库( JARs )。

docs

配置的样本文件(数据库配置等)。

docs/dtd

在 JBoss 中使用的各种 XML 文件的 DTD 。

lib

一些 JAR , JBoss 启动时加载,且被所有 JBoss 配置共享。(不要把你的库放在这里)

server

各种 JBoss 配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。 JBoss 包含 3 个默认的配置: minimial , default 和 all ,在你安装时可以进行选择。

server/all

JBoss 的完全配置,启动所有服务,包括集群和 IIOP 。

server/default

JBoss 的默认配置。在没有在 JBoss 命令行中指定配置名称时使用。 ( 我们下载的 JBOSS5.0 Beta4 版本默认采用此配置 ) 。

server/default/conf

JBoss 的配置文件。

server/default/data

JBoss 的数据库文件。比如,嵌入的数据库,或者 JBossMQ

server/default /deploy

JBoss 的热部署目录。放到这里的任何文件或目录会被 JBoss 自动部署。 EJB 、 WAR 、 EAR ,甚至服务。

server/default /lib

一些 JAR , JBoss 在启动特定配置时加载他们。 (default 和 minimial 配置也包含这个和下面两个目录。 )

server/default/log

JBoss 的日志文件。

server/default/tmp

JBoss 的临时文件。

三.             JBoss 的配置

1.       日志文件设置

若需要修改JBoss默认的log4j设置, 可修改JBoss安装目录"server"default"conf下的jboss-log4j.xml文件,在该文件中可以看到,log4j的日志输出 在JBoss安装目录"server"default"log下的server.log文件中。对于log4j的设置,读者可以在网上搜索更加详细的信 息。

2.       web 服务的端口号的修改

这点在前文中有所提及,即修改JBoss安装目录"server"default"deployer"jboss-web.deployer下的server.xml文件,内容如下:

<Connector port="8080" address="${jboss.bind.address}"   

         maxThreads="250" maxHttpHeaderSize="8192"

         emptySessionPath="true" protocol="HTTP/1.1"

         enableLookups="false" redirectPort="8443" acceptCount="100"

         connectionTimeout="20000" disableUploadTimeout="true" />

将上面的8080端口修改为你想要的端口即可。重新启动JBoss后访问:http://localhost/:新设置的端口,可看到JBoss的欢迎界面。

3.       JBoss 的安全设置

1) jmx-console 登录的用户名和密码设置

默认情况访问 http://localhost:8080/jmx-console 就可以浏览jboss的部署管理的一些信息,不需要输入用户名和密码,使用起来有点安全隐患。下面我们针对此问题对jboss进行配置,使得访问jmx-console也必须要知道用户名和密码才可进去访问。步骤如下:

i) 找到JBoss安装目录/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml文件,去掉<security-domain>java:/jaas/jmx-console</security-domain>的注释。修改后的该文件内容为:

<jboss-web>

   
<!-- Uncomment the security-domain to enable security. You will

       need to edit the htmladaptor login configuration to setup the

       login modules used to authentication users.
-->


      
<security-domain>java:/jaas/jmx-console</security-domain>

</jboss-web>

ii)修改与i)中的jboss-web.xml同级目录下的web.xml文件,查找到<security-constraint/>节点,去掉它的注释,修改后该部分内容为:

<!-- A security constraint that restricts access to the HTML JMX console

    to users with the role JBossAdmin. Edit the roles to what you want and

    uncomment the WEB-INF/jboss-web.xml/security-domain element to enable

    secured access to the HTML JMX console.
-->


   
<security-constraint>

     
<web-resource-collection>

       
<web-resource-name>HtmlAdaptor</web-resource-name>

       
<description>An example security config that only allows users with the

          role JBossAdmin to access the HTML JMX console web application

       
</description>


       
<url-pattern>/*</url-pattern>

       
<http-method>GET</http-method>

       
<http-method>POST</http-method>

     
</web-resource-collection>

     
<auth-constraint>

       
<role-name>JBossAdmin</role-name>

     
</auth-constraint>

   
</security-constraint>

   在此处可以看出,为登录配置了角色JBossAdmin

iii 在第一步中的jmx-console安全域和第二步中的运行角色JBossAdmin都是在login-config.xml中配置,我们在JBoss安装目录/server/default/config下找到它。查找名字为:jmx-consoleapplication-policy

<application-policy name = "jmx-console">
       
<authentication>
          
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
              flag
= "required">
           
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
           
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
          
</login-module>
       
</authentication>
    
</application-policy>

在此处可以看出,登录的角色、用户等的信息分别在props目录下的jmx-console-roles.propertiesjmx-console-users.properties文件中设置,分别打开这两个文件。

其中jmx-console-users.properties文件的内容如下:

# A sample users.properties file for use with the UsersRolesLoginModule

admin=admin

该文件定义的格式为:用户名=密码,在该文件中,默认定义了一个用户名为admin,密码也为admin的用户,读者可将其改成所需的用户名和密码。

jmx-console-roles.properties的内容如下:

# A sample roles.properties file for use with the UsersRolesLoginModule

admin=JBossAdmin, HttpInvoker

该文件定义的格式为:用户名=角色,多个角色以“,”隔开,该文件默认为admin用户定义了JBossAdminHttpInvoker这两个角色。

配置完成后读者可以通过访问: http://localhost:8088/jmx-console/ ,输入jmx-console-roles.properties文件中定义的用户名和密码,访问jmx-console的页面。

四.             MyEclipse 中配置JBoss

笔者的MyEclipse版本:6.5 GA

JBoss版本:5.0
JDK版本:1.6

进入Window-> Preferences-> MyEclipse -> Application Servers -> JBoss5,进行如下设置:
    

选择JBoss 5下的JDK设置所用的JDK.

好了,开始JBoss之旅吧.

posted @ 2010-03-17 15:17 小菜毛毛 阅读(443) | 评论 (0)编辑 收藏

仅列出标题
共17页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last