25 三月 2008

I18N格式标签库总结

I18N标签库主要进行国际格式化支持,此功能可以对一个特定的语言请求作出合适的响应。如果要在JSP页面中使用I18N标签库,如下:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

I18N标签库主要包含:国际化、消息和数字日期格式化。

一、国际化(<fmt:setLocale>和<fmt:requestEncoding>)

  1. <fmt:setLocale>:用来设定用户的语言区域。
  2. <fmt:requestEncoding>:用来设定字符串编码,功能和ServletRequest.setCharacterEncoding()相同。

二、消息(<fmt:message>、<fmt:param>、<fmt:bundle>和<fmt:setBundle>)

  1. <fmt:message>:从指定的资源中把特定关键字中的值抓取出来。
  2. <fmt:param>:从数据源抓出内容时,进行动态参数的设定。
  3. <fmt:bundle>:用来设定本体内容的数据来源。
  4. <fmt:setBundle>:用来设定默认的数据来源,也可以将其设定到属性范围中。

三、数字、日期格式化(<fmt:formatNumber>、<fmt:parseNumber>、<fmt:formatDate>、
<fmt:parseDate>、<fmt:setTimeZone>和<fmt:timeZone>)

  1. <fmt:formatNumber>:根据设定的区域将数字改为适当的形式。
  2. <fmt:parseNumber>:将字符串类型的数字、货币或百分比,转化为梳子类型。
  3. <fmt:formatDate>:用来格式化日期和时间。
  4. <fmt:parseDate>:将字符串类型的时间或日期都转换为日期时间类型。
  5. <fmt:setTimeZone>:用来设定默认时区或是将时区存储至属性范围中。
  6. <fmt:timeZone>:设定暂时时区。

24 三月 2008

pageContext、request、session和application的区别

我们经常会将pageContext、request、session和application混为一谈,因为它们都可以通过setAttribute()和getAttribute()来设定或读取属性。但它们之间是有别的,它们最大的区别在于使用范围。

pageContext对象的范围只适用于当前页面范围,即超过这个页面就不能够使用了。所以使用pageContext对象向其它页面传递参数是不可能的。

request对象的范围是指在一JSP网页发出请求到另一个JSP网页之间,随后这个属性就失效。

session的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。

application的范围在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。

22 三月 2008

SQL标签库总结

SQL标签库提供了访问关系数据库的能力,提供了增、删、改、查以及事务处理功能。在JSP页面中使用SQL标签库,如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

SQL标签库包含<sql:setDataSource>、<sql:query>、<sql:param>、<sql:dateParam>、<sql:update>、<sql:transaction>

  1. <sql:setDataSource>用于设置数据源。

  2. <sql:query>用于对数据库进行查询。

  3. <sql:param>用于设置SQL语句中标记为(?)的参数值,类似于PreparedStatement中的setXXX()方法的作用。

  4. <sql:dateParam>用java.util.Date类型的值设置SQL语句中标签为(?)的参数。

  5. <sql:update>用于执行增、删、改操作,还可以执行DDL语句。

  6. <sql:transaction>用于为<sql:query>和<sql:update>子标签建立事务处理上下文。

20 三月 2008

Core标签库总结

Core标签库作用:主要包含了一般用途的标签、条件标签、迭代标签和URL相关的标签。在JSP中使用Core标签库,使用taglib指令如下:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

一、表达式操作(<c:out>、<c:set>、<c:remove>和<c:catch>)

  1. <c:out>:用于计算一个表达式并将结果输出到JspWriter对象。它的功能类似于JSP中的表达式<%=expression%>,或者EL表达式${el-expression}。
  2. <c:set>:用来将变量存储至JSP范围中或是JavaBean的属性中。
  3. <c:remove>:用来移除变量。
  4. <c:catch>:用来处理错误异常,并且将异常信息存储起来。

二、流程控制(<c:if>、<c:chooise>、<c:when>和<c:otherwise>)

  1. <c:if>:功能类似于程序语言中的if语句。
  2. <c:choose>:只用作<c:when>和<c:otherwise>的父标签。
  3. <c:when>:类似于程序语言中的when。
  4. <c:otherwise>:当所有<c:when>的条件没有成立时,则执行这个标签的本体内容。

三、迭代操作<c:forEach>和<c:forTokens>

  1. <c:forEach>:循环控制,可以将集合Collection中的成员循序访问一遍。当条件符合时,会持续重复执行本体内容。支持Java中的集合框架。
  2. <c:forTokens>:用来浏览字符串中所有成员,其成员有自定义符合所分割。

四、URL操作<c:import>、<c:redirect>和<c:url>

  1. <c:import>:用来导入其它文件或者JSP页面。和<jsp:include>的区别在于后者只能包含和自己同一个web应用程序下的文件;前者可以包含不同web应用程序下的文件。
  2. <c:redirect>:将客户的请求从一个JSP网页导向其它文件。
  3. <c:url>用来产生一个URL。

Powered by Zoundry Raven

16 三月 2008

类和接口

从网上看到的

把接口比喻成寄生虫。寄生虫不能独自存活。接口也是,必须要靠类来实现它。

如果再把类看成人。每个人只能有一个父亲(后爹不提),但是身上可以有多个寄生虫。

interface InterfaceA{}
interface InterfaceB{}
interface InterfaceC{}

class ClassA{}
class ClassB{}
class ClassC{}

//有一个父亲,身上没有寄生虫。是正确的
class SubClassA extends ClassA {}

//有一个父亲,寄生多个寄生虫。正确的
class SubClassA extends ClassA implements InterfaceA,InterfaceB,InterfaceC{}

//有一个以上的父亲,身上没有寄生虫。错误的
class SubClassA extends ClassA,ClassB,ClassC{}

//有一个以上的父亲,身上有很多寄生虫。错误的
class SubClassA extends ClassA,ClassB,ClassC implements InterfaceA,InterfaceB,InterfaceC{}

09 三月 2008

实现SimpleTag接口的标签处理器的生命周期

 


SimpleTag


1、容器在创建标签处理器实例后,调用setJspContext()方法设置JspContext。如果该标签没有被嵌套,则不会调用setParent()方法;如果被嵌套,则调用setParent()方法设置它的父标签。这和传统标签处理过程不一样,传统标签处理中,无论标签是否被嵌套,setParent()方法都会被调用。


2、调用标签处理器setXXX()方法,设置标签的属性。如果没有定义属性,则没有该步骤。


3、如果存在标签体,容器则调用setJspBody()方法,设置标签体。如果标签体不存在,则没有该步骤。


4、容器调用doTag()方法,这个方法中,完成标签处理器的主要逻辑。


简单标签的标签处理器实例不会被缓存而重复使用,每当遇到标签时,容器就会创建一个新的标签处理器的实例。

Microsoft SQL Server 2005 安装失败处理

Microsoft SQL Server 2005 安装失败处理


作者:郑佐

日期:2007-5-29

前段时间笔者在Microsoft Virtual PC 2007和一台笔记本电脑上安装MSDN订阅下载的


SQL Server 2005 企业版时出现问题。


安装环境为windows Server 2003 企业版 + sp1,另外一个系统是带sp2的,


安装用户使用超级管理员(Administrator)。


在安装"Integration Services"步骤时出现安装错误,提示"错误: -2146233087"。


看上去是安装问题,不过解决的过程还是值得一番思考。


通过本文笔者认为可为碰到类似问题的朋友提供一种解决思路,提高查找问题技巧,


故记录到 BLOG


安装过程详细错误记录如下:


标题: Microsoft SQL Server 2005 安装程序


------------------------------


无法在 COM+ 目录中安装和配置程序集


C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll。


错误: -2146233087


错误消息: Unknown error 0x80131501


错误说明: 要执行此任务,您必须具有管理凭据。请与您的系统管理员联系以获得帮助。


有关帮助信息, 请单击


通过帮助信息的超链接页面,提示"需要为MS DTC服务配置 Network Service帐户运行",


不过我的MS DTC本来就是在Network Service帐户下运行。


通过百度和Google搜索了一下,有不少朋友碰到类似错误消息,不过没有得到好的解决方式,


只好自己寻找线索进行尝试。


可以肯定的是问题应该出现在访问权限,而这方面常见的问题一般都是对文件系统目录和系统


注册表的访问。



在微软的 客户帮助和支持网站 搜索SQL Server的相关安装信息。有一篇文章提到设置"C:\WINDOWS\Registration"的权限,确认该目录以及目录下的clb和 crmlog文件
有完全的读写权限,

再次安装SQL Server 2005在"Integration Services"步骤还是提示失败。在安装过程中
选择服务帐户时使用内置系统帐户或使用域用户帐户都一样。


看来问题没有这么简单,笔者在另外一个系统中安装时启用RegMon进行注册表操作监视,
过滤后只监视"msiexec.exe:484"进程,在报以上面提到的错误后保存监视日志到文件。


图(1)



通过监控日志查看失败的情况。由于没有仔细查找,在后来通过微软SQL Server组的技术支持
工程师才想到问题早应该解决。


以下是我事后再次查看RegMon Trace发现的问题故障点,通过下面的日志看出使用本机
Administrator访问注册表HKCR\ Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.
DataFileMessage项时被拒绝。

11305 32.35072327 msiexec.exe:484 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage


ACCESS DENIED NBCN-ZZ\Administrator


11306 32.36096954 msiexec.exe:484 QueryKey HKCU\Software\Classes SUCCESS


Name: \REGISTRY\USER\S-1-5-21-730333180-4162487032-3015738926-500_CLASSES



11307 32.36102295 msiexec.exe:484 OpenKey HKCU\Software\Classes\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.
DataFileMessage

NOT FOUND


11308 32.36108017 msiexec.exe:484 OpenKey HKCR SUCCESS


11309 32.36190796 msiexec.exe:484 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage


ACCESS DENIED NBCN-ZZ\Administrator


11310 32.36222076 msiexec.exe:484 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage


ACCESS DENIED NBCN-ZZ\Administrator


由于粗心结果又多做了很多工作,查看系统的"组件服务"配置是否有问题,但是没有发现什么异常。



在再次出现安装问题后,这次就直接点击"忽略"按钮继续安
装SQLServer的其他部分,安装结束后,提示安装成功完成。


运行"dcomcnfg",打开系统组件服务。展开控制台根目录->组件服务->计算机->我的电脑
->COM+应用程序节点,没有发现Microsoft.SqlServer.MSMQTask节点,可见该COM+应用
程序没有安装上。


再次运行SQL Server 2005安装程序进行添加删除安装,提示安装成功,在"组件服务"中看到"Microsoft.SqlServer.MSMQTask"。看来问题解决了,但是那时还不知道问题出在哪里。
卸载SQL Server 2005,发现"Microsoft.SqlServer.MSMQTask"并没有卸载,测试只安装
SQL Server 2005的Integration Services服务。结果安装失败,选择"中止"取消安装,再次
确认存在"Microsoft.SqlServer.MSMQTask"服务。


接下去笔者把安装过程中出现的错误发送给微软,请SQL Server 组的技术支持工程师帮助解决。
在工程师查找问题过程中,虽然许多检查点我都做过,不过他查找分析解决问题的思路清晰,
以下我列了大概几个步骤。

一.MSDTC运行帐户问题



确认MSDTC (Microsoft Distributed Transaction Coordinator)服务正在运行,并且其启动帐
户是NT AUTHORITY\Network Service"。按照以下步骤来检查:

1. 点击"开始"->"运行"->services.msc


2. 在服务列表中找到Distributed Transaction Coordinator,双击以编辑其属性



3. 在属性窗口切换至登录选项卡,确认其启动帐号为"NT AUTHORITY\Network Service"
(密码为空即可)

4. 启动DTC服务再尝试安装SQL Server 2005


结果:这个步骤我已经尝试过,不是这个问题。


二.分析SQL Server 2005安装日志



将C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\目录下所有的文件
(包括Summary.txt和Files子目录下的所有文件)发送给微软技术支持工程师进行分析。

结果:这个步骤我没有做过,不过微软工程师好像也没有发现线索。


三.COPY安装程序到硬盘安装尝试



建立 D:\SQLServer2005 文件夹, 创建以下两个子文件夹:Servers和Tools。Serviers
文件夹拷贝SQL Server2005的第一张安装盘,包含所有要安装主 SQL Server 2005 组件。
Tools文件夹拷贝SQL Server 2005的第二张盘,包含为 SQL Server 2005 联机丛书和工
具组件。运行D:\SQLServer2005\Servers 文件夹下的Setup.exe,启动 SQL Server 2005
安装程序。

结果:以上方式安装过程中还是碰到同样的问题。


四.重新安装 COM+应用程序


1. 从控制面板的"添加或删除程序"中,单击"添加/删除 Windows 组件"。



2 .在"Windows 组件向导"中,不对选择做任何更改,单击"下一步"。一直单击以完成向导,
然后再次运行 SQL Server 2005 安装程序。

结果:问题没有解决。


通过以上分析微软的工程师总结如下:



目前还不确定引起这个错误的原因,并且在安装日志中也没有找到更多的有用信息。可能引起
此类错误的原因有以下几种:

1. COM+ 的配置问题。


2. 帐号权限问题。



3. 有一些安装失败的Microsoft.SqlServer.MSMQTask.dll情况出现在测试版中,或者是由于未
完全删除的测试版组件而导致安装失败。

4. 除此之外还有一些类似的问题都是与64位操作系统或者Cluster环境有关。



我认为以上的一些原因可以排除,看来又是Live Meeting的时候了,和微软工程师约定时间联
机查找问题。

五.手工注册Microsoft.SqlServer.MSMQTask.dll


使用 regsvcs.exe 应用程序工具注册.NET服务


使用cmd执行过程如下:


C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>


regsvcs.exe "C:\Program Files\Microsoft SQL Server\90\DTS\


Tasks\Microsoft.SqlServer.MSMQTask.dll"


Microsoft(R) .NET Framework 服务安装实用工具版本 2.0.50727.42


Copyright (c) Microsoft Corporation. All rights reserved.


出现下列安装错误:


1: 要执行此任务,您必须具有管理凭据。请与您的系统管理员联系以获得帮助。


2: 注册程序集"Microsoft.SqlServer.MSMQTask, Version=9.0.242.0, Culture=neutral,


PublicKeyToken=89845dcd8080cc91 "失败。


3: 对注册表项"HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.


DataFileMessage "的访问被拒绝。



分析:这看起来是由于当前Windows用户在该注册表键值上没有足够的权限造成的。经过研究类似案例,
在某些情况下,即使是Administrators组的用户也可能出现对这些键值没有Full Control的情况。需要确
认一下在这些注册表值上,Administrators组用户是否有Full Control。在注册表中右键点击注册表值->
选择权限来查看及改变该值上的权限设置。如果权限设置都正确的话,可以试着抓一个RegMon trace来
看到底是不是注册表键值的权限问题导致这个错误。

看来问题终于找到了。


六.监控注册表



1. 运行 RegMon 工具 ,通过菜单Options->Filter中设置Include list,把Regsvcs.exe加入
Include list中。

2. 执行regsvcs.exe "C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll"


3. 在Regsvcs.exe执行失败停止后,保存RegMon生成的log。


分析RegMon Trace。定位问题如下:


5484 17.98829079 RegSvcs.exe:3404 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask


ACCESS DENIED NBCN-ZZ\Administrator


5488 17.98927116 RegSvcs.exe:3404 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask


ACCESS DENIED NBCN-ZZ\Administrator


5489 17.98955727 RegSvcs.exe:3404 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask


ACCESS DENIED NBCN-ZZ\Administrator


6431 19.89454460 RegSvcs.exe:3404 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask


ACCESS DENIED NBCN-ZZ\Administrator


以上其实就是我一开始使用RegMon 时应该发现的问题,结果到现在才发现。


从这几条记录来看,问题是对注册表值HKCR\ Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask的权限问题。



而 RegSvcs进程在遇到这些权限问题之后,并没有马上终止,还有一些别的注册表活动。
我查看了注册表

HKEY_CLASSES_ROOT\ Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.



DataFileMessage 项的权限,Administrators组没有"完全控制"和"读取"权限,对其进行授权。
重新运行注册,结果又报另外的注册表项没有权限,对其进行添加,直到注册成功,以下是输出结果。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>


regsvcs.exe "C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\


Microsoft.SqlServer.MSMQTask.dll"


Microsoft(R) .NET Framework 服务安装实用工具版本 2.0.50727.42


Copyright (c) Microsoft Corporation. All rights reserved.


正在自动将"Microsoft.SqlServer.ManagedDTS, Version=9.0.242.0, Culture=neutral,


PublicKeyToken=89845dcd8080cc91 "导出为"C:\WINDOWS\assembly\GAC_MSIL\


Microsoft. SqlServer.ManagedDTS\9.0.242.0__89845dcd8080cc91\


Microsoft.SqlServer.ManagedDTS. tlb "。


警告: 程序集未声明 ApplicationAccessControl 属性。默认情况下启用应用程序安全性。


已安装的程序集:


程序集: C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.Sql


Server.MSMQTask.dll


应用程序: Microsoft.SqlServer.MSMQTask


TypeLib: C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.Sq


lServer.MSMQTask.tlb


C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>


修改授权的相关注册表项如下:


HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.


MessageQueueTask.MessageQueueTask


HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.


MessageQueueTask.EncryptionAlgorithmWrapper


HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.


MessageQueueTask.ServCompMQTask


HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.


MessageQueueTask.Formatter



再次运行"dcomcnfg",打开系统组件服务。展开控制台根目录->组件服务->计算机->我的电脑
->COM+应用程序节点,发现Microsoft.SqlServer.MSMQTask节点,可见该COM+服务已经安装上。

由于处理该问题不急,笔者和微软技术支持工程师断断续续就该问题差不多花了一个多星期。


Del.icio.us : ,

06 三月 2008

50多种网页设计技巧

1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table>
可用于table
2. <body onselectstart="return false">
取消选取、防止复制
3. onpaste="return false"
不准粘贴
4. oncopy="return false;" oncut="return false;"
防止复制
5. <link rel="shortcut icon" href="favicon.ico"> ie
地址栏前换成自己的图标
6. <link rel="bookmark" href="favicon.ico">
可以在收藏夹中显示出你的图标
7. <input style="ime-mode:disabled">
关闭输入法
8.
永远都会带着框架
<script language="javascript"><!--
if (window == top)top.location.href="frames.htm"; //frames.htm
为框架网页
// --></script>
9.
防止被人frame
<script language=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></script>
10.
网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>
11. <input type=button value=
查看网页源代码
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">

网上收集的。更多的可以从这里下载:下载资料1
下载资料2