1.servlet线程安全吗 怎样避免?
Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求。所以Servlet是线程不安全的。
有几种方法可以实现Servlet线程安全:
1,实现 SingleThreadModel 接口的servlet是线程安全的
2,用synchronized同步对共享数据的操作
3,避免使用实例变量
Servlet的优势在于多线程,高并发。第一种方法其实就是扼杀了其并发性能,所以不推荐在高并发的业务环境下使用。
2.web启动线程
调用servlet的时候,启动线程就ok了
不要用listener,如果用了,tomcat启动就会加载,会提高tomcat内存用量
3.spring事务控制调用存储过程,存储过程中commit了还可以rollback吗?
commit后就不能rollback了
4.查询缓存是什么
通过SQL查询的话,是不会经过hibernate的缓存的
hibernate中 ,使用createSQLQuery(sql)查询,在开启getHibernateTemplate().setCacheQueries(true);后,执行到query.list();报异常:java.lang.ArrayIndexOutOfBoundsException: 0
当把关闭缓存getHibernateTemplate().setCacheQueries(false)能正常返回。
原因估计是createSQLQuery返回的对象不受hibernate 管理,因此对其设置缓存失效。
5.Struts2+Spring+Junit单元测试
使用Junit对Struts+spring系统进行单元测试,好处是不用启动tomcat等容器。
简单实例代码如下:
[java] view plain copy
-
importorg.apache.struts2.StrutsSpringTestCase;
-
publicclassActionTestextendsStrutsSpringTestCase{
-
@Override
-
protectedStringgetContextLocations(){
-
return"classpath*:applicationContext*.xml";
-
}
-
publicvoidtestAll()throwsException{
-
request.addParameter(“id”,“1”);
-
Stringres=executeAction(“/test.action”);
-
System.out.println(res);
-
}
-
}
主要是继承StrutsSpringTestCase类。
测试用例中,action返回的数据为json,res即为response的内容。
6.监听器的顺序
1,一个webServlet里面若有多个监听器的话,顺序是按照加载的顺序来加载和注册的这些servlet监听器的
2,优先级:
监听器.>过滤器>Servlet