| Perfil de Yun无尽的探索FotosBlogListas | Ayuda |
|
|
26 noviembre MySQL Reference: 12.4.3. Statements That Cause an Implicit CommitEach of the following statements (and any synonyms for them) implicitly end a transaction, as if you had done a
Transactions cannot be nested. This is a consequence of the implicit Statements that cause an implicit commit cannot be used in an XA transaction while the transaction is in an 19 junio jQuery form提交时中文乱码 [转]关键字: ajax post 中文 乱码 在使用jsp开始时,一不小心就会出现中文乱码的情况。通常可以使用如下方法解决:
jQuery.each( a, function(){
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
});所以传给servlet的就是utf-8编码了,那么我们在过滤器中就必须使用utf-8进行转码。 对其中的过滤器做了下修正,在IE下和chrome下,request.getContentType()的值为"application/x-www-form-urlencoded",但是在firefox下,这个值为"application/x-www-form-urlencoded; charset=UTF-8",不是很明白ff为什么会是这个值。 filter代码如下:
package com.ajax.demo.action;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AjaxPostFilter implements Filter {
private static final String IE_CONTENT_TYPE = "application/x-www-form-urlencoded";
private static final String FF_AJAX_CONTENT_TYPE = "application/x-www-form-urlencoded; charset=UTF-8";
private static final String XMLHTTP_REQUEST = "XMLHttpRequest";
private static final String AJAX_CHARACTER_ENCODING_UTF8 = "UTF-8";
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestedWith = request.getHeader("x-requested-with");
String type = request.getContentType();
if (XMLHTTP_REQUEST.equals(requestedWith)&& (FF_AJAX_CONTENT_TYPE.equals(type)
||IE_CONTENT_TYPE.equals(type))) {
request.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);
response.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);
// request.getParameterMap();
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml配置,我用的是struts
<filter> <filter-name>ajaxEncodeFilter</filter-name> <filter-class>com.ajax.demo.action.AjaxPostFilter</filter-class> </filter> <filter-mapping> <filter-name>ajaxEncodeFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>ajaxEncodeFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> 这个filter应该在你的EncodeFilter之后,RoyMax说要在之前,我试了下是不行的。 经过这样设置之后,jsp使用gbk采用ajax提交就不会存在中文乱码了。 在使用chrome进行测试时,还发现chrome的一个奇怪问题,对于返回的结果,使用jquery.ajax处理
success:function showResponse(responseText, statusText) {
//这里name为input text id,如果"aa"在前,那么name的值会改为aa+返回的结果
$('#name').val("aa"+responseText);
//如果改成$('#name').val(responseText+"aa"),那么name的值仍然是//responseText,“aa”没有加到后面去,不知道是什么原因参考:http://jasin2008.javaeye.com/blog/312854 14 noviembre Linux下修改网卡IP和网关修改ifcfg-eth0文件内容: [root@yourmachine ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 修改resolv.conf: [root@yourmachine ~]# vi /etc/resolv.conf nameserver 10.130.1.1 重新启动网络配置 12 septiembre Linux下安装Apache httpd + Subversion服务配置先决条件为了让你的版本库使用HTTP网络,你基本上需要两个包里的四个部分。你需要Apache httpd2.0和包括的mod_dav DAV模块,Subversion和与之一同分发的mod_dav_svn文件系统提供者模块,如果你有了这些组件,网络化你的版本库将非常简单,如:
你可以通过从源代码编译httpd和Subversion来完成前两个项目,也可以通过你的系统上的已经编译好的二进制包来安装。最新的使用Apache HTTP的Subversion的编译方法和Apache的配置方式可以看Subversion源代码树根目录的 基本的 Apache 配置一旦你安装了必须的组件,剩下的工作就是在 LoadModule dav_svn_module modules/mod_dav_svn.so 注意,如果mod_dav是作为共享对象编译(而不是静态链接到httpd程序),你需要为它使用 LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so 基本HTTP认证最简单的客户端认证方式是通过HTTP基本认证机制,简单的使用用户名和密码来验证一个用户所自称的身份,Apache提供了一个htpasswd工具来管理可接受的用户名和密码,这些就是你希望赋予Subversion特别权限的用户,让我们给Sally和Harry赋予提交权限,首先,我们需要添加他们到密码文件。 $ ### First time: use -c to create the file $ ### Use -m to use MD5 encryption of the password, which is more secure $ htpasswd -cm /etc/svn-auth-file harry New password: ***** Re-type new password: ***** Adding password for user harry $ htpasswd -m /etc/svn-auth-file sally New password: ******* Re-type new password: ******* Adding password for user sally $ 下一步,你需要在 添加完这三个指示,你的 <Location /svn> DAV svn SVNParentPath /usr/local/svn AuthType Basic AuthName "Subversion repository" AuthUserFile /etc/svn-auth-file </Location> 这个 <Location /svn> DAV svn SVNParentPath /usr/local/svn AuthType Basic AuthName "Subversion repository" AuthUserFile /etc/svn-auth-file Require valid-user </Location> 授权选项此刻,你已经配置了认证,但是没有配置授权,Apache可以要求用户认证并且确定身份,但是并没有说明这个身份的怎样允许和限制,这个部分描述了两种控制访问版本库的策略。 整体访问控制最简单的访问控制形式是授权特定用户为只读版本库访问或者是读/写访问版本库。 你可以通过在 <Location /svn> DAV svn SVNParentPath /usr/local/svn # how to authenticate a user AuthType Basic AuthName "Subversion repository" AuthUserFile /path/to/users/file # only authenticated users may access the repository Require valid-user </Location> 有时候,你不需要这样严密,举个例子,Subversion自己在http://svn.collab.net/repos/svn的源代码允许全世界的人执行版本库的只读操作(例如检出我们的工作拷贝和使用浏览器浏览版本库),但是限定只有认证用户可以执行写操作。为了执行特定的限制,你可以使用 在 <Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /path/to/users/file
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
这里只是一些简单的例子,想看关于Apache访问控制 每目录访问控制也可以使用Apache的httpd模块mod_authz_svn更加细致的设置访问权限,这个模块收集客户端传递过来的不同的晦涩的URL信息,询问mod_dav_svn来解码,然后根据在配置文件定义的访问政策来裁决请求。 如果你从源代码创建Subversion,mod_authz_svn会自动附加到mod_dav_svn,许多二进制分发版本也会自动安装,为了验证它是安装正确,确定它是在 LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 为了激活这个模块,你需要配置你的 Apache非常的灵活,你可以从三种模式里选择一种来配置你的区块,作为开始,你选择一种基本的配置模式。(下面的例子非常简单;见Apache自己的文档中的认证和授权选项来查看更多的细节。) 最简单的区块是允许任何人可以访问,在这个场景里,Apache决不会发送认证请求,所有的用户作为“匿名”对待。 例 6.1. 匿名访问的配置实例。 <Location /repos>
DAV svn
SVNParentPath /usr/local/svn
# our access control policy
AuthzSVNAccessFile /path/to/access/file
</Location>
在另一个极端,你可以配置为拒绝所有人的认证,所有客户端必须提供证明自己身份的证书,你通过 例 6.2. 一个认证访问的配置实例。 <Location /repos> DAV svn SVNParentPath /usr/local/svn # our access control policy AuthzSVNAccessFile /path/to/access/file # only authenticated users may access the repository Require valid-user # how to authenticate a user AuthType Basic AuthName "Subversion repository" AuthUserFile /path/to/users/file </Location> Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_svn模块,然后添加 当你的服务器知道去查找规则文件时,就是需要定义规则的时候了。 访问文件的语法与svnserve.conf和运行中配置文件非常相似,以( 具体一点:这个小节的名称是 [calc:/branches/calc/bug-142] harry = rw sally = r 在第一个例子里,用户 当然,访问控制是父目录传递给子目录的,这意味着我们可以为Sally指定一个子目录的不同访问策略: [calc:/branches/calc/bug-142] harry = rw sally = r # give sally write access only to the 'testing' subdir [calc:/branches/calc/bug-142/testing] sally = rw 现在Sally可以读取分支的 也可以通过继承规则明确的的拒绝某人的访问,只需要设置用户名参数为空: [calc:/branches/calc/bug-142] harry = rw sally = r [calc:/branches/calc/bug-142/secret] harry = 在这个例子里,Harry对 需要记住的是最详细的的路径会被匹配,服务器首先找到匹配自己的目录,然后父目录,然后父目录的父目录,就这样继续下去,更具体的路径控制会覆盖所有继承下来的访问控制。 缺省情况下,没有人对版本库有任何访问,这意味着如果你已经从一个空文件开始,你会希望给所有用户对版本库根目录具备读权限,你可以使用星号( [/] * = r 这是一个普通的设置;注意在小节名中没有提到版本库名称,这让所有版本库对所有的用户可读。当所有用户对版本库有了读权利,你可以赋予特定用户对特定子目录的 星号( 访问文件也允许你定义一组的用户,很像Unix的 [groups] calc-developers = harry, sally, joe paint-developers = frank, sally, jane everyone = harry, sally, joe, frank, sally, jane 组可以被赋予通用户一样的访问权限,使用“at”( [calc:/projects/calc] @calc-developers = rw [paint:/projects/paint] @paint-developers = rw jane = r 组中也可以定义为包含其它的组: [groups] calc-developers = harry, sally, joe paint-developers = frank, sally, jane everyone = @calc-developers, @paint-developers 参考:02 septiembre MySQL优化实例在Apache, PHP, MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数。 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化;二是MySQL自身(my.cnf)的优化。 (1) 服务器硬件对MySQL性能的影响 a) 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快; 抛弃传统的硬盘,使用速度更快的闪存式存储设备。经过Discuz!公司技术工程的测试,使用闪存式存储设备可比传统硬盘速度高出6-10倍左右。 b) CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU。 c) 物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。 (2) MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。 由于my.cnf文件的优化设置是与服务器硬件配置息息相关的,因而我们指定一个假想的服务器硬件环境: CPU: 2颗Intel Xeon 2.4GHz 内存: 4GB DDR 硬盘: SCSI 73GB 下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明: # vi /etc/my.cnf 以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。 [mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking # 避免MySQL的外部锁定,减少出错几率增强稳定性。 skip-name-resolve 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求! back_log = 384 指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。 back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。 key_buffer_size = 256M # key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。 查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。 read_buffer_size = 4M 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享! join_buffer_size = 8M 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享! myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察: # > SHOW VARIABLES LIKE '%query_cache%'; # > SHOW STATUS LIKE 'Qcache%'; # 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况; 如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。 tmp_table_size = 256M
max_connections = 768
指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。 max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。 thread_concurrency = 8 该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2 = 8 skip-networking 开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
参考:http://kb.discuz.net/index.php?title=MySQL%E4%BC%98%E5%8C%96%E5%AE%9E%E4%BE%8B 21 julio UserType for persisting a Typesafe Enumeration with a VARCHAR column [转]Use this Typesafe Enumeration class in your domain model as a simple property type (e.g. of the Comment class in a forum): public class Rating implements Serializable {
private String name;
public static final Rating EXCELLENT = new Rating("Excellent");
public static final Rating OK = new Rating("OK");
public static final Rating LOW = new Rating("Low");
private static final Map INSTANCES = new HashMap();
static {
INSTANCES.put(EXCELLENT.toString(), EXCELLENT);
INSTANCES.put(OK.toString(), OK);
INSTANCES.put(LOW.toString(), LOW);
}
private Rating(String name) {
this.name=name;
}
public String toString() {
return name;
}
private Object readResolve() {
return getInstance(name);
}
public static Rating getInstance(String name) {
return (Rating)INSTANCES.get(name);
}
}
Next, write the Hibernate custom mapping type: public class RatingUserType implements UserType {
private static final int[] SQL_TYPES = {Types.VARCHAR};
public int[] sqlTypes() { return SQL_TYPES; }
public Class returnedClass() { return Rating.class; }
public boolean equals(Object x, Object y) { return x == y; }
public Object deepCopy(Object value) { return value; }
public boolean isMutable() { return false; }
public Object nullSafeGet(ResultSet resultSet,
String[] names,
Object owner)
throws HibernateException, SQLException {
String name = resultSet.getString(names[0]);
return resultSet.wasNull() ? null : Rating.getInstance(name);
}
public void nullSafeSet(PreparedStatement statement,
Object value,
int index)
throws HibernateException, SQLException {
if (value == null) {
statement.setNull(index, Types.VARCHAR);
} else {
statement.setString(index, value.toString());
}
}
}
Finally, in your mapping files, bind it all together: <hibernate-mapping package="org.hibernate.auction.model">
<class name="Comment"
table="COMMENTS"
lazy="true">
<!-- Common id property. -->
<id name="id"
type="long"
column="COMMENT_ID"
unsaved-value="null">
<generator class="native"/>
</id>
<!-- Simple property. -->
<property
name="rating"
column="RATING"
type="org.hibernate.auction.persistence.RatingUserType"
not-null="true"
update="false"/>
...
</class>
</hibernate-mapping>
You may also use your Rating enumerated type in Hibernate queries: Query q = session.createQuery("from Comment c where c.rating = :rating");
q.setParameter("rating",
Rating.LOW,
Hibernate.custom(RatingUserType.class));
This is all there is to know about it. You may enhance this strategy with a generic UserType implementation, that knows how to persist different Typesafe Enumerations, this is described here. The examples and domain model you have just seen can be found in Hibernate in Action. Christian Reference: 1. http://www.hibernate.org/172.html 枚举类型的映射和表示 [转]在项目中常遇到用数字表示一种意思的字段,例如:type ,1 表示正常状态,0表示冻结状态;这是一类典型的问题,即枚举类型的映射和表示。在Hibernate2.1版本中提供了enum的接口类型来处理这类问题,参考这个讨论: http://forum.javaeye.com/viewtopic.php?t=8114&postdays=0&postorder=asc&highlight=enum&start=0 但是在Hibernate3中取消了enum类型的支持,Hibernate官方推荐使用UserType接口。不过使用UserType接口实际上会比较复杂,下面我将使用一个简单的案例来讲解使用UserType接口来解决这类问题的办法:
package com.javaeye.simple.domain; import java.io.Serializable; public class UserTitle implements Serializable { private int title; public static final UserTitle EMPLOYEE = new UserTitle(0); public static final UserTitle MANAGER = new UserTitle(1); public static final UserTitle DIRECTOR = new UserTitle(2); public static final UserTitle CEO = new UserTitle(3); private UserTitle(int title) { public int toInt() { public static UserTitle fromInt(int title) { public String toString() { } 注意,我们需要一个UserTitleType的类,实现UserType接口,定义一个User对象的UserTitle属性是如何向数据库持久化的: package com.javaeye.simple.domain; import java.io.Serializable; import org.hibernate.HibernateException; public class UserTitleType implements UserType { public int[] sqlTypes() { public Class returnedClass() { public boolean equals(Object x, Object y) throws HibernateException { public int hashCode(Object x) throws HibernateException { public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException { public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { public Object deepCopy(Object value) throws HibernateException { public boolean isMutable() { public Serializable disassemble(Object value) throws HibernateException { public Object assemble(Serializable cached, Object owner) throws HibernateException { public Object replace(Object original, Object target, Object owner) throws HibernateException { } 注意nullSafeGet和nullSafeSet方法的代码,是如何实现UserTitle的字符串值和数据库中保存数字进行转换的。 <?xml version="1.0"?> <hibernate-mapping package="com.javaeye.simple.domain"> <class name="User"> 指明title属性是用户自定义的某类型。 在Java程序中指定user的title属性:
18 julio 深树1. deeptree.jsp中定义css为deeptree.css,并定义<div id="deeptree" class="deeptree" CfgXMLSrc="deeptreeconfig.xml"> 参考:1. Deeptree下载 17 julio Keycode对照表
应用:1.限制输入数字 <input style="ime-mode : disabled" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"> 参考:1. Keycode对照表 09 julio SSL Configuration HOW-TO
Reference: 04 julio eclipse内置resin的方法此配置适用于Resin2.x和Resin3.x版本。运行时需要在每个project目录下放置一个resin.conf文件,由于Resin2.x和Resin3.x版本的配置文件不同,所以需要两个文件,resin.conf文件用于启动resin2.x,resin30.conf用于启动resin3.x。 以下说明以配置Resin2.1.16版本为例,具体步骤如下: 29 mayo 修改Oracle9i中XDB的http和ftp服务端口安装Oracle 9i,其安装缺省包含了XDB。在启动数据库后,Oracle XDB的http服务将会自动占用了8080端口,使用下面方法修改XDB的http和ftp服务端口: 1.使用dbms_xdb包修改端口设置 使用sys登录sqlplus sqlplus sys/syspassword as sysdba 执行如下的脚本: ============================ -- Change the HTTP/WEBDAV port from 8080 to 8081 call dbms_xdb.cfg_update(updateXML( dbms_xdb.cfg_get() , '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()' , 8081)) / -- Change the FTP port from 2100 to 2111 call dbms_xdb.cfg_update(updateXML( dbms_xdb.cfg_get() , '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()' , 2111)) / COMMIT; EXEC dbms_xdb.cfg_refresh; 参考 20 noviembre Hierarchical QueriesCONNECT BY Example The following hierarchical query uses the SELECT employee_id, last_name, manager_id FROM employees CONNECT BY PRIOR employee_id = manager_id;
START WITH Examples The next example adds a SELECT last_name, employee_id, manager_id, LEVEL
FROM employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;15 agosto Prototype JavaScript Framework Review (Cont'd)String.prototype 的扩展: strip: function() { Introduction to Ajax 16 julio 对对红随机分组的小程序<html> 20 junio 编写单点登录(SSO)服务一. 项目中涉及到编写单点登录(SSO)服务。主要涉及两个场景:
二、相关的活动图:
三、参考
13 junio 理解ORACLE数据库字符集 [转]耿立宏 一.引言 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。本文通过以下几个方面阐述,对oracle字符集做简要分析 二.字符集基本知识 2.1字符集 2.2字符编码方案 2.3 字符集超级 2.4 数据库字符集(oracle服务器端字符集) 2.5 客户端字符集(NLS_LANG参数) 三.导入/导出与字符集转换 3.1 EXP/IMP EXP
IMP
四个字符集是 3.2导出的转换过程 3.3导入的转换过程 四.乱码问题 oracle在数据存储、迁移过程中经常发生字符乱码问题,归根到底是由于字符集使用不当引起。下面以使用客户端sqlplus向数据库插入数据和导入/导出(EXP/IMP)过程为例,说明乱码产生的原因。 4.1使用客户端sqlplus向数据库存储数据 4.2发生乱码原因 4.3导入/导出过程出现乱码原因 五.单字节编码存储中文问题 由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了,并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。 六.结束语 为了避免在数据库迁移过程中由于字符集不同导致的数据损失,oracle提供了字符集扫描工具(character set scanner),通过这个工具我们可以测试在数据迁移过程中由于字符集转换可能带来的问题,然后根据测试结果,确定数据迁移过程中最佳字符集解决方案。 参考文献 ******************************************************************************** 原文:http://www.csdb.cn/viewPaper.jsp?tipid=1148536745101 关于Unicode参考:http://fangyuncn.spaces.live.com/blog/cns!29C7193178944F5A!176.entry 28 mayo CVSNT Server Configuration [转]# title : CVSNT SERVER Configuration
1.${CVSNT},表示,CVSNT的安装路径
*/ 安装 CVSNT-2.5.03.2151 注意: *********************** 1.Windows系统用户与CVSNT用户共存的混合验证方式: 即 windows 操作系统用户和 CVSNT 的 passwd 文件定义的用户都可以作为 CVSNT 的用户。 2.CVSNT用户单一验证方式: 只有 CVSNT passwd 文件定义的用户作为 CVSNT 的用户。 默认工作模式是混合验证方式,但是使用单一验证方式对用户的管理比较方便一点,因此下面的介绍,基于 CVSNT 用户单一验证方式。 *********************** 本文主要介绍以下几个文件:config,passwd,admin,group,checkoulist,fileattr.xml,cvswrappers *** config 文件 *** #Set this to `no" if pserver shouldn"t check system users/passwords SystemAuth: 定义验证方式,默认是 SystemAuth=yes ,即混合验证方式。 如果想要修改为 CVSNT 用户单一验证方式,修改为 SystemAuth=no *** passwd 文件 *** 该文件中定义了 CVSNT 用户的用户名、密码、操作系统用户别名; 格式: 密码是CVS使用UNIX标准加密函数对密码进行加密后的结果; 附: *** admin 文件 *** 文件中定义了 CVSNT 服务器的管理员列表 格式: 该文件中的用户同样必须出现在 passwd 文件中; 实际上,cvsnt server 把这个文件当作一个特殊的 group 来对待的。 *** group 文件 *** 这个文件用来定义组,我们可以将同样性质的用户归入一个组,然后用给用户赋权限的方式给组赋权限,这样,一个组的用户就会具有同样的权限。 格式: 多个用户名之间用空格来进行分割;
# The "checkoutlist" file is used to support additional version controlled 该文件用来支持附加的版本控制操作,在 CVSROOT 中添加的文件,要在此文件中声明. *** fileattr.xml 文件 *** 在每一个 Repository 建立之后,都会在 Repository 的 ROOT 中建立一个名字叫做 CVS 目录,该目录中只有一个文件 fileattr.xml;
Before using CVS, it is recommended to update the cvswrappers file. The cvswrapper file contains file extensions which determines which file should be stored as binary files in the CVS Repository. To update this file do the following: Add the following file extensions in the cvswrappers file, e.g.: *.cab -k 'b'
*** 实验目的 *** 1.修改 CVSNT 服务器验证方式为 CVSNT 用户单一验证方式; *** 完成效果 *** cvsadmin 能设置 CVSNT 服务器的配置,并且能对所有的 Repository 拥有全部权限; /* */ *** 开始配置 *** /* */ 1 *** 进入命令行,建立一个临时目录,用来放置 checkout 出来的 Repository ,修改完成之后,再提交到 CVSNT server 上去。 d:\ md 00 # 在 d: 建立一个临时目录,进入 2 *** 登陆 CVSNT server d:\00\set cvsroot=:pserver:administrator:123456@localhost/cvsroot /* 3 *** 列表 4 *** checkout CVSNTROOT 到 d:\00\ 5 *** 添加用户信息 d:\00\cvs passwd -r administrator -a cvsadmin -r 是管理的操作系统用户的别名 -a 添加用户 添加用户的时候,会提示输入密码。(本次实验,用户名和密码取相同)。 建立的 passwd 文件内容应如下内容: cvsadmin:oVaaG5hcPSOQY:administrator The cvs passwd command can be used to add or delete new users. Only an administrator can do this. 参考上文 passwd 文件说明。 6 *** 定义 cvsadmin 为 CVSNT server 管理员 cvsadmin 即定义了 cvsadmin 为 CVSNT Server 管理员; 7 *** 注册文件 admin 到 checkoutlist 文件 打开 d:\00\cvsroot 中 checkoutlist 文件,加入这一句: admin err msg by jh 注意 admin 前后的空格,具体的格式信息,参照前文 checkoutlist 文件 说明部分; 8 *** 定义 group 组 在 d:\00\cvsroot 建立文件名为 group 的文件(注意,无扩展名) #testall :hava all permissions testaall,testball 有完全权限;
10 *** 修改验证方式 修改 d:\00\cvsroot 下面的 config 文件 即修改验证方式为 CVSNT用户单一验证方式。
11.1 进入 d:\00\cvsroot 11.2 d:\00\cvsroot\cvs add admin group 11.3 d:\00\cvsroot\cvs commit CVS: ---------------------------------------------------------------------- 即提示修改了 checkoutlist config cvswrappers 三个文件,添加了 admin group 两个文件; /* 此时,如果再运行命令 cvs ls ,则会提示该用户不存在。 以 cvsadmin 用户登陆: 进入临时目录 d:\00\ 就可以看到 CVSROOT 下面的所有 Repository 了。 测试其他的用户为非管理员,即看不到 CVSROOT: 空白,即不能看到 CVSROOT。 前文提到过,CVSNT ROOT 默认是只有管理员拥有其所有权限,它是靠 fileattr.xml 文件这一句 12 *** 至此,对 CVSRT Server 的 CVSROOT 的修改已经完成,为了安全起见,删除临时 checkout 出来的 CVSROOT 13 *** 以 test1 用户身份 import 一个 testa 工程,做如下权限限制: 关闭窗口,建立临时目录 d:/00/test/,在 test 中放入几个文件,准备 import 到 CVSNT Server 上面去。 把 d:/00/test/目录中的所有文件 import 进入 CVSNT Server,并且命名为 testa: -m 为导入时的日志信息 设置权限: /* 关于权限的说明: CVSNT 2.5 对 Repository 的访问控制设置,是使用命令 chacl,chown 来进行的; */ 13.1 一个新的 Repository 创建之后,默认是对所有人开放所有权限的。一个新建立的 Repository 的 fileattr.xml 文件如下: <?xml version="1.0" encoding="UTF-8"?>
CVSNT 2.5 权限管理的原则是:如果不显示的指出否定权限,则赋予肯定权限。(这一点个人觉得非常不方便,安全是第一位的。) 13.2 如果要把默认的权限关闭,要用 chacl 命令 执行完毕之后,应该是这个样子: <?xml version="1.0" encoding="UTF-8"?> modified_by,modified_date 是注释信息; 13.3 开通管理员的所有权限 <?xml version="1.0" encoding="UTF-8"?> 这样,testaall 组中的用户拥有所有权限了,其他的用户无任何权限; 13.4 添加 testar 组用户只读权限
对于 CVSNTROOT Repository 的说明 刚建立 CVSNTROOT 的时候 fileattr.xml 是这样的(CVSNT 自动建立的) <?xml version="1.0" encoding="UTF-8"?>
实际上,我们可以直接用编辑工具按照格式更改 fileattr.xml 文件,而不用 chacl 命令,效果是一样的。
*/
建立以后,我们会发现: 15 *** 完成,可以测试实验的结果了 ******** 1. 基本概念介绍 CVS是很早的时候在Unix下发展起来的,它使用的术语比较特殊,需要先熟悉和理解,这是使用CVS的第一步。
3. cvs 命令 命令简写
******* 一般是无法链接到 CVSNT server ,是通讯受到阻止的原因。
*********** 1. 其他的登陆协议的登陆方法 2. 访问权限控制,如何让 owner 拥有其所在 Repository 的 fileattr.xml 修改权限? 21 mayo Project Summary (To be continued)1. VSS Plugin for Eclipse
2. Web Calendar: PopCalXP9_Lite
<input type="text" name="startTime" value="<%=startTime%>" readonly size="16" onclick="if(self.gfPop)gfPop.fPopCalendar(this);return false;" /> <iframe width=174 height=189 name="gToday:normal:agenda.js:gfPop:plugins_time.js" id="gToday:normal:agenda.js:gfPop:plugins_time.js" src="js/PopCalXP/ipopeng.htm" scrolling="no" frameborder="0" style="visibility:visible; z-index:999; position:absolute; left:-500px; top:-500px;"> </iframe> 3. Struts使用
3.1 一个Module运行时配置:controller
3.2 使用PlugIn
4. 项目质量要求 4.1 页面:
5. 遇到的问题及解决: 5.1 AJAX中文问题: 5.2 定时器 5.3 两个日期之间的天数 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|