??xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- maxElementsInMemory="10"内存中的最大页面对?br />
eternal="false" <cache name="show" CZQthis.getHibernateTemplate().find(”from bean.User”); q回所有User对象 二、find(String queryString , Object value); CZQthis.getHibernateTemplate().find(”from bean.User u where
u.name=?”, “test”); 或模p查询:this.getHibernateTemplate().find(”from bean.User u where
u.name like ?”, “%test%”); q回name属性gؓtest的对象(模糊查询Q返回name属性值包含test的对象) 三、find(String queryString, Object[] values); CZQString hql= “from bean.User u where u.name=? and
u.password=?” this.getHibernateTemplate().find(hql, new
String[]{”test”, “123″}); q回用户名ؓtestq且密码?23的所有User对象 Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?/p>
四、findByExample(Object exampleEntity) CZQ?/p>
User u=new User(); u.setPassword(”123″);//必须
W合的条件但是这两个条g时ƈ列的Q象当于sql中的andQ?nbsp; u.setName(”bb”);
list=this.getHibernateTemplate().findByExample(u,start,max); q回Q用户名为bb密码?23的对?/p>
五、findByExample(Object exampleEntity, int firstResult, int
maxResults) CZQ?/p>
User u=new User(); u.setPassword(”123″);//必须
W合的条件但是这两个条g时ƈ列的Q象当于sql中的andQ?nbsp; u.setName(”bb”);
list=this.getHibernateTemplate().findByExample(u,start,max); q回Q满用户名为bb密码?23Q自start起共max个User对象。(对象?开始计敎ͼ ————————————————?/p>
六、findByNamedParam(String queryString , String paramName , Object
value) 使用以下语句查询Q?nbsp; String queryString = “select count(*) from bean.User u where
u.name=:myName”; String paramName= “myName”; String value= “xiyue”; this.getHibernateTemplate().findByNamedParam(queryString, paramName,
value); System.out.println(list.get(0)); q回name为xiyue的User对象的条?/p>
七、findByNamedParam(String queryString , String[] paramName , Object[]
value) CZQ?/p>
String queryString = “select count(*) from bean.User u where
u.name=:myName and u.password=:myPassword”; String[] paramName= new String[]{”myName”, “myPassword”}; String[] value= new String[]{”xiyue”, “123″}; this.getHibernateTemplate().findByNamedParam(queryString, paramName,
value); q回用户名ؓxiyue密码?23的User对象 八、findByNamedQuery(String queryName) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryAllUser”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryAllUser”); 九、findByNamedQuery(String queryName, Object value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByName”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name = ? ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryByName”, “test”); 十、findByNamedQuery(String queryName, Object[] value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =? and
u.password =? ]]> </query> </hibernate-mapping> 2、如下用查询: String[] values= new String[]{”test”, “123″}; this.getHibernateTemplate().findByNamedQuery(”queryByNameAndPassword”
, values); 十一、findByNamedQueryAndNamedParam(String queryName, String paramName,
Object value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByName”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryByName” ,
“myName”, “test”); 十二、findByNamedQueryAndNamedParam(String queryName, String[]
paramName, Object[] value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName
and u.password=:myPassword ]]> </query> </hibernate-mapping> 2、如下用查询: String[] names= new String[]{”myName”, “myPassword”}; String[] values= new String[]{”test”, “123″}; this.getHibernateTemplate().findByNamedQuery(”queryByNameAndPassword”
, names, values); 十三、findByValueBean(String queryString , Object value); CZQ?/p>
1、定义一个ValueBeanQ属性名必须和HSQL语句中的Q后面的变量名同名,此处必须臛_有两个属性,分别为myName?
myPasswordQ用setterҎ讄属性值后 ValueBean valueBean= new ValueBean(); valueBean.setMyName(”test”); valueBean.setMyPasswrod(”123″); 2?/p>
String queryString= “from bean.User u where u.name=:myName
and u.password=:myPassword”; this.getHibernateTemplate().findByValueBean(queryString ,
valueBean); 十四、findByNamedQueryAndValueBean(String queryName , Object value); CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName
and u.password=:myPassword ]]> </query> </hibernate-mapping>
2、定义一个ValueBeanQ属性名必须和User.hbm.xml命名查询语句中的Q后面的变量名同名,此处必须臛_有两个属性,分别?
myName和myPasswordQ用setterҎ讄属性值后 ValueBean valueBean= new ValueBean(); valueBean.setMyName(”test”); valueBean.setMyPasswrod(”123″); 3?/p>
String queryString= “from bean.User u where u.name=:myName
and u.password=:myPassword”;
this.getHibernateTemplate().findByNamedQueryAndValueBean(”queryByNameAndPassword”,
valueBean); CZQthis.getHibernateTemplate().find(”from bean.User”); q回所有User对象 二、find(String queryString , Object value); CZQthis.getHibernateTemplate().find(”from bean.User u where
u.name=?”, “test”); 或模p查询:this.getHibernateTemplate().find(”from bean.User u where
u.name like ?”, “%test%”); q回name属性gؓtest的对象(模糊查询Q返回name属性值包含test的对象) 三、find(String queryString, Object[] values); CZQString hql= “from bean.User u where u.name=? and
u.password=?” this.getHibernateTemplate().find(hql, new
String[]{”test”, “123″}); q回用户名ؓtestq且密码?23的所有User对象 Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?/p>
四、findByExample(Object exampleEntity) CZQ?/p>
User u=new User(); u.setPassword(”123″);//必须
W合的条件但是这两个条g时ƈ列的Q象当于sql中的andQ?nbsp; u.setName(”bb”);
list=this.getHibernateTemplate().findByExample(u,start,max); q回Q用户名为bb密码?23的对?/p>
五、findByExample(Object exampleEntity, int firstResult, int
maxResults) CZQ?/p>
User u=new User(); u.setPassword(”123″);//必须
W合的条件但是这两个条g时ƈ列的Q象当于sql中的andQ?nbsp; u.setName(”bb”);
list=this.getHibernateTemplate().findByExample(u,start,max); q回Q满用户名为bb密码?23Q自start起共max个User对象。(对象?开始计敎ͼ ————————————————?/p>
六、findByNamedParam(String queryString , String paramName , Object
value) 使用以下语句查询Q?nbsp; String queryString = “select count(*) from bean.User u where
u.name=:myName”; String paramName= “myName”; String value= “xiyue”; this.getHibernateTemplate().findByNamedParam(queryString, paramName,
value); System.out.println(list.get(0)); q回name为xiyue的User对象的条?/p>
七、findByNamedParam(String queryString , String[] paramName , Object[]
value) CZQ?/p>
String queryString = “select count(*) from bean.User u where
u.name=:myName and u.password=:myPassword”; String[] paramName= new String[]{”myName”, “myPassword”}; String[] value= new String[]{”xiyue”, “123″}; this.getHibernateTemplate().findByNamedParam(queryString, paramName,
value); q回用户名ؓxiyue密码?23的User对象 八、findByNamedQuery(String queryName) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryAllUser”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryAllUser”); 九、findByNamedQuery(String queryName, Object value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByName”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name = ? ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryByName”, “test”); 十、findByNamedQuery(String queryName, Object[] value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =? and
u.password =? ]]> </query> </hibernate-mapping> 2、如下用查询: String[] values= new String[]{”test”, “123″}; this.getHibernateTemplate().findByNamedQuery(”queryByNameAndPassword”
, values); 十一、findByNamedQueryAndNamedParam(String queryName, String paramName,
Object value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByName”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName ]]> </query> </hibernate-mapping> 2、如下用查询: this.getHibernateTemplate().findByNamedQuery(”queryByName” ,
“myName”, “test”); 十二、findByNamedQueryAndNamedParam(String queryName, String[]
paramName, Object[] value) CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName
and u.password=:myPassword ]]> </query> </hibernate-mapping> 2、如下用查询: String[] names= new String[]{”myName”, “myPassword”}; String[] values= new String[]{”test”, “123″}; this.getHibernateTemplate().findByNamedQuery(”queryByNameAndPassword”
, names, values); 十三、findByValueBean(String queryString , Object value); CZQ?/p>
1、定义一个ValueBeanQ属性名必须和HSQL语句中的Q后面的变量名同名,此处必须臛_有两个属性,分别为myName?
myPasswordQ用setterҎ讄属性值后 ValueBean valueBean= new ValueBean(); valueBean.setMyName(”test”); valueBean.setMyPasswrod(”123″); 2?/p>
String queryString= “from bean.User u where u.name=:myName
and u.password=:myPassword”; this.getHibernateTemplate().findByValueBean(queryString ,
valueBean); 十四、findByNamedQueryAndValueBean(String queryName , Object value); CZQ?/p>
1、首先需要在User.hbm.xml中定义命名查?/p>
<hibernate-mapping> <class>……</class> <query
name=”queryByNameAndPassword”><!–此查询被调用的名?#8211;> <![CDATA[ from bean.User u where u.name =:myName
and u.password=:myPassword ]]> </query> </hibernate-mapping>
2、定义一个ValueBeanQ属性名必须和User.hbm.xml命名查询语句中的Q后面的变量名同名,此处必须臛_有两个属性,分别?
myName和myPasswordQ用setterҎ讄属性值后 ValueBean valueBean= new ValueBean(); valueBean.setMyName(”test”); valueBean.setMyPasswrod(”123″); 3?/p>
String queryString= “from bean.User u where u.name=:myName
and u.password=:myPassword”;
this.getHibernateTemplate().findByNamedQueryAndValueBean(”queryByNameAndPassword”,
valueBean);
首先|上查了下,ehcache和oscacheQ上相应的官|查看,发现oscache?7q以后就没更新过Q不知道是改名字了,q是其它原因Q最后采用了ehcache做页面缓?br />
配置可以参考官斚w面:http://ehcache.org/documentation/web_caching.html
web里面配置如下Q?br />
<filter>
<filter-name>CachePage1CachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
</filter-class>
<init-param>
<param-name>suppressStackTraces</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cacheName</param-name>
<param-value>CachePage1CachingFilter</param-value>
</init-param>
</filter>
<filter>
<filter-name>SimplePageFragmentCachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter
</filter-class>
<init-param>
<param-name>suppressStackTraces</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cacheName</param-name>
<param-value>SimplePageFragmentCachingFilter</param-value>
</init-param>
</filter>
<filter>
<filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter
</filter-class>
<init-param>
<param-name>suppressStackTraces</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cacheName</param-name>
<param-value>CachedPage2Cache</param-value>
</init-param>
</filter>
<!-- This is a filter chain. They are executed in the order below.
Do not change the order. -->
<filter-mapping>
<filter-name>CachePage1CachingFilter</filter-name>
<url-pattern>/CachedPage.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>SimplePageFragmentCachingFilter</filter-name>
<url-pattern>/include/Footer.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SimplePageFragmentCachingFilter</filter-name>
<url-pattern>/fragment/CachedFragment.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
<url-pattern>/CachedPage2.jsp</url-pattern>
</filter-mapping>
<Ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="5"
timeToLiveSeconds="10"
overflowToDisk="true"
/>
<!-- Page and Page Fragment Caches -->
<cache name="CachePage1CachingFilter"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
overflowToDisk="true">
</cache>
<cache name="CachedPage2Cache"
maxElementsInMemory="10"
eternal="false"
timeToLiveSeconds="3600"
overflowToDisk="true">
</cache>
<cache name="SimplePageFragmentCachingFilter"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
overflowToDisk="true">
</cache>
<cache name="SimpleCachingHeadersTimeoutPageCachingFilter"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
overflowToDisk="true">
</cache>
</ehcache>
现在的问题是有些面要更斎ͼ在内存或者硬盘上的数据需要更斎ͼ而且是实时的。应该怎么办,|上多的也是对象的操作,基本没有~存面的操作?br />
首先说下~存面的大概方法?br />
ehcache.xml里面对应web.xmlQname都一LQ比如一个具体\径,show.action?showId=1,配置如下Q?br />
<filter-mapping>
<filter-name>show</filter-name>
<url-pattern>/show.action</url-pattern>
</filter-mapping>
取前面的部分可以了。对应ehcache.xml配置Q?br />
timeToIdleSeconds="120" timeToIdleSeconds Q多长时间不讉K该缓存,那么ehcache ׃清除该缓存?nbsp;
timeToLiveSeconds="240" timeToLiveSeconds Q缓存的存活旉Q从开始创建的旉v?br />
overflowToDisk="true" 是否写入盘
-->
<!-- Page and Page Fragment Caches -->
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="30"
timeToLiveSeconds="60"
overflowToDisk="true">
</cache>
q里只有一个cache,在ehcache卛_应一个Ehcache对象,由CacheManagerQ单例模式实玎ͼȝ理,在CacheManager里用配置文g中的name可以获取Ehcache对象的实例?br />
代码如下:
Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);
展示面有很多,比如一个商家一个展C页面,即show.action?showId=1后面的数字是可变的,在ehcache里面是用mapd储的Q比如show.action?showId=1对应的key为:
GET/show.actionshowId=1
GET问方式,把问号去掉了Qehcache内部也是q样存储的(cMmapQ,q样保证了请求的面在内存中的唯一性,获取也快?br />
既然key都知道了Q删除就好了Q直?查看api文档Ehcache里有很多removeҎ。示例代码如下:
Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);
if (null == cache) {
return;
}
cache.remove(key);
key的获取就不用多说了吧Q当更新一个页面的数据Ӟ肯定知道数据的idQ直接字W串处理下就可以获取key了,q里注意下就是,代码~写Ӟ一般url里都有项目的名字Q正式发布时Q肯定没有,而前者在ehcache里生成key里有目的名字,卻I
GET/projetName/show.actionshowId=1
所以最好用spring注入|到时改也方便?br />
更详l的Q请查看api文档和测试下Q官Ҏ档给的都是对象的Q页面缓存的l的比较,我也是查看源码才得出上面代码?br />
C下,希望帮助有需求的人?br />
]]>
]]>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
]]>
<s:param name="name">
<s:property value="name" /> ///q里会提交UTF-8~码
</s:param>
</s:url>
记得以前好像写过Q不q不知道攑֓里,今天用struts2.1.8+spring+hibernate做开发时Q又遇到q个问题Q写出来吧,下次好找Q?br />
面~码讄成UTF-8Q如何提交的中文?#8221;青云?#8220;,提交到action里变成了Q?img alt="" src="http://www.aygfsteel.com/images/blogjava_net/asdtiang/ffff.jpg" /> 38738其实是UTF-8~码Q自己写了一个类q行转化一个就行了?br />
private static MyConverter myConverter;
private StringBuffer str;
private char[] ch;
private MyConverter() {
}
public static MyConverter getMyConverter() {
if (myConverter == null) {
myConverter = new MyConverter();
}
return myConverter;
}
public String converter(String str3) {
if(str3==null){
return "";
}
str=new StringBuffer();
str.append("");
ch=str3.toCharArray();
for (int i = 0; i < ch.length; i++) {
if(ch[i]=='&'){
if(ch[i+1]=='#')
{
str.append(Character.toChars(Integer.parseInt(new String(ch,i+2,5))));
i+=7;
}
else{
str.append(ch[i]);
}
}
else{
str.append(ch[i]);
}
}
return str.toString();
}
}
使用Ӟ在action中,可能有中文提交的地方转化一下就行了?br />
MyConverter my = MyConverter.getMyConverter();
this.userName = my.converter(this.userName);
]]>
]]>一、find(String queryString);
]]>
试了下Q?nbsp; MyEclipse Enterprise Workbench 8.0.0.me200911192202-7a7Z-AEAjd9xel_OmPWSXgPz00jf不能安装Q?br />
spring ,struts,hibernate,都能安装
MyEclipse Standalone Modules 下面的都能安?br />
不过最好选自己需要的插gp了,多了也没用?br />
3?整合FLEX3?也是可以的?br />
截点囑Q?br />
]]>
ServletContextListener ?ServletContext 的监听者,如果 ServletContext 发生变化Q如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 要被销毁?
在JSP文g中,application ?ServletContext 的实例,由JSP容器默认创徏。Servlet 中调? getServletContext()Ҏ得到 ServletContext 的实例?
我们使用~存的思\大概是:
服务器启动时QServletContextListener ? contextInitialized()Ҏ被调用,所以在里面创徏好缓存。可以从文g中或者从数据库中d取缓存内容生成类Q用 ervletContext.setAttribute()Ҏ缓存类保存?ServletContext 的实例中?
E序使用 ServletContext.getAttribute()d~存。如果是 JSPQ用a pplication.getAttribute()。如果是 ServletQ? getServletContext().getAttribute()。如果缓存发生变?如访问计?Q你可以同时更改~存和文?数据库。或者你{? 变化U篏C定程序再保存Q也可以在下一步保存?
服务器将要关闭时QServletContextListener ? contextDestroyed()Ҏ被调用,所以在里面保存~存的更攏V将更改后的~存保存回文件或者数据库Q更新原来的内容?
在Struts中,我们可以写一个Servlet让它l承于ActionServletq覆 盖其init()ҎQ然后修改web.xml文g的Struts启动相关配置来达到目的?nbsp;
那么Q在Struts2中我 们应该怎么做呢Q?nbsp;
?span class="hilite1">Struts2中,我们可以写一个filter让它l承于FilterDispatcherq覆盖其 init()ҎQ然后修改web.xml文g?span class="hilite1">Struts2启动相关配置来达到目的?/span>
不管是Struts?span class="hilite1">Struts2q是其他的web层框Ӟ它们目前Z的技术都? ServletQ只要根据web.xml扑ֈ那个启动c,我们p通过覆盖该类的的init()Ҏ来实现系l的初始化工作?/p>
以上的实现方式都侵入了框架的原生c,利用Servlet 容器的特性我们可以更优雅的实现系l的初始化工作?/span> 我们可以写一个listener让它实现ServletContextListener? 口,在contextInitialized()Ҏ中做惛_的事情。将此listener配置到web.xml中,Servlet容器如tomcat? 在启动该web应用E序时调用此Ҏ?/span>