http://blog.sina.com.cn/dengxiaohua[订阅]
个人资料
分类
    内容读取中…
评论
读取中...
图片幻灯
音乐播放器
访客
读取中...
好友
读取中...
博文

以下是一份完整的struts-config.xml文件,配置元素的说明详见注释.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE struts-config PUBLIC
'-//Apache Software Foundation//DTD Struts Configuration 1.1//EN'
'http://jakarta.apache.org/struts/dtds/struts-config.dtd'>
<!-- struts-config.xml中的元素必须按照上述doc指令中的dtd文档定义顺序书写,本例即遵从了dtd定义顺序 -->
<!-- struts-config是整个xml的根元素,其他元素必须被包含其内 -->
<struts-config>
<!--
名称:data-sources
描述:data-sources元素定义了web App所需要使用的数据源
数量:最多一个
子元素:data-source
-->
<data-sources>
<!--
名称:data-source
描述:data-source元素定义了具体的数据源
数量:任意多个
属性:
@key:当需要配置多个数据源时,相当于数据源的名称,用来数据源彼此间进行区别
@type:可以使用的数据源实现的类,一般来自如下四个库
Poolman,开放源代码软件
Expresso,Jcorporate
JDBC Pool,开放源代码软件
DBCP,Jakarta
-->
<data-source key='firstOne' type='org.apache.commons.dbcp.BasicDataSource'>
<!--
名称:set-property
描述:用来设定数据源的属性
属性:
@autoCommit:是否自动提交 可选值:true/false
@description:数据源描述
@driverClass:数据源使用的类
@maxCount:最大数据源连接数
@minCount:最小数据源连接数
@user:数据库用户
@password:数据库密码
@url:数据库url
-->
<set-property property='autoCommit' value='true'/>
<set-property property='description' value='Hello!'/>
<set-property property='driverClass' value='com.mysql.jdbc.Driver'/>
<set-property property='maxCount' value='10'/>
<set-property property='minCount' value='2'/>
<set-property property='user' value='root'/>
<set-property property='password' value=''/>
<set-property property='url' value='jdbc:mysql://localhost:3306/helloAdmin'/>
</data-source>
</data-sources>

<!--
名称:form-beans
描述:用来配置多个ActionForm Bean
数量:最多一个
子元素:form-bean
-->
<form-beans>
<!--
名称:form-bean
描述:用来配置ActionForm Bean
数量:任意多个
子元素:form-property
属性:
@className:指定与form-bean元素相对应的配置类,一般默认使用org.apaceh.struts.config.FormBeanConfig,如果自定义,则必须继承 FormBeanConfig
@name:必备属性!为当前form-bean制定一个全局唯一的标识符,使得在整个Struts框架内,可以通过该标识符来引用这个ActionForm Bean。
@type:必备属性!指明实现当前ActionForm Bean的完整类名。
-->
<form-bean name='Hello' type='myPack.Hello'>
<!--
名称:form-property
描述:用来设定ActionForm Bean的属性
数量:根据实际需求而定,例如,ActionForm Bean对应的一个登陆Form中有两个文本框,name和password,ActionForm Bean中也有这两个字段,则此处编写两个form-property来设定属性
属性:
@className:指定与form-property相对应的配置类,默认是org.apache.struts.config.FormPropertyConfig,如果自定义,则必须继承FormPropertyConfig类
@name:所要设定的ActionForm Bean的属性名称
@type:所要设定的ActionForm Bean的属性值的类
@initial:当前属性的初值
-->
<form-property name='name' type='java.lang.String'/>
<form-property name='number' type='java.lang.Iteger' initial='18'/>
</form-bean>
</form-beans>

<!--
名称:global-exceptions
描述:处理异常
数量:最多一个
子元素:exception
-->
<global-exceptions>
<!--
名称:exception
描述:具体定义一个异常及其处理
数量:任意多个
属性:
@className:指定对应exception的配置类,默认为org.apache.struts.config.ExceptionConfig
@handler:指定异常处理类,默认为org.apache.struts.action.ExceptionHandler
@key:指定在Resource Bundle种描述该异常的消息key
@path:指定当发生异常时,进行转发的路径
@scope:指定ActionMessage实例存放的范围,默认为request,另外一个可选值是session
@type:必须要有!指定所需要处理异常类的名字。
@bundle:指定资源绑定
-->
<exception
key=''hello.error
path='/error.jsp'
scope='session'
type='hello.HandleError'/>
</global-exceptions>

<!--
名称:global-forwards
描述:定义全局转发
数量:最多一个
子元素:forward
-->
<global-forwards>
<!--
名称:forward
描述:定义一个具体的转发
数量:任意多个
属性:
@className:指定和forward元素对应的配置类,默认为org.apache.struts.action.ActionForward
@contextRelative:如果为true,则指明使用当前上下文,路径以“/”开头,默认为false
@name:必须配有!指明转发路径的唯一标识符
@path:必须配有!指明转发或者重定向的URI。必须以'/'开头。具体配置要与contextRelative相应。
@redirect:为true时,执行重定向操作,否则执行请求转发。默认为false
-->
<forward name='A' path='/a.jsp'/>
<forward name='B' path='/hello/b.do'/>
</global-forwards>


<!--
名称:action-mappings
描述:定义action集合
数量:最多一个
子元素:action
-->
<action-mappings>
<!--
名称:action
描述:定义了从特定的请求路径到相应的Action类的映射
数量:任意多个
子元素:exception,forward(二者均为局部量)
属性:
@attribute:制定与当前Action相关联的ActionForm Bean在request和session范围内的名称(key)
@className:与Action元素对应的配置类。默认为org.apache.struts.action.ActionMapping
@forward:指名转发的URL路径
@include:指名包含的URL路径
@input:指名包含输入表单的URL路径,表单验证失败时,请求会被转发到该URL中
@name:指定和当前Acion关联的ActionForm Bean的名字。该名称必须在form-bean元素中定义过。
@path:指定访问Action的路径,以'/'开头,没有扩展名
@parameter:为当前的Action配置参数,可以在Action的execute()方法中,通过调用ActionMapping的getParameter()方法来获取参数
@roles:指定允许调用该Aciton的安全角色。多个角色之间用逗号分割。处理请求时,RequestProcessor会根据该配置项来决定用户是否有调用该Action的权限
@scope:指定ActionForm Bean的存在范围,可选值为request和session。默认为session
@type:指定Action类的完整类名
@unknown:值为true时,表示可以处理用户发出的所有无效的Action URL。默认为false
@validate:指定是否要先调用ActionForm Bean的validate()方法。默认为true
注意:如上属性中,forward/include/type三者相斥,即三者在同一Action配置中只能存在一个。
-->
<action path='/search'
type='addressbook.actions.SearchAction'
name='searchForm'
scope='request'
validate='true'
input='/search.jsp'>
<forward name='success' path='/display.jsp'/>
</action>
</action-mappings>


<!--
名称:controller
描述:用于配置ActionServlet
数量:最多一个
属性:
@bufferSize:指定上传文件的输入缓冲的大小.默认为4096
@className:指定当前控制器的配置类.默认为org.apache.struts.config.ControllerConfig
@contentType:指定相应结果的内容类型和字符编码
@locale:指定是否把Locale对象保存到当前用户的session中,默认为false
@processorClass:指定负责处理请求的Java类的完整类名.默认org.apache.struts.action.RequestProcessor
@tempDir:指定文件上传时的临时工作目录.如果没有设置,将才用Servlet容器为web应用分配的临时工作目录.
@nochache:true时,在相应结果中加入特定的头参数:Pragma ,Cache-Control,Expires防止页面被存储在可数浏览器的缓存中,默认为false
-->
<controller
contentType='text/html;charset=UTF-8'
locale='true'
processorClass='CustomRequestProcessor'>
</controller>
<!--
名称:message-resources
描述:配置Resource Bundle.
数量:任意多个
属性:
@className:指定和message-resources对应的配置类.默认为org.apache.struts.config.MessageResourcesConfig
@factory:指定资源的工厂类,默认为org.apache.struts.util.PropertyMessageResourcesFactory
@key:
@null:
@parameter:
-->
<message-resources
null='false'
parameter='defaultResource'/>
<message-resources
key='images'
null='false'
parameter='ImageResources'/>


<!--
名称:plug-in
描述:用于配置Struts的插件
数量:任意多个
子元素:set-property
属性:
@className:指定Struts插件类.此类必须实现org.apache.struts.action.PlugIn接口
-->
<plug-in
className='org.apache.struts.validator.ValidatorPlugIn'>

<!--
名称:set-property
描述:配置插件的属性
数量:任意多个
属性:
@property:插件的属性名称
@value:该名称所配置的值
-->
<set-property
property='pathnames'
value='/WEB-INF/validator-rules.xml,/WEB-INF/vlaidation.xml'/>
</plug-in>


</struts-config>
爱情转移(2007-08-27 09:17)

爱情转移

 


陈奕迅    爱情转移
电影《爱情呼叫转移》主题曲
作曲:Christopher Chak
作词:林夕
编曲:陈珀 / C.Y.Kong
监制:Alvin Leong

 

徘徊过多少橱窗 住过多少旅馆
才会觉得分离也并不冤枉
感情是用来浏览 还是用来珍藏
好让日子天天都过的难忘
熬过了多久患难 湿了多少眼眶
才能知道伤感是爱的遗产
流浪几张双人床 换过几次信仰
才让戒指义无反顾的交换

把一个人的温暖 转移到另一个的胸膛
让上次犯的错反省出梦想
每个人都是这样 享受过提心吊胆
才拒绝做爱情待罪的羔羊
回忆是抓不到的月光握紧就变黑暗
等虚假的背影消失于晴朗
阳光在身上流转 等所有业障被原谅
爱情不停站 想开往地老天荒 需要多勇敢

烛光照亮了晚餐 照不出个答案
恋爱不是温馨的请客吃饭
床单上铺满花瓣 拥抱让它成长
太拥挤就开到了别的土壤
感情需要人接班 接近换来期望
期望带来失望的恶性循环
短暂的总是浪漫 漫长总会不满
烧完美好青春换一个老伴

把一个人的温暖 转移到另一个的胸膛
让上次犯的错反省出梦想
每个人都是这样 享受过提心吊胆
才拒绝做爱情待罪的羔羊
回忆是抓不到的月光握紧就变黑暗
等虚假的背影消失于晴朗
阳光在身上流转 等所有业障被原谅
爱情不停站 想开往地老天荒 需要多勇敢

把一个人的温暖 转移到另一个的胸膛
让上次犯的错反省出梦想
每个人都是这样 享受过提心吊胆
才拒绝做爱情待罪的羔羊
回忆是抓不到的月光握紧就变黑暗
等虚假的背影消失于晴朗
阳光在身上流转 等所有业障被原谅
爱情不停站 想开往地老天荒 需要多勇敢

你不要失望 荡气回肠是为了
最美的平凡

 


 

洛带+金龙长城行(2007-07-11 08:41)
    昨天和老婆一起到洛带古镇去玩一天,顺便爬了一下金龙长城。
    我们都是第一次去那个地方,所以刚到那里感觉特新鲜,首先吸引我们的是传统的客家木质建筑,红黑白搭配,飞檐峭壁,雕花门窗,不时配上几副对联,很有文化氛围。有趣的是很多店面前都有一个水缸,我一直在猜想它的作用,应该是客家人传承下来的风俗吧。
    洛带公园远没有我们想像的那么好,就是里面有很多竹凳子或桌子搭着,俨然一个茶馆。后来去了长城。还没有到达那里,很远处就看到了她的雄伟和绵长。说服老婆一起怕了两个烽火台,我确实也不行了,没有办法达到山顶的金龙寺了。为了弥补遗憾还是用相机拍了山顶那“咫尺天涯”的风光。
    沿着小路,在树林里休憩了片刻然后返回,途中意外看到了一些白鸽和一只孔雀,老婆为这只只有一只眼的孔雀感到黯然,我这才发现它另一只眼是残了的。看来,也许美好的事物都有它自身的缺陷之美吧。
    由于天气原因,我们下了长城,在阴凉处等公交,然后返回洛带,买了一双情侣手链(有点不好意思~~)。好让这次旅游不虚此行,不过遗憾的是没有吃到洛带的特色:伤心凉粉。谁叫我现在不伤心呢,活该不吃咯~~~
【洛带古镇】
【金龙长城】
【长城:蜀道难】
【流水潺潺】
 
 

通宵自习了(2007-05-16 01:39)
  汇编考试在即,所以通宵了一个晚上,可一点也不感到疲惫,因为有她......
实验室照片(2007-05-14 13:38)
                     左起:裕森 文财 松林 梁洪与偶
                               偶与松林
                               裕森与偶
                              文财与偶
                           偶与梁洪
修复网站漏洞(2007-05-01 04:59)
    最近黑客可能是爱上小天了,我不得不抽个晚上访问量小的时候来修复一些
漏洞,弄到早上5点才勉强结束。去睡觉了!!!
本学期第一次到网吧(2007-04-18 20:09)
为了上传个人主页,这学期第一次到了网吧,纪念一哈。
好久没来了(2007-04-15 07:21)
     好久没有更新自己博客了,回到这里,感觉有种回家的感觉,最近都在忙一些别的事情,真的有点恍惚了。挑战杯还有3天的时间就要提交了,小天网站需要更新的地方也比较多,时间都打紧了,但是,最大的“痛苦”莫过于我还报了学校SCJP考试,还有两三天就初试了;
    一眨眼,半期就到了,有些科目要考试,看来又要费时间咬文嚼字了。管它的,把五一节过了再说,耍好了才能学习好的。不过听说这次是只放3天。唉,如果真的那样就真的无语了。
    先到这里,GO ON WORKING! 
aspjpeg高级使用方法(2007-03-27 07:36)
aspjpeg是一款非常强大的图片处理组件,纯英文版本。

这里的技术主要包括:
图片缩略
图片水印
安全码技术
图片切割
图片合并
数据库支持
更多不常用的方法介绍
以及相关的一些实用技术
aspjpeg唯一点不足的就是输出方式比较单一。在这里,我们主要谈将图片处理保存后再调用的这种输出方法。


一、图片缩略

<%
Set Jpeg = Server.CreateObject('Persits.Jpeg') 调用组件
Path = Server.MapPath('images') & '\clock.jpg' 待处理图片路径
Jpeg.Open Path 打开图片
高与宽为原图片的1/2
Jpeg.Width = Jpeg.OriginalWidth / 2
Jpeg.Height = Jpeg.OriginalHeight / 2
保存图片
Jpeg.Save Server.MapPath('images') & '\clock_small.jpg'
%>
<IMG SRC='images/clock_small.jpg'> 查看处理的图片

二、图片水印

<%
Set Jpeg = Server.CreateObject('Persits.Jpeg')
Jpeg.Open Server.MapPath('images/dodge_viper.jpg')
开始写文字
Jpeg.Canvas.Font.Color = &HFF0000'' red 颜色
Jpeg.Canvas.Font.Family = 'Courier New' 字体
Jpeg.Canvas.Font.Bold = True 是否加粗
Jpeg.Canvas.Print 10, 10, 'Copyright (c) XYZ, Inc.'
打印坐标x 打印坐标y 需要打印的字符
以下是对图片进行边框处理
Jpeg.Canvas.Pen.Color = &H000000'' black 颜色
Jpeg.Canvas.Pen.Width = 2 画笔宽度
Jpeg.Canvas.Brush.Solid = False 是否加粗处理
Jpeg.Canvas.Bar 1, 1, Jpeg.Width, Jpeg.Height
起始X坐标 起始Y坐标 输入长度 输入高度
Jpeg.Save Server.MapPath('images/dodge_viper_framed.jpg') 保存
%>

三、安全码

<%
生成安全码的函数
function make_randomize(max_len,w_n) max_len 生成长度,w_n:0 可能包含字母,1:只为数字
randomize
for intcounter=1 to max_len
whatnext=int((1-0+1)*rnd+w_n)
if whatnext=0 then
upper=122
lower=97
else
upper=57
lower=48
end if
strnewpass=strnewpass & chr(int((upper-lower+1)*rnd)+lower)
next
make_randomize=strnewpass
end function
%>
生成安全码的图片。当然你要预先准备一张背景图哦
<%random_num=make_randomize(4,1) 生成4位数字的安全码
session('random_num')=random_num 为什么调用session,没有session的安全码是完全没有意义的。
Set Jpeg = Server.CreateObject('Persits.Jpeg') 调用组件
Jpeg.Open Server.MapPath('infos/random_pic/random_index.gif') 打开准备的图片
Jpeg.Canvas.Font.Color = &H006699
Jpeg.Canvas.Font.Family = 'Arial Black'
Jpeg.Canvas.Font.Bold = false
Jpeg.Canvas.PrintText 0, -2, random_num
jpeg.save Server.MapPath('infos/random_pic/random_index.bmp') 保存
%> <img src='infos/random_pic/random_index.bmp' border='0' align='absmiddle'>


不想做背景图片的。
到http://comapny.windowscar.com/infos/random_pic/random_index.gif下载

四、图片切割
一直以来,对aspjpeg不了解的人以为是无法用它来进行切割的。
其实有这样的一个方法的
crop x1,y1,x2,y2
切割长方型左上角x坐标,y坐标 右下角x坐标 y坐标

演示代码:

Set Jpeg = Server.CreateObject('Persits.Jpeg')
jpeg.open server.MapPath('/pic/1.gif')
jpeg.width=70
Jpeg.Height = Jpeg.OriginalHeight*70 / jpeg.Originawidth
jpeg.crop 0,0,70,52 开始切割其实是把超过52象素的下部分去掉
jpeg.save server.MapPath('/temp_pic/small_1.gif') 保存

五、图片合并

我们这里是要把logo图片加到dodge_viper.jpg图片上去
其实,图片合并的方法也可以用来动态打水印哦
Set Photo = Server.CreateObject('Persits.Jpeg')
PhotoPath = Server.MapPath('images') & '\dodge_viper.jpg'
Photo.Open PhotoPath
Set Logo = Server.CreateObject('Persits.Jpeg')
LogoPath = Server.MapPath('images') & '\clock.jpg'
Logo.Open LogoPath

Logo.Width = 70
Logo.Height = Logo.Width * Logo.OriginalHeight / Logo.OriginalWidth

Photo.DrawImage 0, 0, Logo

Photo.SendBinary 这里用了sendBinary的输出方法。当然,你也可以先保存更改后的dodge_viper.jpg,再输入也可以。我个人不大喜欢用sendBinary方法,在网速慢的时候容易出错。在速度方面也不怎样。

六、数据库支持

其实就是Binary方法,知道图片存进数据库只能存为二进制的文件的。

七、更多方法介绍
Canvas.Line(Left, Top, Right, Bottom)
画一条直线
Canvas.Ellipse(Left, Top, Right, Bottom)
画出一个椭圆
Canvas.Circle(X, Y, Radius)
画出一个圆
Canvas.Bar(Left, Top, Right, Bottom)
画出一个长方形,上面有代码介绍了
Canvas.Font.ShadowColor
文字阴影颜色
Canvas.Font.ShadowXOffset As Long
阴影X坐标设定
Canvas.Font.ShadowYOffset As Long
Y坐标设定
Canvas.Font.BkMode As String
文字背景
It's time to eat books(2007-03-25 08:51)
忙了一阵子,现在终于感觉好些了,
开学已经有四周了,是该花点时间啃书本了
要不然,半期要结束的课程再不去看看的话
挂了课不要紧
那门课程没有学到东西也不要紧
得不了奖学金也不要紧
浪费了老师的劳动成果怎么行
才怪