在 struts2 标签中是使用 OGNL 来访问对象属性或方法的,也就是访问的 ValueStack 中的值,即 OgnlValueStack。OGNL 也能让你直接访问类的静态变量和静态方法,标准写法是:
@类全限定名@静态属性或方法名,比如访问某个常量:
<s:property value="@cc.unmi.common.Constants@MY_NAME"/>
<s:property value="@cc.unmi.common.Utils.now()"/>
麻烦就是一定要写上类的全限定名称,实际应用时肯定比这个还要长,所以必须寻求一种更精练的写法。幸好像这篇文章:Struts2 OGNL 的增强 提到了可以用: Read More
- Struts2 与 Spring 结合,使用 Spring 来管理 Action 实例,在项目中引入了struts2-spring-plugin-2.2.1.jar 包。然后想到的是既然是要用 Spring 来管理 Action 实例,就得在 struts.xml 里加上:
1<constant name="struts.objectFactory" value="spring" />
或者是在 struts.properties 里加上一条属性:1struts.objectFactory = spring
OK,这也没问题,然而有次在某个测试项目中想暂时不用 Spring 来管理 Bean,于是把上面的配置去了,也把 web.xml 中的相关 Spring 的 ContextLoaderListener 也格啦。容器启动的时候却发现: Read More - Tomcat 7 在加强原有功能的同时也增加了一些新特性。有些文章列举了Tomcat 7的新特性,但大多数都没有对它们进行详细地解释、评价并给出可执行的示例。除了列举出新特性,这篇文章还对Tomcat 7的七个最值得注意的特性与增强部分进行分类、评定以及演示可执行代码以使你能够对每个特性/加强有个更好的理解。
我将下面列举的这些分类为“Tomcat 7 新特色:创新性改变”和“Tomcat 7 加强:进化性改变”:
Tomcat 7 新特性:创新性改变- 使用随机数令牌(nonce)防止跨站请求伪造(cross-site request forgery—CSRF)攻击
- 验证时改变 jsessionid 以防止固定会话攻击
- 内存泄露检测及预防
- 使用别名在war文件外存储静态内容 Read More
- 在使用 Hibernate 进行数据库操作的时候可以显示出所执行的 SQL 语句,相信用 Hibernate 的兄弟姐妹们都知道怎么设置。就设置 hibernate.show_sql 或者 show_sql 属性为 true 就行,在 hibernate.cfg.xml 或者与 Spring 集成时配置在 Spring 的配置文件中。再就是要让显示的 SQL 语句是格式化的,就配置 hibernate.format_sql 或是 format_sql 为 true,否则总在一行中执行。Hibernate 显示的 SQL 语句好像是通过 System.out.println() 直接输出的。
Hibernate 大部份时候是通过 PreparedStatement 来执行 SQL 语句的,它的好处是可预处理、被缓存,可防止注入。只是这样让 Hibernate 执行的 SQL 语句输出到控制台是带问号的,如: Read More - 我们在实际的 Spring+Struts 的项目中一般都会定义一个 Struts Action 基类。基类中当然是提供一些公共的方法了,用上了 Spring 的话,里面放几个 getBean() 方法就会方便许多。Web 项目多数时候我想还是在 Action 中有经常性的获取 Bean 实例,如果有用在别处的话,也可以借鉴。
在没有泛型支持下,我们从 Spring Context 中获取 Bean 要强型转换类型,如:
SomeClass some = (SomeClass)context.getBean("someClass");
上面对应的方法原型是 Object getBean(String beanName);
从 jdk 1.5 开始有泛型了,可以加一个泛型,省却了转型步骤,看起来要舒服一些,如: Read More - 其实这跟 Slf4J 通用日志框架没什么关系,单单是 Logback 的事,把 Slf4J 扯进来只因它们是对黄金组合。
我们在 log4j 中想要不显示第三方包的非常冗余的日志输出时,只要在 log4j.properties 中写上:1log4j.logger.org.hibernate=ERROR
这样在 hibernate 里的日志级别在 ERROR 以下的 TRACE、DEBUG、WARN 和 INFO 将不被输出,控制台会比较的干净。
Logback 的配置文件是 logback.xml,曾经在里面给 <appender> 加的 <pattern> 是: Read More - Spring 3.0.5 Release 版在 2010-10-20 悄然发布,真正支持了 Hibernate 3.6 Final。在常去的几个网站都没看到相关信息,而且在 Spring 的官方网站上也是小声细作,好不容易才翻出一个 changelog 出来:http://static.springsource.org/spring/docs/3.0.x/changelog.txt。
可在 http://ebr.springsource.com/repository/app/bundle/version/detail?name=org.springframework.core&version=3.0.5.RELEASE 下载,
假如你是用 Ivy 管理依赖,请添加:
<dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" />
用 Maven 管理依赖的话,pom.xml 加: Read More - 一般我们都是把 Lucene 索引存放在文件系统中,大数据量时会考虑用分布式文件系统,如 Hadoop 及 MapReduce、GFS 的应用。也许你会想我们有数据库作为集中的数据存储地,是否可以把 Lucene 索引文件存储到关系型数据库中。可以这么做,不过好像性能上有些问题,本文就此也作这样一个尝试。
看 http://wiki.apache.org/lucene-java/LuceneFAQ
Can I store the Lucene index in a relational database?
Lucene does not support that functionality out of the box, but several people have implemented JdbcDirectory's. The reports we have seen so far indicate that performance with such implementations is not great, but it is doable. Read More - 做 Java Web 应用我想多会采用这两种框架组合,SSH 和 SSI,其实我是不太喜欢用这两种缩写方式:
SSH = Spring + Struts + Hibernate,SSH 由久已久所代表的是 Secure Shell,像 https
SSI = Spring + Struts + iBatis,SSI 在很久以前就是 Server Side Include,像 shtml,而 iBatis 已更名为 MyBatis 了。
要是在以往做这样的 Java 项目都会用 Commons-Logging + Log4J 来作为日志框架,因为多数组件用的是 Common-Logging 通用组件,而那时 Log4J 控制实际的日志输出也是最强的。
Read More - SiteMesh 是一个很好的 Java Web 模板框架,它的思维方式与通常的模板实现(比如 Tiles 或 include)有些区别。SiteMesh 模板一旦配置好后,在编辑内容页时可以忽视它的存在。可以它是被动,内容页中的输出被抽取到模板中,一般的模板为主动的把自己某部分内容去填充模板。
在站点中应用样式或 JS 代码时很可能会依赖于每个页面的 <body> 的 id,比如:
body#archive primary{....} /** 样式 **/
$("body#archive").bgColor='red'; //JS 所以就要求每个页面有不同的 body id 值。在很多 SiteMesh 的例子中页面渲染后 body 都没有 id 值的,或是相同的 id 值。 Read More