posts - 22,comments - 35,trackbacks - 0
Windows XP的关机是由Shutdown.exe程序来控制的,位于Windows\System32文件夹中。如果想让Windows 2000也实现同样的效果,可以把Shutdown.exe复制到系统目录下。

比如你的电脑要在22:00关机,可以选择“开始→运行”,输入“at 22:00 Shutdown -s”,这样,到了22点电脑就会出现“系统关机”对话框,默认有30秒钟的倒计时并提示你保存工作。如果你想以倒计时的方式关机,可以输入“Shutdown.exe -s -t 3600”,这里表示60分钟后自动关机,“3600”代表60分钟。

设置好自动关机后,如果想取消的话,可以在运行中输入“shutdown -a”。另外输入“shutdown -i”,则可以打开设置自动关机对话框,对自动关机进行设置。

Shutdown.exe的参数,每个都具有特定的用途,执行每一个都会产生不同的效果,比如“-s”就表示关闭本地计算机,“-a”表示取消关机操作,下面列出了更多参数,大家可以在Shutdown.exe中按需使用。

  -f:强行关闭应用程序
  -m:\\计算机名:控制远程计算机
  -i:显示图形用户界面,但必须是Shutdown的第一个选项
  -l:注销当前用户
  -r:关机并重启
  -t:时间:设置关机倒计时
  -c:“消息内容”:输入关机对话框中的消息内容(不能超127个字符)
posted @ 2006-08-07 14:18 kelven 阅读(403) | 评论 (0)编辑 收藏
http://popkart.tiancity.com/homepage/
posted @ 2006-07-10 13:18 kelven 阅读(327) | 评论 (2)编辑 收藏
1.将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中;
2.在server.xml中设置数据源,以MySQL数据库为例,如下:
在<GlobalNamingResources> </GlobalNamingResources>节点中加入,
      <Resource
      name="jdbc/DBPool"
      type="javax.sql.DataSource"
      password="root"
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://127.0.0.1:3306/test"
      maxActive="4"/>
   属性说明:name,数据源名称,通常取”jdbc/XXX”的格式;
            type,”javax.sql.DataSource”;
            password,数据库用户密码;
            driveClassName,数据库驱动;
            maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
                     接将被标记为不可用,然后被释放。设为0表示无限制。
            MaxActive,连接池的最大数据库连接数。设为0表示无限制。
            maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
                     无限制。
3.在你的web应用程序的web.xml中设置数据源参考,如下:
  在<web-app></web-app>节点中加入,
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/DBPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>
  子节点说明: description,描述信息;
               res-ref-name,参考数据源名字,同上一步的属性name;
               res-type,资源类型,”javax.sql.DataSource”;
               res-auth,”Container”;
               res-sharing-scope,”Shareable”;
4.在web应用程序的context.xml中设置数据源链接,如下:
  在<Context></Context>节点中加入,
  <ResourceLink
   name="jdbc/DBPool" 
   type="javax.sql.DataSource" 
   global="jdbc/DBPool"/>
   属性说明:name,同第2步和第3步的属性name值,和子节点res-ref-name值;
             type,同样取”javax.sql.DataSource”;
             global,同name值。
 
至此,设置完成,下面是如何使用数据库连接池。
1.建立一个连接池类,DBPool.java,用来创建连接池,代码如下:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBPool {
    private static DataSource pool;
    static {
         Context env = null;
          try {
              env = (Context) new InitialContext().lookup("java:comp/env");
              pool = (DataSource)env.lookup("jdbc/DBPool");
              if(pool==null) 
                  System.err.println("'DBPool' is an unknown DataSource");
               } catch(NamingException ne) {
                  ne.printStackTrace();
          }
      }
    public static DataSource getPool() {
        return pool;
    }
}

2.在要用到数据库操作的类或jsp页面中,用DBPool.getPool().getConnection(),获得一个Connection对象,就可以进行数据库操作,最后别忘了对Connection对象调用close()方法,注意:这里不会关闭这个Connection,而是将这个Connection放回数据库连接池。
posted @ 2006-06-14 11:17 kelven 阅读(912) | 评论 (0)编辑 收藏

<%@ page import="java.io.*"%>
<%
String root=application.getRealPath("/");
String fileName=request.getParameter("fileName");
String filePath=request.getParameter("filePath");

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment; filename=\"" +fileName+ "\"");

try{
java.io.OutputStream os = response.getOutputStream(); //不加此行将只能下载文本文件.下载jpg等就会出现打不开的现象.
java.io.FileInputStream fis = new java.io.FileInputStream(root+filePath);
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 )
{
System.out.println ( "IOException." + e );
}
%>

java.io.FileInputStream fis = new java.io.FileInputStream(文件的真实路径);
也可以

<%
if (request.getParameter("fileUrl") != null)
{
String strFileUrl = request.getParameter("fileUrl");

//获取文件名(DealFile是自己写的一个处理文件的一个类)
DealFile dealFile = new DealFile(strFileUrl);
String filename = dealFile.getFileName();

response.setHeader("content-type","application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=\""+ filename+"\"");

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
//从文件所在目录以流的方式读取文件
bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath(strFileUrl)));

bos = new BufferedOutputStream(response.getOutputStream());

byte[] buff = new byte[2048];
int bytesRead;

while(-1 != (bytesRead = bis.read(buff, 0, buff.length)))
{
bos.write(buff,0,bytesRead);
}
bos.flush();
}
catch(final IOException e)
{
System.out.println ( "IOException." + e );
}
finally
{
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
return;
}
%>

posted @ 2006-04-14 16:04 kelven 阅读(1447) | 评论 (0)编辑 收藏

[http://www.javaalmanac.com] - Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
[http://www.onjava.com] - O'Reilly的Java网站. 每周都有新文章.
[http://java.sun.com] - 官方的Java开发者网站 - 每周都有新文章发表.
[http://www.developer.com/java] - 由Gamelan.com 维护的Java技术文章网站.
[http://www.java.net] - Sun公司维护的一个Java社区网站.
[http://www.builder.com] - Cnet的Builder.com网站 - 所有的技术文章, 以Java为主.
[http://www.ibm.com/developerworks/java] - IBM的Developerworks技术网站; 这是其中的Java技术主页.
[http://www.javaworld.com] - 最早的一个Java站点. 每周更新Java技术文章.
[http://www.devx.com/java] - DevX维护的一个Java技术文章网站.
[http://www.fawcette.com/javapro] - JavaPro在线杂志网站.
[http://www.sys-con.com/java] - Java Developers Journal的在线杂志网站.
[http://www.javadesktop.org] - 位于Java.net的一个Java桌面技术社区网站.
[http://www.theserverside.com] - 这是一个讨论所有Java服务器端技术的网站.
[http://www.jars.com] - 提供Java评论服务. 包括各种framework和应用程序.
[http://www.jguru.com] - 一个非常棒的采用Q&A形式的Java技术资源社区.
[http://www.javaranch.com] - 一个论坛,得到Java问题答案的地方,初学者的好去处。
[http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站点 - 收集了来自comp.lang.java新闻组的问题和答案的分类目录.
http://java.sun.com/docs/books/tutorial/] - 来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助.
http://www.javablogs.com] - 互联网上最活跃的一个Java Blog网站.
http://java.about.com/] - 来自About.com的Java新闻和技术文章网站.

posted @ 2006-04-05 14:03 kelven 阅读(388) | 评论 (0)编辑 收藏
http://www.021123.com/
posted @ 2006-03-24 14:59 kelven 阅读(343) | 评论 (0)编辑 收藏
1.安装JDK1.4和jakarta-tomcat-4.1.27.exe。

  路径分别为 D:\jdk1.4 和 D:\Tomcat 4.1。
  安装Tomcat 4时,会要求填写web访问端口、用户名、密码等信息。
  web访问端口默认为8080,用户名默认为admin,密码自己填写。

  启动Tomcat4,访问http://127.0.0.1:8080/ ,就能看到Apache Tomcat/4.1.27的欢迎访问页面,页面上有一些相关介绍信息等。


2.设置数据库的驱动

  以Oracle的JDBC驱动设置为例:

  Oracle8i的驱动在\oracle\ora81\jdbc\lib\目录下。名字为classes12.zip。

  Oracle9i的驱动在\oracle9i\jdbc\lib\目录下,名字为ojdbc14.jar。

  将这个文件copy到D:\Tomcat 4.1\common\lib 下。

  注意,如果使用Oracle8i 的驱动,则需要在D:\Tomcat 4.1\common\lib 目录下将classes12.zip更名为classes12.jar,因为Tomcat4不认识zip的后缀名。


3.设置Web应用。

  新建一个文件夹,名字为mypool,位置为D:\mypool。这个D:\mypool路径将是web应用的主目录。

  打开D:\Tomcat 4.1\conf\server.xml 文件,找到如下行:
 
   <!-- Tomcat Root Context -->
     <!--
         <Context path="" docBase="ROOT" debug="0"/>
     -->
 
 
  在这下面,加入如下行:
 
  <Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

 
  完成后,成为这个样子:

    <!-- Tomcat Root Context -->
     <!--
          <Context path="" docBase="ROOT" debug="0"/>
      -->
   
     <Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

  保存D:\Tomcat 4.1\conf\server.xml 文件。

  配置完成后,重新启动Tomcat,就可以这样访问这个web应用了: http://127.0.0.1:8080/mypool/


4.设置Tomcat的连接池数据源。

  访问 http://127.0.0.1:8080/admin 页面,用刚才安装 Tomcat4 时填写的用户名和密码登录。

  登录成功后,会出现Tomcat 的web应用管理界面(Tomcat Web Server Administration Tool)。

  然后在左边的目录树点击“Data Sources”项,右边可以看到JNDI配置的页面。
 
  在右上角的下拉框中选择“Create New Data Source”,接下来填写配置信息:
 
  JNDI Name: jdbc/myOrcl  
  Data Source URL: jdbc:oracle:thin:@192.168.6.40:1521:dbserver
  JDBC Driver Class: oracle.jdbc.driver.OracleDriver
  User Name: myname
  Password: mypassword
  Max. Active Connections:  可用默认值
  Max. Idle Connections:    可用默认值
  Max. Wait for Connection: 可用默认值
  Validation Query: 可不填写。

  然后,按下“save”按钮保存。
  再按下“Commit Changes”按钮将配置更改提交完成。

  此时如果看看 Tomcat4 的窗口,会发现在最下面有一行文字提示:  

   Debugging -- changes saved to conf/server.xml
 
  此时 D:\Tomcat 4.1\conf\server.xml 文件的配置已经更改保存完毕。


  如果此时打开D:\Tomcat 4.1\conf\server.xml 文件,会发现server.xml 文件的内容改变了很多。
  一些注释文字都被去掉了。

  还会发现上面第三步配置Web应用的如下文字
   
   <!-- Tomcat Root Context -->
     <!--
          <Context path="" docBase="ROOT" debug="0"/>
      -->
   
     <Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

  则被自动修改成了这样的:

     <Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>

   
   好了,至此位置,对Oracle的应用连接池已经配置完毕。
   
   仔细对照server.xml 文件,会发现刚才所配置的连接池信息被放置在<GlobalNamingResources>标签中,这意味着这个信息是可以被全局引用的,大致是如下的样子:

    <GlobalNamingResources>
    <Environment name="simpleValue" override="true" type="java.lang.Integer" value="30"/>
    <Resource name="jdbc/myOrcl" scope="Shareable" type="javax.sql.DataSource"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" scope="Shareable" type="org.apache.catalina.UserDatabase"/>
   
    <ResourceParams name="jdbc/myOrcl">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>200</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>mypassword</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:oracle:thin:@192.168.6.40:1521:dbserver</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>20</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>myname</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>  


5.设置web应用对连接池的引用。
 
  打开D:\Tomcat 4.1\conf\server.xml 文件,找到刚才配置的web应用文字,由于刚才server.xml 文件被自动修改过,并去掉了很多注释内容,所以刚才配置的web应用

   <Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

  被自动修改成了这样的:

     <Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>

  在<Context></Context>的描述中加上本web应用对全局连接池的引用说明,如下文字:

    <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>  

  设置完成后,web应用的描述大致如下面的样子:

    <Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">  
   
      <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>      
   
 </Context>


  保存D:\Tomcat 4.1\conf\server.xml 文件。

  注意,设置这个连接池的引用说明是非常重要的一步。
  一些朋友在Tomcat4中配置连接池失败的原因大都归咎与此。还有网上一些文章说这是一个Tomcat4的一个Bug。
  我用了整整两天两夜的时间才明白其中的奥秘。[:(]
  当时离疯掉只查一点点。因为毕竟配置一个连接池是很简单的。[:(]


6.一般情况下,到此,连接池的设置就完成了。

  然后需要重新启动Tomcat,这样就可以使用连接池来工作了。

  但是,看到很多文章上说,还需要设置一下web.xml才能应用。我没有设置web.xml,连接池也可以完全使用。

  现在说一下web.xml的配置方法。

  在D:\mypool中新建文件夹,命名为WEB-INF,注意是大写的字母。

  然后在D:\mypool\WEB-INF\ 下新建文件web.xml,其内容为:

  <web-app>
    <resource-ref>
        <description>Oracle DataSource example</description>
        <res-ref-name>jdbc/myOrcl</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
  </web-app>

  保存D:\mypool\WEB-INF\web.xml 文件。


7.一个简单的应用示例。

  写了一个简单的JSP页面,用连接池来访问数据库。

内容如下:
---------------------
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<%
    try
    {                  
       Context initCtx = new InitialContext();
 
       if(initCtx==null)
          throw new Exception("没有匹配的环境");

       Context ctx = (Context) initCtx.lookup("java:comp/env");
     
       //获取连接池对象                  
       Object obj = (Object) ctx.lookup("jdbc/myOrcl");  
     
      //类型转换
       javax.sql.DataSource ds = (javax.sql.DataSource)obj;
         
       if(ds==null)
          throw new Exception("没有匹配数据库");  
   
       Connection conn = ds.getConnection();
     
       Statement stmt = conn.createStatement();                  
                             
       String strSql="select * from grade";  //SQL,要保证grade数据表里面有记录。
                     
       ResultSet rs=stmt.executeQuery(strSql);

       if(rs.next())
         {                    
          out.println(rs.getString(1));                          
          out.println(rs.getString(2));                      
         }
       rs.close();      //关闭ResultSet  
       stmt.close();    //关闭Statement
       conn.close();    //将连接放回到连接池
     }

     catch(Exception ex)

     {    
         ex.printStackTrace();
         throw new SQLException("cannot get Connection pool."+ex);
     }
%>

<hr>
--------------------
 
记住,用完后的数据库连接要释放。
不然当打开的连接过多或恶意刷屏,连接池的连接数目会被用完。
当连接池的连接数目用完后,再访问jsp页面时,会在页面出现如下的错误信息,报告连接池的连接被耗尽:
java.sql.SQLException: DBCP could not obtain an idle db connection, pool exhausted




二、Win2k下Tomcat5 的连接池的配置

安装jakarta-tomcat-5.0.13.exe,假如Tomcat5的安装目录为 D:\Tomcat 5.0 。

别忘了把oracle的驱动程序classes12.jar文件copy到目录 D:\Tomcat 5.0\common\lib\ 下。

Tomcat5的连接池设置和Tomcat4 的差不多,仅说明一下不同点或需要特别注意的地方。


1. Tomcat5启动后,访问 http://127.0.0.1:8080/admin 页面,当设置完Tomcat的连接池数据源后,打开D:\Tomcat 5.0\conf\server.xml 文件,会看到配置的连接池相关信息大致如下样子:

<GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource name="jdbc/myOrcl" type="javax.sql.DataSource"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="jdbc/myOrcl">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>4</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>mypassword</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:oracle:thin:@127.0.0.1:1521:dbserver</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>2</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>myusername</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>

可以看到,一些连接池的信息配置参数已经和Tomcat4不同了。
但大致配置步骤和方法都是一样的。


2.设置web应用对连接池的引用。

 打开D:\Tomcat 5.0\conf\Catalina\localhost\ 目录,找到和web应用同名的xml文件(mypool.xml),打开这个文件,
修该其<Context></Context>的描述信息,添加如下行:

   <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>  

使mypool.xml文件的内容看起来大致这个:
 
   <Context docBase="D:/mypool" path="/mypool" privileged="true" reloadable="true">
     <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>
   </Context>

然后保存mypool.xml,需要重新Tomcat5服务,使之生效。


3.JSP页面测试文件的写法也是一样的,不再赘述。

4.一些补充:

  如果web应用没有配置对连接池的引用,即没有配置<ResourceLink>,则会在访问jsp页面时出现如下错误:
    NameNotFoundException: Name jdbc is not bound in this Context

  如果缺少Oracle的JDBC驱动,则会在访问jsp页面时出现如下错误:
    java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
posted @ 2006-03-22 11:30 kelven 阅读(1630) | 评论 (1)编辑 收藏
     摘要:         首先XMLHttpRequest不是web标准,而是大部分主流浏览器都支持的一种扩展技术。它被认为是一种异步调用的实现技术,因为它本来是被设计在后台取数据用的。在IE中它被作为一个ActiveX控件提供,而其他一些浏览器都提供一些本地API以供调用。下面是一些关于XMLHttpRequest的基本方法: 1、获...  阅读全文
posted @ 2006-02-26 13:42 kelven 阅读(381) | 评论 (0)编辑 收藏
1、女人永远也不知道男人为什么要学会坚强?
因为他们自己知道.他们虽然外表坚强.但内心很脆弱.他们永远想让自己身边的她觉得自己是最棒的.

2、女人永远也不知道男人为什么不会轻易掉眼泪?
因为他们自己知道.他们不是不会掉眼泪.只是他明白.一但眼泪掉下来了.这段感情也就结 束了.


3、女人永远也不知道男人为什么每次在心烦的时候那么喜欢抽烟?
因为他们自己知道.只有在烟雾中才能忆起他们过去美好的时光来寻求一点心里的平衡.


4、女人永远也不知道男人为什么要在分手以后还会对她嘘寒问暖?
因为他们自己知道.他们并不是想跟你做朋友.只是想挽回这段曾经属于他的感情.


5、女人永远也不知道男人为什么每次在听到她被欺负了会显得那么发狂?
因为他们自己知道.哪怕这次架打输了.躺下了.他也会觉得高兴.因为他们宁愿自己受到伤害.也不愿意看到你哭泣.


6、女人永远也不知道男人为什么在分手以后会夜夜买醉?

因为他们知道.如果今晚不麻醉自己.那么今晚只能在思念中度过.


7. 女人永远也不知道男人为什么每次出门会出手那么大方?

因为他们知道.他们宁愿自己一个人省吃检用.也不愿意你看到你被别人看不起.


8.女人永远也不知道男人为什么会那么爱对她发脾气?
因为他们自己知道.对她发脾气并不是不爱她.只是希望她在以后的路上不被别人所欺骗.

9.女人永远也不知道男人为什么会那么在意你以前的男朋友?
因为他们自己知道.并不是他们不自信.只是他们害怕有一天你会离他而去.

10. 女人永远也不知道男人为什么看到你为别人写的日记之后还会那么镇静的听你解释?

因为他们自己知道.自己并不是不想发火.只是希望能从你的口中得知到底是他重要还是别人重要?


11、女人永远也不知道男人为什么不对她说我爱你⒊个字?

因为他们知道.并不是不想说.只是他们自己明白.⒈万句我爱你用在身上也不够.

12. 女人永远也不知道男人为什么会跑到这里来发贴?
因为他们知道.希望有一天这贴能被你看见.以此来证明你对他的不理解.只有他自己心里明 白.这贴要是没人回的话.很快便会消失了.你更不知道一个男人的幸福生活来之不易,那是 他将每一个看过的贴子都顶了的缘故。


(如果你不能为你心爱的女人穿上嫁衣,请停下你解她衣扣的手)


愿天下有情人终成眷属.当你们看到这贴时心里最想的那个人也就是你们最爱的那个人!
posted @ 2006-02-25 11:50 kelven 阅读(375) | 评论 (0)编辑 收藏
Java文件中,连接SQLserver数据库时,需要一个连接数据库的驱动文件。

在你安装JDK的路径下的lib文件夹里拷贝一个文件jtds-0.6.jar,并且在环境变量里设置classpath,例如:你的jdk装在c:\jdk,那么环境变量classpath的路径应设为c:\jdk\lib\jtds-0.6.jar。(环境变量知道这么设吧?在我的电脑的属性,高级里。多个路径之间用分号隔开。)

这里提供SQLserver连接驱动文件jtds-0.6.jar,下载解压后拷贝到jdk路径下的lib文件夹里。

具体在文件中的应用:

import java.sql.*;
String url="JDBC:jtds:sqlserver://localhost:1433/‘数据库名´";
String driver="net.sourceforge.jtds.jdbc.Driver";
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,"用户名","密码");
就可以连接到你的数据库了。

1433是SQLserver默认的端口号,如果要连接到其他机器上,要将localhost改为其他机器的IP地址,如192.168.0.101。


其中数据库名是你所新建的数据库的名称,用户名和密码是你登陆SQLserver是的用户名和密码。

有的人安装SQLserver时用的是Windows身份验证,那么用户名和密码都为空。如果不能登陆,或者要用SQL身份验证的话,需要修改注册表。在运行里打开regedit,然后查找loginmode(具体位置:hkey_local_machine\software\microsoft\MSSQLserver\
mssqlserver\),仅用Windows身份验证的值为1,混合身份验证的值为2。只要将1改为2,就可以用SQL身份验证了,用户名为‘sa',密码为空。
posted @ 2006-02-17 11:59 kelven 阅读(573) | 评论 (0)编辑 收藏


    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 阅读(1967) | 评论 (1)编辑 收藏
诺基亚手机限制码-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 阅读(1047) | 评论 (0)编辑 收藏
下载地址: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 阅读(3202) | 评论 (1)编辑 收藏
    现在多数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 阅读(444) | 评论 (0)编辑 收藏
(此为个人学习心得,以后会逐渐完善)

(本例使用的数据库是: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 阅读(523) | 评论 (0)编辑 收藏
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 阅读(581) | 评论 (0)编辑 收藏

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 阅读(824) | 评论 (0)编辑 收藏
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 阅读(2060) | 评论 (0)编辑 收藏