我有一个商品清单的action。下面叫category?keyword=手机<action name="category" class="categoryAction">
<result name="success">/WEB-INF/jp/category.jsp</result>
</action>
<bean id="categoryAction" class="com.x.action.CategoryAction">
<property name="dao" ref="dao">
</bean>
下面这个pageBar就是一个分页数,内容为:1 2 3 4 5
public class CategoryAction{
private List list;
private StringBuilder pageBar;
public String execute(){
pageBar=new StringBuilder();//这里会给这些对象放数据
list=new ArrayList();//从数据库查出数据。
}
}这里有两个用户
同时访问category 这个action当第一个用记点击第二页,第二个用户点击第三面,这时候,2个用户都同时显示第二页,也可能同时出现在第三页。给我的感觉是没有同步线程。可是网上都是这样做的。
<result name="success">/WEB-INF/jp/category.jsp</result>
</action>
<bean id="categoryAction" class="com.x.action.CategoryAction">
<property name="dao" ref="dao">
</bean>
下面这个pageBar就是一个分页数,内容为:1 2 3 4 5
public class CategoryAction{
private List list;
private StringBuilder pageBar;
public String execute(){
pageBar=new StringBuilder();//这里会给这些对象放数据
list=new ArrayList();//从数据库查出数据。
}
}这里有两个用户
同时访问category 这个action当第一个用记点击第二页,第二个用户点击第三面,这时候,2个用户都同时显示第二页,也可能同时出现在第三页。给我的感觉是没有同步线程。可是网上都是这样做的。
public String execute(){
//加了sleep之后 ,更加明显两个线程同时进入。也同时退出。
try {
Thread.currentThread().sleep(300l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pageBar=new StringBuilder();//这里会给这些对象放数据
list=new ArrayList();//从数据库查出数据。
}
怎么会这样。
//这是spring对象
<interceptor name="cookie" class="cookieInterceptor"/>
//这是struts2自己会new的对象
<interceptor name="cookie" class="com.huayiluo.commonality.CookieInterceptor"/>public class CookieInterceptor extends MethodFilterInterceptor{
public String doIntercept(final ActionInvocation invocation) throws Exception {
//我在这里需要查询数据器,检查cookie是不是有历史记录//我怎么样才能调用出hibernate对象,也就是创建一个新的hibernate可以适合在这个ssh结构下。
}
}
写一个类,实现 org.springframework.context.ApplicationContextAware 接口,代码大致如下:import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;public class SimpleApplicationContext implements ApplicationContextAware { private static ApplicationContext applicationContext; // 这里涉及对一个静态字段的赋值会有警告,不过由于 Spring 默认采用的是单例,因此这相警告可以忽略
@SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
} public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
} public static boolean containsBean(String beanName) {
if(Tools.isBlank(beanName)) {
return false;
}
return applicationContext.containsBean(beanName);
} @SuppressWarnings("unchecked")
public static <T> T getBean(String beanName, Class<T> clazz) {
return (T)getBean(beanName);
} public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}在 Spring 的配置中加上这句:<bean id="simpleApplicationContext" class="com.test.spring.SimpleApplicationContext" />然后在代码中用 SimpleApplicationContext.getBean(name); 就可以了。Spring 中有两个,一个是 ApplicationContextAware,还有一个是 BeanFactoryAware。我感觉这些都是 Spring 中的基础,像我这种不会 SSH 的人都知道的!
谢谢了,我也不会ssh。都没有基础。