昨天晚上一直想登录我的Blog,老报资料找不到,就估计整服务器来着,果然,今天一上来就发现系统更新了。
升级是好的,但发现输入时屏幕老闪,这个Bug一定要尽快改正。
Holen Bolg on Donews.net
昨天晚上一直想登录我的Blog,老报资料找不到,就估计整服务器来着,果然,今天一上来就发现系统更新了。
升级是好的,但发现输入时屏幕老闪,这个Bug一定要尽快改正。
准备 :
一个安装了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,其配置如下:
则访问该servlet的URL为action=”/test/dispatcherservlet”。
因为配置中url-pattern的值为/dispatcherservlet,根据相对路径为/test,则得出其完整相对路径为/test/dispatcherservlet。
至于调用者位于何处,并不重要,因为调用的URL都是相同的。
在JB9中用宋体(或别的字体)输入,再用记事本打开即可。比如:在JB9中输入“测试”,再用记事本打开,则显示“\u6D4B\u8BD5”,实际上,在JB9中输入的汉字,已被JB9强制转化为UNICODE编码。