`

Ajax servlet实现

    博客分类:
  • Ajax
阅读更多
之前用struts2.0做了异步请求,但总感觉有问题,请求次数太多后服务端就会挂起无响应了
正在解决这个问题

最开始用了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


搞不定了 等宿老回来再说了~
分享到:
评论

相关推荐

    AJAX Servlet实现数据异步交互的方法

    AJAX Servlet实现数据异步交互的方法 本篇文章主要介绍了AJAX Servlet实现数据异步交互的方法,通过使用Servlet作为服务器端程序,使用AJAX技术实现客户端与服务器端的数据异步交互。 标题解释 AJAX Servlet实现...

    Ajax+servlet实现搜索框智能提示

    在这个"Ajax+servlet实现搜索框智能提示"的主题中,我们将探讨如何利用Ajax技术和Servlet来创建一个实时、动态的搜索框,提供智能的用户输入建议。 首先,让我们了解Ajax的基本原理。Ajax的核心是XMLHttpRequest...

    ajax 聊天系统 servlet

    **Ajax聊天系统与Servlet** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,为用户提供了更...

    servlet+mysql+jsp+ajax 注册 登陆 查询 修改 的简单demo

    这是一个基于Servlet、MySQL、JSP和Ajax技术的Web应用程序示例,主要实现了用户注册、登录、查询和修改信息的功能。接下来,我们将详细讨论这些技术及其在项目中的应用。 首先,Servlet是Java EE平台中用于处理HTTP...

    Ajax + servlet 实现上传进度条显示

    利用Ajax和Servlet实现文件上传,用来commons-fileupload和commons-io两个包。这两个包也在里边。东西做的很简单,但重点是能对这个方法有所了解就行了,有人想做的更炫的可以自行修改。希望能对大家有所帮助。如果...

    ajax+servlet

    ajax+servletajax+servletajax+servletajax+servletajax+servletajax+servletajax+servletajax+servletajax+servletajax+servlet

    html+Servlet+ajax实现登录修改

    在IT领域,构建Web应用程序是常见的任务之一,而"html+Servlet+ajax实现登录修改"是一种常见的技术组合,用于创建动态、交互式的用户界面。在这个项目中,我们使用HTML作为前端展示层,Servlet作为服务器端处理逻辑...

    Ajax+servlet实现登录和图书数据库的增删改查。

    本项目主要涉及使用Ajax和Servlet来实现一个基础的图书管理系统的登录功能以及图书数据的增删改查操作。以下是对这些技术及其应用的详细解释: 首先,让我们理解Ajax(Asynchronous JavaScript and XML)的核心概念...

    Ajax+Servlet 实例

    在这个实例中,我们将深入探讨如何使用Ajax与Servlet结合,以实现更高效、更流畅的用户界面。 ### 1. 创建Ajax请求 在Ajax中,我们通常使用JavaScript的XMLHttpRequest对象或其现代版本——fetch API来发送请求。...

    Ajax+servlet实现搜索提示列表效果

    在Java Web开发中,"Ajax + Servlet 实现搜索提示列表效果"是一个常见的需求,它能够提升用户在输入查询时的体验。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页...

    AjaxServlet

    AjaxServlet是一个基于Ajax、Servlet和JSP技术的搜索框开发示例。这个项目展示了如何使用这些技术来实现页面异步更新,提供用户友好的搜索体验。在传统的Web应用中,每当用户提交表单,整个页面都需要刷新以显示新...

    jsp+servlet+ajax实现登录

    在IT行业中,构建Web应用程序是常见的任务之一,而"jsp+servlet+ajax实现登录"的案例则是一个典型的前后端交互示例。这个案例利用了JavaServer Pages (JSP)、Servlet和Asynchronous JavaScript and XML (AJAX)的技术...

    ajax+servlet原生实现智能提示框

    在这个"ajax+servlet原生实现智能提示框"的主题中,我们将深入探讨如何利用这两项技术来创建一个实时、动态的用户输入提示功能。 首先,让我们理解智能提示框的基本概念。在许多Web应用中,当用户在输入框中键入...

    Ajax和servlet数据交互小实例

    在本文中,我们将深入探讨如何使用Ajax和Servlet进行数据交互,以及如何实现一个简单的数据验证功能。Ajax(异步JavaScript和XML)技术允许我们在不刷新整个网页的情况下与服务器交换数据和更新部分网页内容,而...

    ajax与Servlet交互

    使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Servlet的交互开始。

    使用ajax和servlet实现网页局部刷新

    在网页开发中,为了提供更好的用户体验,我们常常需要实现页面的局部刷新,而Ajax(Asynchronous JavaScript and XML)和Servlet的结合使用正是实现这一功能的关键技术。本篇将详细讲解如何利用Ajax与Servlet来实现...

    JSP+Servlet+AJAX的dao设计模式

    在`TestJSP`这个文件中,可能包含了实现上述步骤的示例代码,如DAO接口和实现类、Service类、Servlet处理类以及使用AJAX的JSP页面。通过分析和学习这些代码,你可以更好地理解JSP、Servlet、AJAX和DAO设计模式如何...

    ajax,servlet动态加载dtree

    在本项目"ajax,servlet动态加载dtree"中,我们看到的是利用Ajax技术和Servlet实现dtree(一种树形菜单控件)的动态加载。这个项目可能是一个文件管理系统或者目录浏览应用,其中dtree用于展示文件或目录结构,而...

    javaIDEA新手研究的ajax访问servlet,html获取后台数据

    本项目是针对初学者设计的,主要涉及的知识点是利用Ajax技术与Servlet进行交互,从而实现HTML页面动态获取后台数据。我们将详细探讨这些关键概念和技术。 首先,Ajax(Asynchronous JavaScript and XML)是一种在不...

Global site tag (gtag.js) - Google Analytics