2004年05月31日

昨天晚上一直想登录我的Blog,老报资料找不到,就估计整服务器来着,果然,今天一上来就发现系统更新了。

升级是好的,但发现输入时屏幕老闪,这个Bug一定要尽快改正。

2004年05月28日

准备 :
一个安装了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

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

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

 在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中。

关于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中实现。

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

    dispatcherservlet
    /dispatcherservlet

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

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