Holen@Blog

Holen Bolg on Donews.net

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  216篇文章 :: 0篇收藏:: 353篇评论:: 6个Trackbacks

公告

Free Counters

文章

收藏

相册

我的原创文章

存档


正在读取评论……


2004年05月



    摘要:升级是好的,但发现输入时屏幕老闪,这个Bug一定要尽快改正。    (全文共96字)——点击此处阅读全文



准备 :
一个安装了RED HAT7.1以上版本的LINUX服务器,为避免麻烦(新手),建议采用默认安装方式.
安装完后输入命令 ls /usr/bin/cvs* ,将看到7个文件.

CVS配置:
1. 进入/etc/xinetd.d/,新建一个文件cvspserver,输入内容如下:
service cvspserver
{
socket_type = stream
wait = no
user = root
env = HOME=
server = /usr/bin/cvs
server_args = --allow-root=/cvsroot pserver
}
保存退出.

2.新建cvs组,并加入用户cvsroot,操作命令如下:
groupadd cvs
useradd cvsroot -g cvs
passwd cvsroot
(按提示输入密码)

3.建立CVSROOT仓库,并赋权限
cd /
mkdir cvsroot
#chown cvsroot.cvs /cvsroot
#chmod 755 /cvsroot
cvs -d /cvsroot init

4.至此配置完成,输入
cvs -d :pserver:cvsroot@192.168.1.127:/cvsroot login
如果不出现提示,即表示CVS服务器成功了,如果提示拒绝,则可以重启LINUX后,再试这条命令,注:把192.168.1.127改为你的主机IP.




 Servlet容器在启动时,并为每个应用创建唯一的ServletContext对象,可以把ServletContext看成一个web应用的服务器端组件的共享内存。ServletConext方法如下:
 setAttribute,getAttribte,removeAttribute,getAttributeNames



 在server.xml中加入:
    <Host name="www.holen.com" debug="0" appBase="D:\wwwroot\company" unpackWARs="true" autoDeploy="true">
   <alias>holen.com</alias>
   <alias>holen</alias>
   </Host>
 其中还有一个参数deployOnStartup(默认为true),即Tomcat启动时,自动装载appBase下所有应用,每个应用的配置为默认配置,这样就不需要对每个应用都去配置context了。
 对于虚拟主机,还需要设置DNS,如上,则需要把www.holen.com,holen.com,holen都注册在DNS中。



 获取主机IP:request.getRemoteAddr()
 获取主机名:request.getRemoteHost()
 获取端口号:request.getServerPort()
 获取请求URI(相对路径):request.getRequestURI
 获取请求URL(绝对路径):request.getRequestURL
 获取请求SESSIONID:request.getRequestedSessionId
 获取请求方法:request.getMethod



客户提交的查询数据默认采用IS0-8859-1,需要把它转换为GBK,比如:
 String company = request.getParameter("company");
 company = new String(company.getBytes("ISO-8859-1"),"GBK");



关于taglib.tld文件的写法:
tld文件中需要一段文件头,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
注意,Microsystems, Inc中Inc前面有一个空格,没这个空格,后台就会报错,说Invalid PUBLIC ID: -//Sun Microsystems,Inc.//DTD JSP Tag Library 1.1//EN。
其实就是少这个空格了,老外写英文时,喜欢在标点后空一格再写。(老外没有全角字,也就只好在标点后后格了,这样会比较好看)

关于自定义的taglib的开发:
 1、自定义一个tag,并写出其.tld文件,比如:
  <taglib>
   <tlibversion>1.0</tlibversion>
   <jspversion>1.1</jspversion>
   <shortname>mytablib</shortname>
   <uri>/mytaglib</uri>
   <tag>
    <name>hello</name>
    <tagclass>com.holen.test1.HelloTag</tagclass>
    <bodycontent>empty</bodycontent>
    <info>Just Says Hello</info>
   </tag>
  </taglib>
  前四句为taglib的说是,每一个tag为一节,如hello。
 2、然后为每个tag开发,也就是写class,比如:
  package com.holen.test1;
  import javax.servlet.jsp.JspException;
  import javax.servlet.jsp.JspTagException;
  import javax.servlet.jsp.tagext.TagSupport;
  public class HelloTag extends TagSupport {
    public HelloTag() {
    }
    public int doEndTag() throws JspException{
      try{
        pageContext.getOut().print("HolenChen");
      }catch(Exception ex){
        ex.printStackTrace();
      }
      return SKIP_BODY;
    }
    public void release(){
      super.release();
    }
  }
  其实就是重写doEndTag等方法。
 3、在web.xml中加入,比如:
    <taglib>
      <taglib-uri>/mytaglib</taglib-uri>
      <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
    </taglib>
 4、调用
  <%@ taglib uri="/mytaglib" prefix="mm" %>
  <mm:hello/>




dispatcher能把request中的内容传到下一页面,而sendredirect则不能,但在用dispatcher时,不能有任何对页面的输出,否则报错。
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    request.setAttribute("username",username);
    request.setAttribute("password",password);
    ServletContext context = this.getServletContext();
    String target = "/test1/hello.jsp";
    RequestDispatcher dispatcher = context.getRequestDispatcher(target);
    dispatcher.forward(request,response);
以上是用法示例题,把对象置入request,然后用dispatcher传送。这段内容在servlet中实现。



在JB9中用宋体(或别的字体)输入,再用记事本打开即可。比如:在JB9中输入“测试”,再用记事本打开,则显示“\u6D4B\u8BD5”,实际上,在JB9中输入的汉字,已被JB9强制转化为UNICODE编码。



假设tomcat中有一个应用叫test,其中有一个servlet,其配置如下:

    dispatcherservlet
    /dispatcherservlet

则访问该servlet的URL为action="/test/dispatcherservlet"。
因为配置中url-pattern的值为/dispatcherservlet,根据相对路径为/test,则得出其完整相对路径为/test/dispatcherservlet。
至于调用者位于何处,并不重要,因为调用的URL都是相同的。



<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script>
 function cg(obj){
 if(obj.email.value.length >5){
  alert("wrong");
  obj.email.focus();
  return false;
 }
 if(!(confirm("yes or no ?"))){
  return false;
 }
 return true;
 }
</script>
</HEAD>

<BODY>

<FORM METHOD=POST ACTION="cgcg.jsp" onsubmit="return cg(this)">
<input type=text name = email>
<input type=submit name=gogo>
</FORM>

<hr>

<a href="delme.jsp?id=2323" onclick="return(confirm('yes or no ?'))">del</a>

</BODY>
</HTML>




package test;

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

public class MyDate {

  public MyDate() {
  }

  public String getMyDate() {
    Date currTime = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String thisTime=new String(formatter.format(currTime));
    return thisTime;
  }

  public String getYear() {
    Calendar cd = Calendar.getInstance();
    String year = cd.get(Calendar.YEAR) + "";
    return year;
  }

  public static void main(String[] args) {
    MyDate myDate1 = new MyDate();
    System.out.println(myDate1.getMyDate());
    System.out.println(myDate1.getYear());
  }
}

运行结果如下:

2004-05-28 15:16:47
2004

说明:

1. new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")中的HH大写则表明需要24进制的小时,hh小写则得到12进制的小时.

2. Calendar得到的月比实际的小一月,所以取得后需要加1.




    有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,
数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到
ORACLE的需求,应用程序也要相应做一些修改。本人总结出以下几点注意事项,希望对大家有所帮助。

1. 自动增长的数据类型处理
    MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。
ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个
值赋于此字段。

    CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1  START  WITH  1
MAXVALUE  99999  CYCLE  NOCACHE;
    其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
    INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL

2. 单引号的处理
    MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串
前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

3.  翻页的SQL语句的处理
    MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;PHP里还可以用SEEK定位到结果
集的位置。
    ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能
用ROWNUM<100, 不能用ROWNUM>80。
    以下是经过分析后较好的两种ORACLE翻页SQL语句( ID是唯一关键字的字段名 ):
    语句一:
 SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT
 ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND
 NUMROW < 100 ) ORDER BY 条件3;
 
    语句二:
 SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM
TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

4. 长字符串的处理
    长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于
4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序
包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,
返回上次操作。

5.  日期字段的处理
    MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库
的系统时间为SYSDATE, 精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
年-月-日 24小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式, 可以参看
ORACLE DOC.
    日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

    日期字段的数学运算公式有很大的不同。
    MYSQL找到离当前时间7天用
 DATE_FIELD_NAME > SUBDATE((NOW(),INTERVAL 7 DAY)
  ORACLE找到离当前时间7天用
 DATE_FIELD_NAME >SYSDATE - 7;

6.  空字符的处理
    MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。
    按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判
断,如果为NULL或空字符,需要把它改成一个空格的字符串。

7. 字符串的模糊比较
   MYSQL里用  字段名 like '%字符串%'
   ORACLE里也可以用 字段名 like '%字符串%'  但这种方法不能使用索引, 速度不快
   用字符串比较函数  instr(字段名,'字符串')>0  会得到更精确的查找结果 

8. 程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

 




把地球的历史压缩为一年的话,那末,最初八个月,根本没有生物存在。接着两个月是原始生物的时代。哺乳动物则在十二月的第二星期才出现。至于人类,则是在十二月三十一日晚间十一点四十五分才在地球上出现的。人类有历史记载这段岁月,只是这一年的最后六十秒罢了。比起地球的历史,我们还能自夸多了不起。



刚才下载了一个永中OFFICE,一百多M,很快就下完了。

安装很EASY,然后运行,运行比较快,比前几个版本好多了,采用的是JDK14的JVM。

感受一:界面相当不错,与OFFICE XP有得一拼,比预想中要好,凡是有MS OFFICE使用经验的人对永中OFFICE的使用是不会陌生的,应该说从MS过渡到永中是很方便的,完全可以平滑过渡。

感觉二:兼容性不错,我用永中OFFICE随便打开几个DOC文档,字体和COLOR都与WORD中无异,图片也不错,当然问题也有,WORD中的页号被移到另一侧,永中提供的字体有缺陷,变粗后显示不是很美观。

感觉三:惊喜新功能,用永中OFFICE创建一个PPT文档,居然能存为PDF,惊喜!而且用POWERPOINT打开后,样式被MS OFFICE几乎完全兼容,不错!

感觉四:BUG也还是不少,可能是异常处理不到位,比如,当打印机不能连接时点击打印,系统会强制退出,我作为一名初用者都能发现好几处这样的中级BUG,说明质保还是不到位,望永中加大质保力度,否则将难以打入市场,国外市场尤为如此。

总的而言,我认为永中OFFICE至少能满足国内现有的办公要求,所有的政府机关、及绝大部分企事业单位完全可以用永中OFFICE代替MS OFFICE,当然是指正版用户。国外用户就不好说了,我了解不多。

另外,奉劝永中以金山为戒,一定要加强售后服务,不能做一锤子买卖!

能看到国人能做出这样棒的产品,我心里由衷的高兴,特别是在JAVA日渐势微和国内通用软件不景气的今天。

多一分支持,少一分漫骂,祝永中越走越好!

HolenChen
5/20