java提供文件下载的方法

java提供文件下载的方法



    String root  =  getServletContext().getRealPath( " / " );
    String path 
=  request.getParameter( " path " );
    String name 
=  request.getParameter( " name " );


    response.setContentType(
" unknown " );
    response.addHeader(
" Content-Disposition " " filename=/ ""  + name +  " / "" );


    
try
    
{
        java.io.OutputStream    os  
= response.getOutputStream();
        java.io.FileInputStream fis 
= new java.io.FileInputStream(root + path + name);


        
byte[] b = new byte[1024];
        
int    i = 0;


        
while ( (i = fis.read(b)) > 0 ) 
        
{
            os.write(b, 
0, i);
        }



        fis.close();
        os.flush();
        os.close();
    }

    
catch  ( Exception e )
    
{
    }

posted @ 2006-02-16 12:21 kelven 阅读(575) | 评论 (0)编辑 收藏

诺基亚的一些查询指令

诺基亚手机限制码-1234
  保密码 -12345
  *#06#:看手机序列号。  
  *#2820# :看兰牙版本信息,需要先将蓝牙设置为打开状态。
  *#92702689# :这个也是大家常用的一条命令,用来查看系统信息。
  *#335738#:删除Email, GPRS, MMS的设置信息
  *#7370925538#:删除电子钱包的内容和 密码 ,这个比较实用,要是忘记了,你既可以用这个命令,也可以 恢复出厂 设置,不过这个更实用。
  *#7370#:软件格式化。删除存储空间的内容。
  *#7780#:一个 恢复出厂 设置的快捷操作。
  *#7220#:恢复一些功能
    *#92702689#LIFE:查系统版本
    *#0000#:查系统版本

以上是一些NOKIA机型的查询指令,不一定适合所有的NOKIA机型,但是基本上都可以使用。

posted @ 2006-02-09 12:35 kelven 阅读(146) | 评论 (0)编辑 收藏

SqlServer2000 pack3补丁

下载地址: http://download.17hk.com/soft.asp?softid=44    (21.6M)
                    http://www.it1848.com/Soft/cyrjxz/yyrjxz/200510/Soft_20051014114011.html  (46.4M)

(WindowsXP SP2系统上SQLServer2000必须要安装SP3之后的补丁才能正常使用)

由于SQL Server Service Packs按照累积形式进行组织,因此,SP3包含了先期发布的 Service Pack 1(SP1)与 Service Pack 2(SP2)中的所有修正程序,它既可应用于全新安装的系统,也可在已经安装SP1或SP2的系统上加以应用。

  优势
  除提供最新更新内容与修正程序外,SQL Server 2000 SP3还能够为您提供以下优势:

  可维护性
  在可维护性方面的改进包括:
得以增强的错误报告功能。通过适当配置,SQL Server能够将关键性错误信息自动发送至Microsoft公司。
  得以改进的多服务器管理功能。
  用于实现监控的新增API。数据库管理员(DBA)或第三方工具可以对出现问题的进程加以诊断
  性能
  SP3引入了针对QLogic’s VI-enabled SANblade QLA2350 Fibre Channel控制器的支持能力。通过在SQL Server网络互连层上应用虚拟接口(Virtual Interface)技术,在服务器和客户端系统上针对每条消息所消耗的CPU资源得以显著降低,同时,系统整体性能得到了相应提高。
  安全性
  最新提供的安全特性与工具包括:
  针对SQL Server 2000在线图书的内容更新。SQL Server 2000在线图书为广大客户提供了用以进一步增强应用环境安全性所需的更多指导信息。
  安全修补程序。SP3针对用户反映或在持续测试过程中发现的各种已知薄弱环节提供了相应的修复程序。
  SQL Server Agent增强。SP3允许您在不具备管理员权限的情况下运行SQL Server Agent。

posted @ 2006-01-17 01:37 kelven 阅读(1918) | 评论 (1)编辑 收藏

MySQL 4.1x 中文乱码问题

    现在多数host装的还是MySQL 4.0x 版本以下,如果升级到了4.1x 或者移动到使用4.1x 的主机上,估计会遇到一些问题。我在这上面遇到了两个问题。
    一是数据导入。在phpMyAdmin内导入后,发现中文变成了乱码。搜索学习后,了解到需要设置数据库的collation (校勘),如果你的数据库是utf-8的,设置为utf8_general_ci就可以了。
    二是,即使正确导入了,在phpMyAdmin里也能正确显示,但页面上显示的文章内容都是“???”,而模板里面的汉字都能正常显示。这让我头疼了很久。搜索到Windix’s Weblog上有对此的说明:
    “从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章‘Character Set Support’后终于找到了解决方法并测试通过。MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES ‘utf8′;”
    但是我依旧不知道,如何,在何处让WordPress运行这个SQL语句。后来在阿修的部落格上查到办法:
  “為著解決這個問題必須去修改wp-includes/wp-db.php內的資料連線設定。詳細的修改方式是這樣的:
$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//加上下面這行
$this->query(”SET NAMES ‘utf8′”);”
这样子终于能正常显示中文的WordPress了。虽然后来还是没用,但是觉得这个经验会对别人有用。记得有人用email和我讨论过这样子的中文显示问题,但是我那时哪里知道问题出在MySQL 4.1x上。
还有,4.1x的数据库不向下兼容,所以升级的时候要三思啊。

posted @ 2006-01-01 08:02 kelven 阅读(97) | 评论 (0)编辑 收藏

Struts应用中出现中文乱码问题及解决方法-1

(此为个人学习心得,以后会逐渐完善)

(本例使用的数据库是:MySql)

1.当你用流读取文件或者从数据库读取数据时,取得的字符串的编码要与页面的一致,否则会乱码

例如:

public   class  FileOperation  {

    
//path为文件的全路径
    public static String readFile(String path){
        String templateContent
="";
        
try{
            BufferedReader br
=new BufferedReader(new FileReader(path));
            String temp
=null;
            
while((temp=br.readLine())!=null){
                templateContent
=templateContent+temp+"/n";
            }

            br.close();
        }

        
catch(Exception e){
            System.out.println(
"读取文件出错");
            e.printStackTrace();
        }

        
        
return templateContent;
    }

}


(假设页面的编码为UTF-8)

调用以上函数只需要传递一个完整的文件路径就可以以字符串的形式读取文件.

......

String str
= FileOperation.readFile( " d:/11.txt " );

......

request.setAttribute("str",str);

......

则页面用requset.getAttribute("str")取得的中文字符将会是乱码.

解决方案:

将上段取中文字符串的代码改成:



String str
= new  String(FileOperation.readFile( " d:/11.txt " ).getBytes( " UTF-8 " ));



request.setAttribute(
" str " ,str);




posted @ 2005-12-28 16:16 kelven 阅读(70) | 评论 (0)编辑 收藏

Resin2.1.12的数据库连接池配置

Resin的确是比较狠的应用服务器,运行速度快,配置又简单!这里介绍一下Resin2.1.12的数据库连接池配置方法。

在%ResinHome%/conf/resin.conf中找到
<!--
- Sample database pool configuration
- The JDBC name is java:comp/env/jdbc/test
-->
在其下加入相应的信息可以连接到不同的数据库。

Mysql:
<resource-ref>
<res-ref-name>jdbc/blog</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.caucho.jdbc.mysql.Driver"/>
<init-param url="jdbc:mysql_caucho://localhost:3306/blog"/>
<init-param user="root"/>
<init-param password="****"/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>

将相应的驱动放到%Resin/lib/%下。

MS-Sql:
<resource-ref>
<res-ref-name>jdbc/blog</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<init-param url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=blog"/>
<init-param user="sa"/>
<init-param password="****"/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>
首先要下载安装sqlserver-jdbc-驱动,然后将其lib下的三个jar文件放到%Resin/lib/%下。

posted @ 2005-12-16 12:58 kelven 阅读(101) | 评论 (0)编辑 收藏

Struts学习笔记-1

Servlet的演变:在常规的 JSP,Servlet,JavaBean三层结构中,JSP实现View的功能,Servlet实现Controller的功能,JavaBean实现Model的实现。

在Struts中,将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml,专职完成页面导航,而不再负责具体的数据获取与相应逻辑,这两部分功能由FormBean和ActionBean来完成。

Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。

<struts-config>

   <data-sources />

   <form-beans >
      <form-bean name="systemForm" type="com.gdglc.survey.form.SystemForm" />
      <form-bean name="FindMemberForm" type="org.apache.struts.validator.DynaValidatorForm">
         <form-property name="findName" type="java.lang.String"/>
      </form-bean>
   </form-beans>

   <global-exceptions />

   <global-forwards>
      <forward name="showMsg" path="/msg.jsp" />
   </global-forwards>

   <action-mappings>

      <action 
         path="/list" 
         type="com.gdglc.survey.action.ListAction">
         <forward name="list" path="/list.jsp"/>
      </action>

      <action
         attribute="systemForm"
         input="/admin/System_Base_List.jsp"
         name="systemForm"
         path="/systemBaseModify"
         type="com.gdglc.survey.action.SystemAction"
         scope="request"
         validate="false">
      </action>

   </action-mappings>

   <message-resources parameter="com.gdglc.application" />
  
   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
      <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
   </plug-in>

</struts-config>

每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。


public final class RegUserForm extends ActionForm{

    private String logname;
   private String password;
   private String email;

   public RegUserForm(){
      logname = null;
      password = null;
      email = null;
   }

   ......

    public void reset(ActionMapping mapping, HttpServletRequest request)
   {
      logname = null;
      password = null;
      email = null;
   }

    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) 
   {
      ActionErrors errors=new ActionErrors();
      if(this.password==null)
         errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("password is null!!"));
      ......
      return errors;
    }
}

FormBean的产生是为了提供数据给ActionBean,在ActionBean中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应业务要求。

public final class RegUserAction extends Action
{
   public ActionForward execute(ActionMapping mapping,
                                                  ActionForm form, 
                                                  HttpServletRequest request,
                                                  HttpServletResponse response)

   {
      ......
      if(true)
          return mapping.findForwad("list");
      else {
         ActionErrors errors=new ActionErrors();
         errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("...."));
         this.saveErrors(request,errors);
          return new ActionForward(mapping.getInput());
      }
   }
}

Struts优缺点
优点:


Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。

除此之外, Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。

关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

缺点:

Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。

Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。

Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。

Struts实施经验:

1)、基于Struts架构的项目开发,首先需要有一个很好的整体规划,整个系统中包括哪几个模块,每个模块各需要多少FormBean和ActionBean等,而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理,尤其是对Struts-config.xml的管理。

2)、如果你的项目非常紧,并且项目组中又没有富有经验的Struts开发人员,建议不要冒然采用Struts。Struts的掌握需要一个过程,对于一个熟练的JSP程序员,自学大概需要半个月左右的时间。如果结合titls,则需要更长的时间。

3)、如果你在网页中大量运用taglib,那么你的美工将做出部分牺牲。当你结合Tiles,功能增强的同时,这种牺牲尤为明显。当然,你对功能和美观的取舍由你自己决定。

4)、Taglib是一个好东西,但灵活运用它却需要一个过程,如果你不想在Taglib上花太多的时间,那么只需理解与FORM有关的几个标记,其它的标记就放着吧,以后再看,先去研究ActionServlet和Struts-config.xml,你会觉得很有成就感。

5)、Struts是否只适合于大型项目呢?No!Struts适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。

http://www.chinaitlab.com/www/news/article_show.asp?id=33092

posted @ 2005-12-15 13:33 kelven 阅读(481) | 评论 (0)编辑 收藏

Resin使用

Resin使用简介

使用Resin开发Java Web项目时,需要建立自己的WebApp。这里不介绍Resin Cmp/Ejb的开发和使用,只介绍用Resin开发普通的jsp/java servlet项目。在这里还要谈到resin.conf的配置。Resin中的应用可以有2种方式发布:一是在Resin的目录下发布;二是打包成War发布。

1、在Resin的目录下发布

在resin.conf中查找<web-app>标签,该标签表示一个web应用。

标签中,id属性表示该应用的Web路径。如<web-app id=’/test’>,表示该应用在Web上访问的时候应该用http://hostname/test/来访问。app-dir属性表示该应用的实际路径。如<app-dir>d:/resin/doc/test</app-dir>表示该应用在d:/resin/doc/test目录下面。默认值为根下面的和id同名的目录。Resin可以配置3种error-page:404错误也就是文件找不到错误页;Exception违例页;不能连接java引擎页。他们分别可以这样子设置。

404文件找不到页

<web-app id='/app1'>

<error-page error-code='404' location='/file_not_found.jsp'/>

</web-app>

Exception 违例页

<web-app id='/foo'>

<error-page exception-type='java.lang.NullPointerException'

location='/nullpointer.jsp'/>

</web-app>

不能连接到srun Servlet引擎错误页

该页设置和应用无关,属于服务器的设置。

<http-server>

<error-page exception-type='connection'

location='/missing_file.html'/>

</http-server>

classpath的设置

参见下面的语句:

<classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>

id参数的值表示classpath中编译后的classpath的存放路径;source参数的值表示classpath中java源代码的存放路径;compile中的值可能是true或者false,表示是否由Resin的srun自动编译java源代码。Classpath的设置一般和javaBean或者Servlet的使用有关。id的值表示javaBean的编译好的包存放的根,source的值表示javaBean的java源代码存放的根。Servlet相同。

Servlet的设置

参见下面的语句:

<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>

<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>

<servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>

一般就是指定那些需要通过srun的解析。比如在这里,把*.jsp改成*.jss,其他不变,那么只要在访问时遇到*.jss的文件就和原来遇到*.jsp一样处理。通过这个可以指定解析的引擎,如以下的配置:

<servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>

在Servlet中,也可以指定servlet。如

<servlet servlet-name='hello' servlet-class='test.HelloWorld'/>

<servlet-mapping url-pattern='/hello.html' servlet-name='hello'/>

在servlet-mapping中有个重要的参数case-sensitive 如果在windows上,最好配置成false,忽略大小写,从而和windows的约定一致。

Session的配置

参见如下的配置语句:

<session-config>

<session-max>4096</session-max>

<session-timeout>30</session-timeout>

<enable-cookies>true</enable-cookies>

<enable-url-rewriting>true</enable-url-rewriting>

<file-store>WEB-INF/sessions</file-store>

</session-config>

session-max :最大 session数量

session-timeout :session过期时间,以分钟为单位。

是否允许cookie :指session是否采用cookies。如果采用cookies,浏览器必须支持session才能使用,发布时建议改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,enable-url-rewriting应该设成true比较合适。

file-store :该配置指示服务器是否把session作为文件存放在服务器上。如果把该项注释掉,则在你的web-app目录下的WEB-Inf/sessions目录不保存序列化后的session对象。Session还有jdbc-store配置,对应着把session通过jdbc永久保存在数据库中。其实也就是会话变量的序列化后的保存和重新载入的物理实现。在这里session还支持了多服务器的设置问题,

通过tcp-store参数设置。由于涉及到负载平衡的问题,在这里不详细叙述,只简单写一个例子:

<http-server>

<http id='a' port='80'/>

<srun id='a' host='host-a' port='6802'/>

<http id='b' port='80'/>

<srun id='b' host='host-b' port='6802'/>

<host id=''>

<web-app id=''>

<session-config>

<tcp-store/>

<always-load-session/>

</session-config>

</web-app>

</host>

</http-server>

这个例子表示session是按照tcp ring的方式传递。

temp-dir 的设置

temp-dir指的是应用的临时目录。也就是在javax.servlet.context.tempdir中用到的目录。模认是应用目录下的WEB-INF/tmp目录。

以上的设置都可以在<web-app>标签对中设置,控制某个web应用的设置。

2、打包成War发布

以下是介绍对如何在resin下使用已经打包成War的java Web应用进行发布。

其实这个是最简单也是最清晰的良好方法。在j2ee中,所有的项目都打包成ear发布。其中,Web应用打包成war,ejb应用打包成jar。在resin中,这些都可以直接部署。这里我只对打包成war的Web应用的部署做介绍。

在resin.conf中,查找这个:<war-dir id='webapps'/>。他表示war文件应该被拷贝的路径。这里指的是相对于resin的安装路径,如以上的设置表示d:/resin/webapps。只要重新启动Resin就可以了。Resin会把该war自动解包到webapps目录下。你可以在command控制台或者stdout.log中看到类似于

[2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的语句。这个表示该Web应用是自动安装的。只要这个应用是符合j2ee标准的Web应用,应该不会有问题。通过如上显示的路径就可以访问到这个应用。如果你到d:/resin/webapps/rwtest中浏览,你会看到Resin已经为你生成了rwtest目录,下面是META-INF和WEB-INF还有你自己的JSP/servlet 文件和目录。是完全符合j2ee的结构的。你可以在rwtest目录下建立新的jsp/servlet,一样可以被编译和解析并运行的。在实际操作中,可以使用Jbuilder 或者 WebSphere等Ide工具进行集成调试和打包,非常的方便。

使用Resin进行java Web项目的开发和调试

这里篇幅有限,不可能讲太多,我只对实际中最有用的部分做介绍。

Resin中如果定义了错误页,则出错后最常见的一大串Exception不会被看到,直接跳转到错误页。所以建议开发中先不设置错误页。jsp错误中最常见的就是Nullpoint Exception,其次是名称的拼写错误。错误也可以在Resin安装目录下的log目录下的stderr.log中找到。通过对该log文件的分析可以看到很多有用的错误信息。

在调试jsp的时候,如果定义了compile为true,jsp先被翻译成Servlet的java文件,再被编译成class文件。可以在你自己的work目录中找到该文件。java的名称在Resin中是这样子定义的:原先的jsp文件名前加下划线,再加上_jsp这个字样。所以在java 应用中的命名不要以_jsp结尾,也不要出现中文名称等字符;其实名称以_jsp为开头也是不合法的。

关于java对多国语言的支持问题,在Resin中得到了很好的解决。以jsp为例,参考Resin自动生成的java Servlet文件。只要在任何的jsp文件的最开始处增加:

<%@page contentType="text/html;charset=gb2312" %>

中文问题就解决了。察看生成的Servlet源文件片断:

response.setContentType("text/html;charset=gb2312");

request.setCharacterEncoding("GB2312");

以上为设置字符集

private static byte []_jsp_string26;

private static byte []_jsp_string27;

_jsp_string26 = "/r/n</table>/r/n<table class=/"type/">/r/n<tr>/r/n <td>".getBytes("GB2312");

_jsp_string27 = "/r/n</td><td>/r/n</tr>/r/n<!--/r/n<tr>/r/n<td>/r/".getBytes("GB2312");

以上是对页面的显示的编码。其中,getBytes(“gb2312”)是静态编码,这是Resin为了解决某些环境下还是不能正常显示而设置的。在Resin的配置文件(/conf/resin.conf)中,可以通过设置<jsp precompile='true' static-encoding='false' recompile-on-error='true'/>中的static-encoding属性为true或者false,来控制是否静态编码。其实在Resin容器的内部,所有的字符都是按照iso-8859-1来处理的。iso-8859-1是一个大字符集,虽然中文的gb2312和8859在字的定义上有不同,但是编码是包容了gb2312的。按照解决多国语言的方法,在纯英文平台上用iso-8859-1处理内部编码,而把字符的显示推向客户端的机器。所以这样只要编码是正确的,

在页面上显示中文就不存在问题。Tomcat3.2不方便的地方是Tomcat对数据库的操作中文支持不好,需要手动在java Bean或者Servlet中硬编码。通过测试,在Resin中完全没有这个问题。Tomcat4.0解决了这个问题。不过个人习惯来讲还是觉得resin在配置方面方便一些。

在Resin中可以自动解决引入的jar。这个在使用特殊的类或者第三方提供的开发包非常有用。方法非常简单:只要把该jar或者是zip拷贝到Resin安装目录下的lib目录下面,重新启动Resin,就可以了。如db2用到的db2java.zip文件,只要轻松拷贝到d:/resin/lib中就可以了。

Resin提供了对Jbuilder的集成调试。可以到:

http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免费下载到resin的jbuilder的ide扩展包。然后,把该包该名成:resin-jbuilder.jar,拷贝到jbuilder6/lib/ext目录下。然后,把Resin2.1解包安装在jbuilder6/resin-2.1目录下,就可以了。打开任何的War项目,在project上点右键,选择properties,选择Servers标签。在原来的选择框上,就可以看到多了一项Resin2.1。这样子就可以象原来用tomcat一样调试jsp/servlet了,而且比Tomcat更方便。见图2:

图2

调试方法和用Tomcat调试一样。

其他问题

使用Resin可以和apache结合使用。也就是利用apache做http服务器,而Resin做srun服务器。可以参考resin/conf/samples目录下的apache.conf。主要就是把 app-dir 设成 /usr/local/apache/htdocs(也就是apache的root)。同时在apache 中的http.conf也做了相应的设置。Resin还提供了对该过程的自动安装程式,运行resin/bin/setup,你可以在弹处的对话框中选择apache,这样子就可以了。只要你曾经安装过apache,resin可以自己找到httpd.conf文件所在的路径。

使用命令行方式启动Resin,如果改动了Resin.conf,Resin会自己重新启动适应新的配置。这个很适合初期安装时使用。

Resin对数据库缓冲池的支持很好。在这里,它提供了DBPool对缓冲池做了封装。实际使用时,只要在resin.conf这样配置:

<dbpool.sql>

<id>ORCL</id>

<driver>oracle.jdbc.driver.OracleDriver</driver>

<url>jdbc:oracle:thin:@localhost:1521:SMTH</url>

<!-- <url>jdbc:oracle:oci8:@SMTH</url> -->

<user>scott</user>

<password>tiger</password>

<max-connections>5</max-connections>

</dbpool.sql>

然后,在你的jsp或者servlet中就可以这样子使用了:

先导入 com.caucho.sql.*包,然后如下直接得到连接:

Connection conn = DBPool.getPool("ORCL").getConnection();

个人建议不要如上使用连接池,还是按照ejb的方法用从Context中直接找到的DataSource对象中得到连接通用性比较好。代码也很简单:

Context ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);

Connection conn = ds.getConnection();

在Resin中如下配置jdbc就可以了:

<resource-ref>

<res-ref-name> jdbc/EmployeeDB</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<init-param driver-name="com.caucho.jdbc.mysql.Driver"/>

<init-param url="jdbc:mysql_caucho://localhost:3306/test"/>

<init-param user="name"/>

<init-param password="password"/>

<init-param max-connections="20"/>

<init-param max-idle-time="30"/>

</resource-ref>

用Resin Web Server开发还是比较愉快的。只是没有像Weblogic 或者WebSphere那样子提供现成的管理控制台而已。但是从稳定性和方便性来讲,Resin个人认为比Tomcat要好很多。况且Resin还有提供了resin-cmp 和 resin-ejb,功能更强大。

posted @ 2005-12-15 13:22 kelven 阅读(571) | 评论 (0)编辑 收藏

正则表达式学习

目录

正则表达式介绍
匹配模式

字符子集
行结束符
分组和引用
Unicode支持


正则表达式语法参考
  1. 字符
  2. 逻辑操作符
  3. 向后引用
  4. 边界元字符
  5. 重复指示符
  6. 字符子集
  7. 预定义子集(元字符)
  8. 扩展子集(元字符)
  9. 扩展中文子集(元字符)
  10. POSIX字符子集(只适用于ASCII)
  11. Unicode块和分类

替换表达式
替换表达式
  1. 特殊字符
  2. 自定义替换表

匹配模式

匹配模式指得是正则表达式引擎将以何种模式匹配字符串。
模式名称
启用,禁用
缺省启用
说明
UNIX_LINES
(?d)启用,(?-d)禁用

启用Unix行模式。
在此模式下,只有 '/n'被认为是行结束符。它会影响., ^, 和 $ 的行为。

CASE_INSENSITIVE
(?i)启用,(?-i)禁用

启用忽略大小写模式。
缺省时,忽略大小写模式只会影响 ASCII字符的匹配。 而Unicode范围的忽略大小写匹配需要通过 UNICODE_CASE 标志与本标志联合使用。
启用此模式会影响匹配性能。

COMMENTS
(?x)启用,(?-x)禁用

允许空格和注释出现在正则表达式中。
在此模式下,空格被忽略,以#开始的单行注释被忽略。
MULTILINE
(?m)启用,(?-m)禁用

启用多行模式。
In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.

DOTALL
(?s)启用,(?-s)禁用

让.可以匹配行结束符。
在此模式下,元字符.可以匹配行结束符。缺省不允许如此匹配。


UNICODE_CASE
(?u)启用,(?-u)禁用

Enables Unicode-aware case folding.
When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 启用此模式会影响性能。

CANON_EQ
(?c)启用,(?-c)禁用

Enables canonical equivalence.
When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a/u030A", for example, will match the string "?" when this flag is specified. By default, matching does not take canonical equivalence into account.
启用此模式会影响性能。



字符子集

字符子集可以含有别的字符子集,并且可以通过联合操作符(缺省)和交集操作符(&&)实现组合。联合操作符表示某个子集匹配它的子子集所匹配的任意字符。交集操作符表明某个字符子集只匹配它的子子集都匹配的字符。
字符子集所能够有的操作符的优先级如下,从高到低:
  1. 转义符/x
  2. 成组符 [...]
  3. 区间符 a-z
  4. 联合符 [a-e][i-u]
  5. 交集符 [a-z&&[aeiou]]
注意:在字符子集[]内部的语法根本不同于正则表达式其它部分中的语法。例如,在字符子集内部,正则表达式 . 失去了它原有的含义,而是成了一个匹配.的元字符。

行结束符

行结束符是一个或两个字符序列,用以表明输入字符序列中一行的结束。下面的字符被认为是行结束符:
  • 一个换行符('/n')。
  • 一个回车符加上一个换行符("/r/n")。
  • 一个单独的回车符('/r')。
  • 代表下一行的字符('/u0085')。
  • 行分隔符('/u2028'),Unicode中被定义。
  • 一个分段符('/u2029),Unicode中被定义。
如果 UNIX_LINES 模式被启用,则只有换行符被认为是行结束符。
如果 MULTILINE 模式被启用,。

分组和引用

字符分组以它们的左括号的出现顺序来排序。例如在表达式((A)(B(C))),有四个分组:
  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)
第0组永远表示表达式本身。
分组采用这样的命名方式,是因为,在一次匹配过程中,正则表达式会被匹配多次。以前的匹配子序列有可能在将来被使用;或者在匹配结束时,程序有可能需要重新获得所有匹配的子字符序列。
对于正则表达式中的某个分组而言,永远只保留最后匹配的字符序列。如果对某个分组匹配尝试失败,则会保留上次匹配成功的字符序列。例如,对于正则表达式(a(b)?)+而言,字符序列"aba",将会让分组2匹配的字符序列为"b"。
以(?开始的分组,将不会计入分组数目,也不会被后续匹配所引用。

Unicode支持

本正则表达式匹配引擎的实现遵循了《 Unicode技术报告:Unicode正则表达式指南》,实现了该指南的第二层所需的功能,但是在细微处有一些简单语法修改。
Unicode块(Block)和分类(Category)通过/p和/P通配苻表示。/p{ prop}匹配含有 prop的输入序列,而/P{ prop}匹配不含有 prop的输入序列。Unicode块通过前缀 In表示,如/p{InMongolian}。Unicode分类通过可选的前缀Is表示,因此/p{L}和/p{IsL}都代表Unicode分类 letters。Unicode块和分类都可以在正则表达式子集外部和内部使用。
目前支持的Unicode块和分类是《 Unicode标准,第三版》中所指定的块和分类。 Unicode块名称在《 Unicode 字符数据库》的第14章被定义,文件名称叫 Blocks-3.txt,但是名称中的空格被去掉了。例如"Basic Latin"成了"BasicLatin"。无论是标准化的还是非标准化的分类,都在该标准的第88页的第4-5表中被全部定义。

与Perl 5正则表达式语法对比

[TBD]


正则表达式参考



字符

正则表达式字符串
匹配的字符串
X
字符X,包括 CJK ExtB 区汉字
//
反斜杠/
/0n 八进制0n代表的字符(0<=n<=7)
/0nn
八进制0nn代表的字符(0<=n<=7)
/0mnn
八进制0mnn代表的字符(0<=m<=3,0<=n<=7)
/xhh
十六进制 0xhh所代表的字符
/uhhhh
十六进制 0xhhhh所代表的字符。注意,目前尚不支持CJK ExtB区汉字。
/t
制表符('/u0009')
/n
换行('/u000A')
/r
回车('/u000D')
/a
响铃符('/u0007')
/e
取消符Escape('/001B')
/cx
x所代表的控制字符

逻辑操作符

正则表达式字符串
匹配的字符串
XY
X后面跟随Y
X|Y
X或者Y
(X)
X作为分组表达式

向后引用

正则表达式字符串
匹配的字符串
/n
n个匹配的分组

边界元字符

边界字符
匹配的字符串
^
行首
$
行末
/b 字符边界
/B
非字符边界
/A
输入流的开始
/G
上次匹配的结束处
/Z
输入流的结束,或者是最后一个行结束符,参见行结束符
/z
输入流的结束

重复指示符

正则表达式字符串
匹配的字符串
X?
X重复一次,或者不重复
X*
X重复0次或多次
X+
X重复1次或多次
X{n}
X重复n次,不多也不少。
X{n,}
X至少重复n次
X{n,m}
X至少重复n次,至多重复m次。
注: X{n,m}、?、*、+方式可以联合使用。

字符子集

正则表达式字符串子集
匹配的字符串
组合方式
[abc]
字符a,b或c,包括 CJK ExtB 区汉字
简单子集
[^abc]
任意非a,b或c的字符。
排除
[a-zA-Z] 从a到z,或者A到Z,包含a,z,A,Z。
区间
[a-d[m-p]]
从a到d,或者m到p,等于[a-dm-p]。
联合
[a-z&&[def]]
d,e或者f。
交集
[a-z&&[^bc]]
从a到z,除了b和c,等于[ad-z]
扣除
[a-z&&[^m-p]]
从a到z,并且不包括从m到p,等于[a-lq-z]
扣除

预定义子集(元字符)

边界字符
匹配的字符串
.
任意字符,可能匹配行结束符。
/d
数字[0-9]
/D 非数字[^0-9]
/s
空白符[ /t/n/x0B/f/r]
/S
非空白符[^/s]
/w
单词符,包含有字母和数字[a-zA-Z_0-9]
/W
非单词符,不包含有字母和数字。

扩展子集(元字符)

正则表达式字符串
匹配的字符串




扩展中文子集(元字符)

名称
块名称(/p{InXXX})
简化通配符
标准Unicode块,或者汉字列表
任意双字节字符(汉字或全角符号)
/p{InQuqnJiao}
/E
任意由GBK表示的汉字,不包括GB18030扩展部分,
以及CJK ExtB区的汉字。
任意单字节字符
/p{InFQuanJiao}
/~E
任意单字节字符。
任意全角ASCII字符
/p{InQJAscii}
/H
标准HalfwidthandFullwidthForms块
任意收录在BIG5码集中的双字节字符
/p{InBig5}
/I
Big5可编码双字节字符
匹配未收录在BIG5码集中的双字节字符/p{InFBig5}
/~I
非Big5可编码双字节字符
匹配任意汉字(不包括符号)
/p{InHanziOrCJKExtB}
/X
任意汉字,包括GB18030扩展部分。
匹配任意汉字(不包括符号)
/p{InHanzi}
/M
任意汉字,不包括GB18030扩展部分。
匹配非汉字的双字节字符
/p{InFHanzi}
/~M
任意非汉字的双字节字符,
包括GB18030扩展部分。
地支字符
/p{InDiZhi}
/U
子丑寅卯辰巳午未申酉戌亥
匹配收录在GB码集中的双字节字符
/p{InGB}
/g
收录在GB码集中的双字节字符,
不包括GB18030扩展部分。
匹配非收录在GB码集中的双字节字符
/p{InFGB}
/~g
未收录在GB码集中的双字节字符,
不包括GB18030扩展部分。
匹配收录在GBK码集中的双字节字符
/p{InGBK}
/h
收录在GBK码集中的双字节字符,
不包括GB18030扩展部分。
匹配非收录在GBK码集中的双字节字符
/p{InFGBK}
/~h
未收录在GBK码集中的双字节字符,
不包括GB18030扩展部分。
大写希腊字母
/p{InDaXila}
/K
ΑΒΓΔΕΖΗΘΙΚΛΜΝ
ΞΟΠΡΣΤΥΦΧΨΩ
日文片假名
/p{InPianJia}
/j
标准Katakana块
日文平假名
/p{InPingJia}
/J
标准Hiragana块
小写希腊字母
/p{InXiaoXila}
/k
αβγδεζηθικλμν
ξοπρστυφχψω
数学符号
/p{InMathe}
/m
±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙
∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴
中文数字
/p{InCnDigit}
/i
〇一二三四五六七八九十百千万亿兆吉京
大写中文数字
/p{InDaCnDigit}
/N
零壹贰叁肆伍陆柒捌玖拾佰仟萬亿兆吉京
全角标点符号
/p{InQJBiaoDian}
/o
、。·ˉˇ¨〃々—~‖…‘’“”〔〕
〈〉《》「」『』〖〗【】!"'(),
-.:;<=>?[]{|}`﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚
﹛﹜﹝﹞︵︶︹︺︿﹀︽︾﹁﹂﹃﹄
︻︼︷︸︱︳︴
小写俄文字母
/p{InXiaoEWen}
/l
абвгдеёжзийклмн
опрстуфхцчшщъыьэюя
大写俄文字母
/p{InDaEWen}
/R
АБВГДЕЁЖЗИЙКЛМНО
ПРСТУФХЦЧШЩЪЫЬЭЮЯ
中文序号
/p{InCnSN}
/q
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ
ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ
再加上Unicode标准EnclosedAlphanumerics块
天干字符
/p{InTianGan}
/T
甲乙丙丁戊己庚辛壬癸
竖排标点符号
/p{InSPBiaoDian}
/V
︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴
拼音字符
/p{InPinyin}
/y
āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡ
GBK -> 0xA8A1- 0xA8C0
只是Unicode标准LatinExtended-A块的一部分。
注音字符
/p{InZhuyin}
/Y
标准Bopomofo块
制表字符
/p{InZhiBiao}
/C
标准BoxDrawing块。
经检查发现 textpro 的算法含有部分非标
准Unicode制表符:“∟∣≒≦≧⊿═”。

POSIX字符子集(只适用于ASCII)

正则表达式字符串
匹配的字符串
/p{Lower}
小写字母[a-z]
/p{Upper}
大写字母[A-Z]
/p{ASCII}
所有的ASCII字符[/x00-/x7F]
/p{Alpha}
大小写字母[/p{Lower}/p{Upper}]
/p{Digit}
数字[0-9]
/p{Alnum}
字母数字符,包含大小写字母和数字[/p{Alpha}/p{Digit}]
/p{Punct}
标点符号,!"#$%&'()*+,-./:;<=>?@[/]^_`{|}~之一。
/p{Graph}
可显示字符[/p{Alnum}/p{Punct}]
/p{Print}
可打印字符[/p{Graph}]
/p{Blank}
空格或者制表符[ /t]
/p{Cntrl}
控制字符[/x00-/x1F/x7F
/p{XDigit}
十六进制数字[0-9a-fA-F]
/p{Space}
空白符[ /t/n/x0B/f/r]

Unicode块和分类


中文名称(摘自Word XP)
代码区域
BasicLatin
基本拉丁语
/u0000-/u007F
Latin-1Supplement
拉丁语-1
/u0080-/u00FF
LatinExtended-A
拉丁语扩充-A
/u0100-/u017F
LatinExtended-Bound
拉丁语扩充-B
/u0180-/u024F
IPAExtensions
国际音标扩充
/u0250-/u02AF
SpacingModifierLetters
进格的修饰字符
/u02B0-/u02FF
CombiningDiacriticalMarks
组合用发音符
/u0300-/u036F
Greek
基本希腊语
/u0370-/u03FF
Cyrillic
西里尔语
/u0400-/u04FF
Armenian

/u0530-/u058F
Hebrew

/u0590-/u05FF
Arabic

/u0600-/u06FF
Syriac

/u0700-/u074F
Thaana

/u0780-/u07BF
Devanagari

/u0900-/u097F
Bengali

/u0980-/u09FF
Gurmukhi

/u0A00-/u0A7F
Gujarati

/u0A80-/u0AFF
Oriya

/u0B00-/u0B7F
Tamil

/u0B80-/u0BFF
Telugu

/u0C00-/u0C7F
Kannada

/u0C80-/u0CFF
Malayalam

/u0D00-/u0D7F
Sinhala

/u0D800-/uDFF
Thai

/u0E00-/u0E7F
Lao

/u0E80-/u0EFF
Tibetan
藏语
/u0F00-/u0FFF
Myanmar

/u1000-/u109F
Georgian

/u10A0-/u10FF
HangulJamo

/u1100-/u11FF
Ethiopic

/u1200-/u137F
Cherokee

/u13A0-/u13FF
UnifiedCanadianAboriginalSyllabics

/u1400-/u167F
Ogham

/u1680-/u169F
Runic

/u16A0-/u16FF
Khmer

/u1780-/u17FF
Mongolian
蒙古语
/u1800-/u18AF
LatinExtendedAdditional

/u1E00-/u1EFF
GreekExtended

/u1F00-/u1FFF
GeneralPunctuation
广义标点
/u2000-/u206F
SuperscriptsandSubscripts

/u2070-/u209F
CurrencySymbols
货币符号
/u20A0-/u20CF
CombiningMarksforSymbols

/u20D0-/u20FF
LetterlikeSymbols
类似字母的符号
/u2100-/u214F
NumberForms
数字形式
/u2150-/u218F
Arrows
箭头
/u2190-/u21FF
MathematicalOperators
数学运算符
/u2200-/u22FF
MiscellaneousTechnical
零杂技术用符号
/u2300-/u23FF
ControlPictures

/u2400-/u243F
OpticalCharacterRecognition

/u2440-/u245F
EnclosedAlphanumerics
带括号的字母数字
/u2460-/u24FF
BoxDrawing
制表符
/u2500-/u257F
BlockElements
方块图形
/u2580-/u259F
GeometricShapes
几何图形
/u25A0-/u25FF
MiscellaneousSymbols
零杂丁贝符(示意符等)
/u2600-/u26FF
Dingbats

/u2700-/u27BF
BraillePatterns

/u2800-/u28FF
CJKRadicalsSupplement

/u2E80-/u2EFF
KangxiRadicals

/u2F00-/u2FDF
IdeographicDescriptionCharacters

/u2FF0-/u2FFF
CJKSymbolsandPunctuation
CJK符号和标点
/u3000-/u303F
Hiragana
平假名
/u3040-/u309F
Katakana
片假名
/u30A0-/u30FF
Bopomofo
注音
/u3100-/u312F
HangulCompatibilityJamo

/u3130-/u318F
Kanbun

/u3190-/u319F
BopomofoExtended
扩展注音
/u31A0-/u31BF
EnclosedCJKLettersandMonths
带括号的CJK字母及月份
/u3200-/u32FF
CJKCompatibility
CJK兼容字符
/u3300-/u33FF
CJKUnifiedIdeographsExtensionA
CJK统一汉字扩展-A
/u3400-/u4dBF
CJKUnifiedIdeographs
CJK统一汉字
/u4E00-/u9fAF
YiSyllables

/uA000-/uA48F
YiRadicals

/uA490-/uA4CF
HangulSyllables

/uAC00-/uD7A3
HighSurrogates

/uD800-/uDB7F
HighPrivateUseSurrogates

/uDB80-/uDBFF
LowSurrogates

/uDC00-/uDFFF
PrivateUse
专用区
/uE000-/uF8FF
CJKCompatibilityIdeographs
CJK兼容汉字
/uF900-/uFAFF
AlphabeticPresentationForms

/uFB00-/uFB4F
ArabicPresentationForms-A

/uFB50-/uFDFF
CombiningHalfMarks

/uFE20-/uFE2F
CJKCompatibilityForms
CJK兼容形式
/uFE30-/uFE4F
SmallFormVariants
小写变体
/uFE50-/uFE6F
ArabicPresentationForms-Bound

/uFE70-/ufeFF
Specials

/uFFF0-/uFFFF
HalfwidthandFullwidthForms
半形及全形字符
/uFF00-/uFFEF


分类
全称
说明
Cn

UNASSIGNED
Lu

UPPERCASE_LETTER
Ll

LOWERCASE_LETTER
Lt

TITLECASE_LETTER
Lm

MODIFIER_LETTER
Lo

OTHER_LETTER
Mn

NON_SPACING_MARK
Me

ENCLOSING_MARK
Mc

COMBINING_SPACING_MARK
Nd

DECIMAL_DIGIT_NUMBER
Nl

LETTER_NUMBER
No

OTHER_NUMBER
Zs

SPACE_SEPARATOR
Zl

LINE_SEPARATOR
Zp

PARAGRAPH_SEPARATOR
Cc

CNTRL
Cf

FORMAT
Co

PRIVATE_USE
Cs

SURROGATE
Pd

DASH_PUNCTUATION
Ps

START_PUNCTUATION
Pe

END_PUNCTUATION
Pc

CONNECTOR_PUNCTUATION
Po

OTHER_PUNCTUATION
Sm

MATH_SYMBOL
Sc

CURRENCY_SYMBOL
Sk

MODIFIER_SYMBOL
So

OTHER_SYMBOL
L

LETTER
M

MARK
N

NUMBER
Z

SEPARATOR
C

CONTROL
P

PUNCTUATION
S

SYMBOL
LD

LETTER_OR_DIGIT
L1

Latin-1
all

ALL
ASCII

ASCII
Alnum

字母数字(0-9,a-z,A-Z)
Alpha

字母(a-z,A-Z)
Blank

空格和制表符(' '|/t)
Cntrl

控制字符,不可打印
Digit

数字(0-9)
Graph

可打印且可视字母(例如空格' '是可打印的但不是可视字母,而 `a' 两者都是。)
Lower

小写字母
Print

可打印字母(非控制字符)
Punct

标符号(字母、数字、控制、空白符以外的字母),如:!@#$%}{<>,./?[]等等。
Space

空白符(' ',/t,0x09,0x0A,0x0B,0x0C,0x0D,0x20)
Upper

大写字母
XDigit

十六进制数字(0-9,a-f, A-F)





替换表达式

特殊字符
特殊字符介绍
描述
/n
换行
/b
向前删除一个字符。当这个字符位于替换串之首时,将删除匹配串之前的一个字符。若匹配串位于行首,将使匹配串所在行与前一行相合并。
/d
向后删除一个字符。当这个字符位于替换串之末时,将删除匹配串之后的一个字符。若匹配串位于行末,将使匹配串所在行与下一行相合并。
/e
插入一个ESC字符
/t
插入一个TAB字符
/n
n代表查找正则表达式中的子表达式(组)。/1代表第一个子表达式,/2代表第二个子表达式,依次类推。/0代表整个匹配到的字符串。
/v
大写下一个字母
/U
全部大写以后的字母,直到碰到其它指示符为止。
/l
小写下一个字母
/L
全部小写以后的字母,直到碰到其它指示符为止。
/E
取消所有的字母大小写指示符。


自定义替换表

在查找/替换中使用自定义替换表
有的时候,上述简单的自定义替换功能是不够的。例如,用户可能希望只把出现在括号内的源串替换为目标串。这种文本处理可以通过在查找/替换中使用自定义替换表来解决。

在查找/替换功能中使用自定义替换表的替换函数是/Tn,其中n是0-9的数字, 注意n为0表示第10张替换表。如果略去n,其效果相当于/T1,即使用第一张替换表。例如要把所有放在方括号中的汉字替换为拼音,可以查找“/[(/E)/]”,替换为“/T{/1}”。即把第一个子表达式的匹配内容按自定义替换表转换。注意,如果/T函数的参数不在替换表的源串中,/T函数的结果与源串相同,即不做任何变换。

有些情况下,用户可能希望只使用替换表的一部分内容。还是以拼音为例,前面给出的替换表中包含了拼音的音调,如果在替换时不希望加上这些音调数字,可以使用“过滤”功能。所谓过滤,其实是用一个正则表达式去分析替换表的目标串,并把其中的某个子表达式取出来。

使用“过滤”时,在“设置自定义替换表”对话框中,点“过滤”按钮,在弹出的对话框中填入一个正则表达式。再以拼音为例,表达式可以写为“(/p{Alpha}+)(/d)”,其中第一对括号中的是不含音调的拼音,第二对括号是音调。在调用/T函数时,JTextPro会在目标串中查找这个正则表达式。但是如何把其中的子表达式取出来呢?/T函数还有一个可选的下标,取第n个子表达式的值就写作/T{...}[n]。所以,把放在方括号中的汉字替换为不带调的拼音,可以查找“/[(/E)/]”,替换为“/T{/1}[1]”

posted @ 2005-12-12 13:38 kelven 阅读(198) | 评论 (0)编辑 收藏

Eclipse插件

我收集的Eclipse插件

Poperties Editor
 
http://propedit.sourceforge.jp/eclipse/updates/

eclipseME
 
http://eclipseme.org/updates/

Eclipse加速插件KeepResident
http://suif.stanford.edu/pub/keepresident/

 
MyEclipse  J2EE开发插件,支持SERVLET/JSP/EJB/数据库操纵等
www.myeclipseide.com
 
Properties Editor  编辑java的属性文件,并可以自动存盘为Unicode格式
http://propedit.sourceforge.jp/index_en.html
http://propedit.sourceforge.jp/eclipse/updates/
 
Colorer Take  为上百种类型的文件按语法着色
http://colorer.sourceforge.net/
 
XMLBuddy 编辑xml文件
www.xmlbuddy.com
 
Code Folding  加入多种代码折叠功能(比eclipse自带的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport
 
Easy Explorer  从eclipse中访问选定文件、目录所在的文件夹
http://easystruts.sourceforge.net/
 
Fat Jar 打包插件,可以方便的完成各种打包任务,可以包含外部的包等
http://fjep.sourceforge.net/
 
RegEx Test 测试正则表达式
http://brosinski.com/stephan/archives/000028.php
 
JasperAssistant 报表插件(强,要钱的)
http://www.jasperassistant.com/
 
Jigloo GUI Builder JAVA的GUI编辑插件
http://cloudgarden.com/jigloo/
 
Profiler 性能跟踪、测量工具,能跟踪、测量BS程序
http://sourceforge.net/projects/eclipsecolorer/
 
AdvanQas 提供对if/else等条件语句的提示和快捷帮助(自动更改结构等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html
 
Log4E     Log4j插件,提供各种和Log4j相关的任务,如为方法、类添加一个logger等
http://log4e.jayefem.de/index.php/Main_Page
 
VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin
 
Implementors   提供跳转到一个方法的实现类,而不是接中的功能(实用!)
http://eclipse-tools.sourceforge.net/implementors/
 
Call Hierarchy 显示一个方法的调用层次(被哪些方法调,调了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
 
EclipseTidy 检查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/
 
Checkclipse 检查代码的风格、写法是否符合规范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
 
Hibernate Synchronizer Hibernate插件,自动映射等
http://www.binamics.com/hibernatesync/
 
spring updatesite 插件
http://springide.org/updatesite/

VeloEclipse  Velocity插件
http://propsorter.sourceforge.net/
 
EditorList   方便的列出所有打开的Editor
http://editorlist.sourceforge.net/
 
MemoryManager 内存占用率的监视
http://cloudgarden.com/memorymanager/

Eclipse的游戏插件
http://eclipse-games.sourceforge.net/

JBoss-IDE
http://jboss.sourceforge.net/jbosside/updates/

自动反编译class,安装后要设定class文件缺省关联到jode
http://www.technoetic.com/eclipse/update


jigloo swing/sw设计工具,里面自带的form/anchor布局很好用!
http://cloudgarden.soft-gems.net/update-site/

jinto的资源文件编辑工具,同时编辑多种语言,而且自动转换成iso8859-1编码。很好用!
http://www.guh-software.de/eclipse/ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值