2009年8月10日

struts2 相关包--------------------------------------------------

xwork-2.0.5.jar                          webwork的核心库

ognl-2.6.11.jar                           OGNL表达式语言,struts2支持该EL

freemarker-2.3.8.jar                  表现层框架,定义了struts2的可视组件主题

commons-beanutils.jar              提供对java 反射和自省API的包装

commons-fileupload.jar             文件上传

commons-io.jar                         输入输出,支持文件上传

commons-logging.jar                用于通用日志处理

commons-validator.jar            提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器(校验方法)和校验规则

struts2-spring-plugin-2.0.11.2.jar   struts2的spring插件

struts2-core-2.0.11.2jar                  struts2 2.0.11.2的核心库

 

hibernate 相关包--------------------------------------------------                   

antlr-2.7.6.jar                                  语法分析生成器

backport-util-concurrent-3.1.jar     ehcache支持jar    

cglib-nodep-2.1_3.jar                    是一种高性能,高质量的代码产生库, Hibernate 用它来实现 po (persistent                                                          object)字节码的动态生成

commons-collections.jar                包含了一些Apache开发的集合类,功能比java.util.*强大

commons-pool.jar

commons-dbcp.jar                          DBCP数据库连接池。

c3p0-0.9.1.jar                                 是一个数据库连接池,Hibernate可以配置为使用C3PO连接池。如果准备用这个连接池,就需要这个jar包.

dom4j-1.6.1.jar                               用来读写XML文件的

ehcache-1.5.0.jar                        ehcache缓存

hibernate3.jar                              hibernate-3.3.1.GA jar

jaxen-1.1.1.jar                              支持dom4j的xpath

javassist-3.4.GA.jar                       是一个开源的分析、编辑和创建Java字节码的类库,用于 Java 的加载时反射系统

jta-1.1.jar                                       JTA规范,当Hibernate使用JTA的时候需要

jsr107cache-1.0.jar                             ehcache支持jar

mysql-connector-java-3.1.14-bin.jar  mysql驱动jar

 

spring 相关包--------------------------------------------------

spring.jar                                     spring-2.5.5.jar

slf4j-log4j12-1.5.0.jar                         slf4j log4j支持包

log4j-1.2.15.jar

slf4j-api-1.5.0.jar

 

posted @ 2009-08-10 09:19 沉声 阅读(2086) | 评论 (0)编辑 收藏

2009年4月13日

层滑动效果 (jquery)
slideToggle(speed,[callback])
通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数。
这个动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式隐藏或显示。

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

Toggle the visibility of all matched elements by adjusting their height and firing an optional callback after completion.
Only the height is adjusted for this animation, causing all matched elements to be hidden or shown in a "sliding" manner.
返回值
jQuery

参数
speed (String,Number) : 三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)

callback (Function) : (可选) 在动画完成时执行的函数

示例
用600毫秒缓慢的将段落滑上或滑下 

jQuery 代码:

$("p").slideToggle("slow"); 
--------------------------------------------------------------------------------

用200毫秒快速将段落滑上或滑下,之后弹出一个对话框 

jQuery 代码:

$("p").slideToggle("fast",function(){
   alert("Animation Done.");
 }); 

------------------------------------------------------------------------------------------------------------------------------------
获取节点元素
document.getElementById("p1").firstChild.firstChild.data;
注:p1为层ID  层结构为 <div><p> xxoo</p></div> 以上表达式值即为 XXOO
---------------------------------------------------------------------
取得页面元素绝对位置
 1 function getLTWH(o)
 2 {
 3     var oLTWH={"left":0,"top":0,"width":0,"height":0};
 4     if(document.all)
 5     {
 6         var   oRect=o.getBoundingClientRect();
 7         oLTWH.left=oRect.left-2;
 8         oLTWH.top=oRect.top-2;
 9     }else
10     {
11         oLTWH.left=o.offsetLeft;
12         oLTWH.top=o.offsetTop;
13     }
14     oLTWH.width=o.offsetWidth;
15     oLTWH.height=o.offsetHeight;
16     return oLTWH;
17 }
alert(o.left);
alert(o.top);
alert(o.width);
alert(o.height); 这样就出来了。

-------------------------------------------------------------------------------------------------------------------------
路径问题 直接<%=request.getContextPath()%>/*就OK~
posted @ 2009-04-13 16:13 沉声 阅读(57) | 评论 (0)编辑 收藏

2009年3月26日

一.常用表单基本取值方法(form1为表单名称,TextBox1为控件ID,以文本框为例,html控件与web服务器控件是一样的)
        1.form1.TextBox1.value 
        2.var txt = document.all.TextBox1; 
          txt.value
        3.var txt = document.all["TextBox1"];
          txt.value
        4.document.getElementById("TextBox1");

二.
1.html复选框(name相同)
表单: <input id="Checkbox1" type="checkbox" name="chk" value="123" />sss
       <input id="Checkbox2" type="checkbox" name="chk" value="456"/>aaa
       <input id="Checkbox3" type="checkbox" name="chk" value="789"/>bbb

实现功能:遍历html复选框,得到所选中项
   var oChks = document.all.chk; 
   for(var i=0; i<oChks.length; i++)   
   {   
        if(oChks[i].checked)   
    alert(oChks[i].value);   
   } 

2.html单选框(name相同)
表单: <input id="Radio1" type="radio" name="rad" value="123"/>123
       <input id="Radio2" type="radio" name="rad" value="456"/>456
实现功能:遍历html复选框,得到所选中项
代码同html复选框

3.html下拉列表框
表单:<select id="Select1" multiple>
    <option value=1>1</option>
    <option value=2>2</option>
      </select>
实现功能:
   3.1得到所选中项的text和value值(选择一项)
    var selDrp = document.all.Select1;
    alert(selDrp.options[selDrp.selectedIndex].text);
    alert(selDrp.options[selDrp.selectedIndex].value);
   3.2得到所选中项的text和value值(选择多项)
    for(var j=0;j<selDrp.options.length;j++)
    {
          if(selDrp.options[j].selected)
          {
     alert(selDrp.options[j].value);
          }
    }
4.DropDownList控件与ListBox控件
实现功能:得到所选中项的text和value值
代码同html下拉列表框

5.CheckBoxList控件
实现功能:得到所选中项的text
代码:
        var chklist = document.all("CheckBoxList1"); 
        var i = 0;   
        for(i=0;i<chklist.rows.length;i++)   
        {   
   var name = "CheckBoxList1_" + i;   
   var tmpChecked = document.all[name].checked; 
                if(tmpChecked)   
                {   
    alert(document.all[name].parentElement.innerText);   
                  
                 }   
        }
posted @ 2009-03-26 15:11 沉声 阅读(593) | 评论 (0)编辑 收藏

2009年3月24日

个人心得
 spring的DI就是 靠JAVA反射到指定的实体类中调用该类中的SET方法注入
会根据property 的name属性反射的相应的类中找SET方法


spring对AOP的支持(采用Annotation的方式)

1、spring依赖库
 * SPRING_HOME/dist/spring.jar
 * SPRING_HOME/lib/jakarta-commons/commons-logging.jar
 * SPRING_HOME/lib/log4j/log4j-1.2.14.jar
 * SPRING_HOME/lib/aspectj/*.jar
 
2、采用Aspect定义切面

2、在Aspect定义Pointcut和Advice

4、启用AspectJ对Annotation的支持并且将Aspect类和目标对象配置到Ioc容器中

注意:在这种方法定义中,切入点的方法是不被执行的,它存在的目的仅仅是为了重用切入点
即Advice中通过方法名引用这个切人点

AOP:
 * Cross cutting concern
 * Aspect
 * Advice
 * Pointcut
 * Joinpoint
 * Weave
 * Target Object
 * Proxy
 * Introduction

spring的普通属性注入 
 参见:spring文档3.3章节
 
什么是属性编辑器,作用?
 * 自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入
 spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器
 
 * 如何定义属性编辑器?
  * 继承PropertyEditorSupport类,覆写setAsText()方法,参见:UtilDatePropertyEditor.java
  * 将属性编辑器注册到spring中,参见:applicationContext-editor.xml
  
依赖对象的注入方式,可以采用:
 * ref属性
 * <ref>标签
 * 内部<bean>来定义
 
如何将公共的注入定义描述出来?
 * 通过<bean>标签定义公共的属性,指定abstract=true
 * 具有相同属性的类在<bean>标签中指定其parent属性
 
 参见:applicationContext-other.xml
    
  
   

posted @ 2009-03-24 16:00 沉声 阅读(90) | 评论 (0)编辑 收藏

2009年3月19日

杂文
Session 是非线程安全的
所以一个业务请求来就打开一个session 用完就立即关闭

采用get加载数据,如果数据库中不存在相应的数据,返回null

在删除和修改时,一般都先将要操作的数据加载上之后再进行删除和修改。

get和load只能根据主键加载,如要使用别的方式 则需借助HQL查询


查询时 from后面区分大小写(对应的是实体类 而不是表名)

hibernate基本映射

实体类---表
实体类中的普通属性---表字段

采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段
所谓普通属性指不包括自定义类、集合和数组等

注意:如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名

实体类的设计原则:
 * 实现一个默认的(即无参数的)构造方法(constructor)
 * 提供一个标识属性(identifier property)(可选)
 * 使用非final的类 (可选)
 * 为持久化字段声明访问器(accessors) 

主键生成策略:
 uuid、native和assigned


hibernate一级缓存
 
一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存

那些方法支持一级缓存:
 * get()
 * load()
 * iterate(查询实体对象)
 
如何管理一级缓存:
 * session.clear(),session.evict()
 
如何避免一次性大量的实体数据入库导致内存溢出
 * 先flush,再clear
 
如果数据量特别大,考虑采用jdbc实现,如果jdbc也不能满足要求可以考虑采用数据本身的特定导入工具     


hibernate二级缓存

二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存

二级缓存的配置和使用:
 * 将echcache.xml文件拷贝到src下
 * 开启二级缓存,修改hibernate.cfg.xml文件
  <property name="hibernate.cache.use_second_level_cache">true</property>
 * 指定缓存产品提供商,修改hibernate.cfg.xml文件
  <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
 * 指定那些实体类使用二级缓存(两种方法)
  * 在映射文件中采用<cache>标签
  * 在hibernate.cfg.xml文件中,采用<class-cache>标签
  
二级缓存是缓存实体对象的

了解一级缓存和二级缓存的交互  
  

采用编程式事务

1、getCurrentSession()与openSession()的区别?
 * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
   创建的session则不会
 * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
   创建的session必须手动关闭
  
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
 * 如果使用的是本地事务(jdbc事务)
 <property name="hibernate.current_session_context_class">thread</property>
 * 如果使用的是全局事务(jta事务)
 <property name="hibernate.current_session_context_class">jta</property>  


     
     

posted @ 2009-03-19 11:11 沉声 阅读(107) | 评论 (0)编辑 收藏

2009年2月18日

javascript中的Split使用方法与技巧
使用方法:
myArray=string.split("|");
example:
<scriptlanguage="JavaScript"> 
<!-- 
functionRequest(strName) 
{ 
varstrHref
="www.nextway.cn/index.htm?a=1&b=1&c=Split实例"; 
varintPos
=strHref.indexOf("?"); 
varstrRight
=strHref.substr(intPos+1); 
vararrTmp
=strRight.split("&"); 
for(vari=0;i<arrTmp.length;i++) 
{ 
vararrTemp
=arrTmp[i].split("="); 
if(arrTemp[0].toUpperCase()==strName.toUpperCase())returnarrTemp[1]; 
}
 
return""; 
}
 
alert(Request(
"a")); 
alert(Request(
"b")); 
alert(Request(
"c")); 
//--> 
</script>
posted @ 2009-02-18 12:28 沉声 阅读(86) | 评论 (0)编辑 收藏

2009年1月16日

s:property 等类似标签, 访问的只是bean中的GET SET方法 而非变量。
//******************************************************************************
使用equals时,如果需要与常量比较,那么将常量放在前面,这样会防止出现nullPoint异常。

if(null == username || username.length()<6||username.length()>10) 第一个判断 null==username 可以防止用户直

接通过地址访问action 导致的 nullpoint异常。


//******************************************************************************
常用验证
<field name="password"> 
<field-validator type="requiredstring"> 
<param name="trim">true </param> 
<message>密码不能为空 </message> 
</field-validator> 

<field-validator type="stringlength"> 
<param name="minLength"></param> 
<param name="maxLength">16 </param> 
<message>密码必须在${minLength} 到 ${maxLength}之间 </message> 
</field-validator> 
</field> 


<!-- 验证重复密码 -->
//*****************************************************************************************

<field name="repassword"> 
<field-validator type="requiredstring"> 
<param name="trim">true </param> 
<message>重复密码不能为空 </message> 
</field-validator> 

<field-validator type="fieldexpression"> 
            
<param name="expression">password == repassword </param> 
            
<message>两次输入的密码不一致 </message> 
        
</field-validator> 
</field>
<field name="customer.csaAddress.zipcode">
  
<field-validator type="requiredstring">
   
<message>CSA Zip required!</message>
  
</field-validator>
  
<field-validator type="regex">
   
<param name="expression">^\d{5}$</param>
   
<message><![CDATA[CSA Zip must 5 digits ]]></message>
  
</field-validator>
 
</field>

 

 Calendar  没有构造方法 需使用Calendar c1=Calendar.getInstance(); 实例化。
//*****************************************************************************************

传参时中文乱码解决方式
修改位于Tomcat/conf目录下的server_xml文件如下
<Connector port="8080" protocol="HTTP//1.1"
  maxThreads="150" connectionTimeout="20000"
  redirectPort="8443" URIEncoding="UTF-8"/>
编写过滤器 建立一个新类 此类需实现 Java-servlet-Filter接口
在类中的doFilter方法中增加
 request.SetCharacterEncoding("utf-8");
 Param.doFilter(request,response);
再修改web.xml 加入

<Filter>


<Filter-name>Fname</Filter-name>
<Filter-class>"类所在位置"</Filter-class>
</Filter>
<filter-mapping>
  
<filter-name>Fname</filter-name>
  
<url-pattern>/*</url-pattern>
 
</filter-mapping>


//*****************************************************************************************
使用ModelDriven时 一定要先实例化... 一定啊一定。 开了瓶子盖儿才能往里注水  不是么。
//*****************************************************************************************
今天遇到个问题  action中没有指定method 但是它不走默认的execute方法 直接跳转到INPUT指定的页面  百思不得其解  后在那张页面加入了
<s:fieldError> <s:actionError>  显示“Invalid field value for field "stu_arriveDate". ” 这才知道是有数据类型错误
//*****************************************************************************************
setBean时使用  ServletActionContext.getRequest().setAttribute(String, Object);
setList时使用 ActionContext.getContext().getSession().put(String ,  Object);

posted @ 2009-01-16 09:25 沉声 阅读(161) | 评论 (0)编辑 收藏
仅列出标题