之前用struts2.0做了异步请求,但总感觉有问题,请求次数太多后服务端就会挂起无响应了
正在解决这个问题
最开始用了struts.spring,hibernate三层来做,后来觉得hibernate可能会成为瓶颈,就直接改用jdbc做数据层,更改后貌似增大了请求次数
不过还是有问题,上论坛发了帖子,发现js出了点问题,做延时提交的时候没有清除定时器,导致请求几次仍然是提交几次,每次都给服务端造成了无端的压力
更改成
后实现了真正的延时请求
不过多次请求无响应的问题仍然存在,数据源是用的JNDI,是整个项目配的,我也管不了
看来还是得从程序入手了
猜测可能是struts的问题,于是乎想改用servlet直接做
不过问题来了,之前struts中的service对象是采用spring依赖注入的
有个struts2-spring-plugin.jar的支持,而直接用servlet的话就实现不了了
于是百度之后得到了答案(最近其实用google也多了,不过都是在百度不到的时候用的……呵呵),通过ServletContext来或得ApplicationContext
具体的意思我也还不明白,总之是拿到sessionfactory中的对象了
然后传递中文出现了问题,服务端response回的中文出现乱码了(又来了……)
通过对uri进行编码才得以解决,代码如下
页面上解析返回的数据也要改变一下,用
现在是把整个异步提交改成了Servlet+JDBC 不过请求次数多了还是会报错
搞不定了 等宿老回来再说了~
正在解决这个问题
最开始用了struts.spring,hibernate三层来做,后来觉得hibernate可能会成为瓶颈,就直接改用jdbc做数据层,更改后貌似增大了请求次数
不过还是有问题,上论坛发了帖子,发现js出了点问题,做延时提交的时候没有清除定时器,导致请求几次仍然是提交几次,每次都给服务端造成了无端的压力
更改成
clearTimeout(time);
time = setTimeout('passtoserver()',1000);//设置延时1s
后实现了真正的延时请求
不过多次请求无响应的问题仍然存在,数据源是用的JNDI,是整个项目配的,我也管不了
看来还是得从程序入手了
猜测可能是struts的问题,于是乎想改用servlet直接做
不过问题来了,之前struts中的service对象是采用spring依赖注入的
有个struts2-spring-plugin.jar的支持,而直接用servlet的话就实现不了了
于是百度之后得到了答案(最近其实用google也多了,不过都是在百度不到的时候用的……呵呵),通过ServletContext来或得ApplicationContext
//通过servletContext来拿ApplicationContext
ServletContext context=getServletContext();
WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
TBasicinfoDAO tbasicinfodao =(TBasicinfoDAOImpl) webContext.getBean("tbasicinfodao");
具体的意思我也还不明白,总之是拿到sessionfactory中的对象了
然后传递中文出现了问题,服务端response回的中文出现乱码了(又来了……)
通过对uri进行编码才得以解决,代码如下
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过servletContext来拿ApplicationContext
[color=red]ServletContext context=getServletContext();
WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context); [/color]
TBasicinfoDAO tbasicinfodao =(TBasicinfoDAOImpl) webContext.getBean("tbasicinfodao");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String start=request.getParameter("start");//异步传输过来的查询条件
names = new ArrayList<String>();
if(!start.equals(null)&&!start.equals(""))
{
List<TBasicinfo> list = tbasicinfodao.getSearchInfo(start.trim());//根据查询条件查询
JSONObject option = new JSONObject();
try {
TBasicinfo tmp=null;
String encode=null;
for(int i=0; i<list.size(); i++)
{
tmp=new TBasicinfo();
tmp=list.get(i);
option.put("value", tmp.getEmpno());
// java.net.URLEncoder.encode(tmp.getName(), "gbk");
option.put("name", [color=red]java.net.URLEncoder.encode(tmp.getName(), "utf-8"));[/color]
///option.put("name", tmp.getName());
option.put("pinyin",tmp.getNamespell());
names.add(option.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
[color=red]response.setHeader("Charset","gbk");
response.setCharacterEncoding("gbk");[/color]
}
out.print(names);
}
页面上解析返回的数据也要改变一下,用
var decodede=decodeURI(request.responseText);
来实现现在是把整个异步提交改成了Servlet+JDBC 不过请求次数多了还是会报错
之前出现的是thread.run() not availiable;
改用servlet实现异步提交后出现的问题
严重: Servlet.service() for servlet FindTableValueServlet threw exception
org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:420)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at edu.bit.cctv.hr.dao.impl.Ttwz_stacontDAOImpl.getStatisticItem(Ttwz_stacontDAOImpl.java:22)
at edu.bit.cctv.generalsearch.service.impl.DispViewServiceImpl.dispStatisticItem
(DispViewServiceImpl.java:59)
at edu.bit.cctv.generalsearch.action.FindTableValueServlet.doPost(FindTableValueServlet.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for
idle object
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection
(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
... 36 more
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:825)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
... 39 more
搞不定了 等宿老回来再说了~