如何用java判断是否ajax请求模拟ajax数据更新请求

博客分类:
一.ajax 跨域理论基础
二.ajax 跨域问题 的一个演示小例子
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-/loose.dtd"&
&HTML xmlns="http://www.w3.org/1999/xhtml"&
&HEAD&&TITLE&AJAX跨域验证&/TITLE&
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
function hello() {
var url = '';
createXMLHttpRequest();
xmlHttp.onreadystatechange = showR
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
function showResponse(){
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById("result").setAttribute("value",xmlHttp.responseText) ;
&input type="button" value="hello" onclick="hello()"&&br/&&br/&
&textarea id="result" name="result" cols=100 rows=100 &&/textarea&
1.以上的网页对这个测试页面只有在一种情况下才能正常执行:就是通过IE打开本地文件。如果用FireFox就算是通过本地文件打开它也不能正常运行(firefox 对跨域要求比较严格)
2.把这个页面放在TOMCat 上跑 效果也是一样的
三.一个自己写的 ajax 请求代理
问题:工作环境使用的代理的方式上网,甲方因为一些原因吧google给屏蔽了,上网搜东西只能用百度了,可是百度真差劲,搜技术问题没有google 搜的全,因此想到使用google 的搜索api
使用帮助 见:
这个google 搜素 对外提供一个ajax 服务,由于局方封锁的是
可以逃过一劫,因此考虑 ajax 技术 调用远端 google 提供的ajax搜素服务,将返回的json的 搜索结果解析后显示在页面上,然后将这个简单的服务 放在 websphere 供大家使用,类似这样
http://***.***.***.***:9090/google
这时候就遇到ajax 的跨域问题了,因为这个ajax 请求访问了 公网的
,这个外部地址和 上下文根 /google 不在同一个域中 ,因此 外网用户无法使用 IE 是 弹出一个提示框 ,确认后勉强可以使用,而火狐对ajax 跨域要求严格,不能使用ajax 服务
解决方案:
ajax 去请求 上下文跟下的一个servlet -&& servlet 中 构造一个 httpclient 对象 去请求 google ajax 服务--》》 最后将结果JSON 数据返回到前台
ajax 请求代理
.xinli.action.
import java.io.OutputStreamW
import javax.servlet.ServletOutputS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import mons.httpclient.HttpC
import mons.httpclient.HttpM
import mons.httpclient.methods.GetM
import org.apache.log4j.L
import org.apache.struts.action.ActionF
import org.apache.struts.action.ActionF
import org.apache.struts.action.ActionM
.xinli.action.BaseA
public class GoogleSearchAction extends BaseAction
Logger log=Logger.getLogger(GoogleSearchAction.class);
public ActionForward doIt(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
//设置代理服务器地址和端口
HttpClient client = new HttpClient();
//client.getHostConfiguration().setProxy("172.100.1.28",8080);
//使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
client.setTimeout(6000);
String queryString=request.getQueryString();
("queryString&&&&&&&&&:"+queryString);
HttpMethod method = new GetMethod("/ajax/services/search/web?&rsz=large&v=1.0"+queryString);
//使用POST方法
//HttpMethod method = new PostMethod("");
client.executeMethod(method);
//打印服务器返回的状态
("服务器返回的状态:"+method.getStatusLine());
//打印返回的信息
String result=
result=method.getResponseBodyAsString();
// ("返回的信息:"+result);
method.releaseConnection();
/*将结果写到输出流里面*/
ServletOutputStream out = response.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(out,"utf-8");
ow.write(result);
ow.flush();
ow.close();
response.setContentType("text/charset=UTF-8");
response.getWriter().write("&script type='text/javascript'&alert(1);&/script&");
经过这样一番周折,使用servlet 作为 ajxa 请求代理,解决了跨域问题
附件中是完整的项目 在eclipse 中直接可以使用
(Ext+HttpClient)
遗留问题: 没有解决 搜索结果的分页问题, api中看到 请求参数中加 这样 start=一个整数
可以完成翻页,没有试验!
下载次数: 60
浏览: 558618 次
来自: 西安
&div class=&quote_title ...
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
博主 我利用您提供的方法实现博文中介绍的clickstream ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'用户名:pangfc
文章数:286
评论数:92
访问量:221186
注册日期:
阅读量:1297
阅读量:3317
阅读量:582219
阅读量:466894
51CTO推荐博文
一 简介和实现效果这里用一个小例子来简单举例说明,做一个搜索引擎搜索提示效果,通过不断输入字符,然后在下方给出搜索提示。效果图如下:通过上图可以看到,当输入一个“a”时,提示了很多内容,然后继续输入一个“e”后,提示的范围明显就变小了。注:在文末我会给出完整源代码的下载链接,以供大家参考650) this.width=650;" src="/wp-content/plugins/kindeditor-for-wordpress/plugins/emoticons/images/73.gif" border="0" alt="" style="border:0vertical-align:height:" />二 具体实现1 在eclipse for java ee中创建一个Java Web工程,然后导入相应的jar包,特别说明的是:这里要导入一个额外的dwr.jar。也就是说,如果在Struts2工程中,除了要导入Struts2相关的jar包外,还要导入一个dwr.jar。可以自行在网上下载,也可以通过文末的下载链接下载。2 配置好数据库连接,连接MySQL中的“mysql”这个库来做测试,并定义一个方法getKeyWord(String key),以供我们待会调用,目的是给定一个字符串,然后在“help_keyword”这个表中进行模糊查询,然后返回结果。DbConn.java:package&com.
import&java.sql.C
import&java.sql.PreparedS
import&java.sql.ResultS
import&java.sql.SQLE
import&javax.naming.InitialC
import&javax.sql.DataS
public&class&DbConn&{
&*&通过JNDI连接池的方式
public&static&Connection&getConnection(){
InitialContext&context&=&new&InitialContext();
DataSource&dSource&=&(DataSource)&context.lookup("java:comp/env/jdbc/mysql");
Connection&conn&=&dSource.getConnection();
}&catch&(Exception&e)&{
e.printStackTrace();
public&String&getKeyWord(String&key){
Connection&connection&=&getConnection();
PreparedStatement&preparedStatement&=&connection.prepareStatement("select&name&from&help_keyword&where&name&like&?");
preparedStatement.setString(1,&key&+&"%");
ResultSet&resultSet&=&preparedStatement.executeQuery();
StringBuffer&stringBuffer&=&new&StringBuffer();
while(resultSet.next())
stringBuffer.append(resultSet.getString(1)&+&"&br&");
resultSet.close();
connection.close();&&//不关的话,在JNDI模式下查询10次以后就会被卡死
return&stringBuffer.toString();
}&catch&(SQLException&e)&{
//&TODO&Auto-generated&catch&block
e.printStackTrace();
return&"";
}help_keyword这个表:3 定义一个Action “KeyAction.java”,主要是定义了一个方法“getName(String key)”,用于调用dao层的数据库操作,返回查询到的数据,同时这个方法也被我们前台调用,然后取得数据并显示。(PS:业务逻辑层biz省略了)KeyAction.java:package&com.
import&com.dao.DbC
import&com.opensymphony.xwork2.ActionS
public&class&KeyAction&extends&ActionSupport&{
private&static&final&long&serialVersionUID&=&1L;
public&String&getName(String&key)throws&Exception{
DbConn&dbConn&=&new&DbConn();
return&dbConn.getKeyWord(key);
}4 配置DWR框架(1)在web.xml中增加如下节点:&!--&dwr&--&
&&&servlet&
&& &servlet-name&dwr-invoker&/servlet-name&
&& &servlet-class&org.directwebremoting.servlet.DwrServlet&/servlet-class&
&init-param&
&param-name&debug&/param-name&
&param-value&false&/param-value&
&/init-param&
&&&/servlet&
&&&servlet-mapping&
&& &servlet-name&dwr-invoker&/servlet-name&
&& &url-pattern&/dwr/*&/url-pattern&
&&&/servlet-mapping&(2)在web.xml同目录下新建DWR配置文件:dwr.xml(PS:WebContent/WEB-INF/dwr.xml)。特别说明的是,这里的new表示每次调用都用新建的方式;javascript这个参数是指定一个实例化名称,可以随意命名,但是要和前台的JavaScript里相对应。method这个参数是指调用com.action.KeyAction这个类中的哪个方法,我们这里当时是“getName”dwr.xml:&?xml&version="1.0"&encoding="UTF-8"?&
&!DOCTYPE&dwr&PUBLIC&"-//GetAhead&Limited//DTD&Direct&Web&Remoting&3.0//EN"&"http://directwebremoting.org/dwr/dwr30.dtd"&
&create&creator="new"&javascript="KeyWord"&
&param&name="class"&value="com.action.KeyAction"&&/param&
&include&method="getName"/&
&/dwr&5 前台调用,新建一个index.jsp,用于显示效果。其中有一些简单的jQuery语法,具体细节可自行参考,注意的是,JavaScript中的“KeyWord.getName(key,callBack);”才是进行数据异步传送的关键,通过KeyWord实例调用getName()方法取得的数据被函数callBack获得,然后再将相关数据写入页面中,实现页面局部刷新index.jsp:&%@&page&language="java"&contentType="text/&charset=UTF-8"
&&&&pageEncoding="UTF-8"%&
String&path&=&request.getContextPath();
String&basePath&=&request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE&html&
&meta&http-equiv="Content-Type"&content="text/&charset=UTF-8"&
&base&href="&%=basePath%&"&
&title&Struts2&Ajax&Google&/title&
&script&type='text/javascript'&src='dwr/engine.js'&&/script&
& &script&type='text/javascript'&src='dwr/interface/KeyWord.js''&&/script&
& &script&type="text/javascript"&src="js/jquery-1.11.3.min.js"&&/script&
& &script&type="text/javascript"&
$(document).ready(function(){
$("#search").keyup(function(){
var&key&=&$("#search").val();
KeyWord.getName(key,callBack);
function&callBack(data){
$("#result").html("&b&"&+&data&+&"&/b&");
& &/script&
&div&align="center"&
&img&src="img/logo.jpg"&style="padding-top:58height:350width:650"&&br&&br&
&input&type="text"&id="search"&style="width:600height:38font-size:20font-weight:"&
&input&type="button"&id="sub"&value="Google&搜索"&style="height:40"&&br&
&div&id="result"&&/div&
&/html&三 测试附:源代码下载链接:(PS:如果没有下载豆的话,可以看我个人博客上的这篇文章,里面有百度云盘的链接。传送门:)本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)Ajax异步刷新,写入数据库,并且更新页面内容
需要的语言工具Java+JavaScript+Html
1、先建立一个XMLHttpRequest对象,根据浏览器的不同需要分别建立
2、定义处理服务器返回信息的函数
3、定义按键动作
最直接的更改页面元素的方法就是调用js函数然后使用document对象来选定页面元素,可以用名字检索也可以用ID检索。
PS:32位的myeclipse比较推荐,64位系统的也能安装,功能齐全,而64位的功能欠缺,比如js的调试功能,刚开始的时候js的调试方式很不一样,第一次体会到脚本语言的差别对于初学者来说,没办法调试javascript代码的话,很多错误也就不会发现。我就因为文本编辑器本身不带自动拼写检查,导致出现一些拼写错误,而直接运行整个网站的时候debug是不包含javascript的。而myeclipse中有专门的模式可以调试javascript代码
可以在javascript中利用xmlhttprequest将信息送给servlet类。而这种方法有两种,一个是get一个是post,比较明显的区别是get是直接在url地址中加上要传递的信息。而url的形式大多是这样的Action?param1=&xxx&&param2=&xxxx&其中用?来区分活动名称也就是在web.xml中url-pattern中的名字。这里要注意一点,有的时候利用struts框架的时候,经常会捕获/*这样的串,将其解析成一个Action,而我们要传递给Servlet类的url也满足这样的串,因此就需要让我们的url不被捕获到,否则就无法正确地传递信息。可将其改成Action.servlet?param1=&xxx&&param2=&xxx&。这样就不会被捕获了。对立的可以修改Action的url模式,并更改过滤器从而达到区分的目的。
如何取得request中的变量?
Action.servlet?param1=&xxx&&param2=&xxx&,用request.getParamter(&param1&)就可以获得param1后面的那个xxx了,param2 类似。
到此为止,就完成了从jsp页面把信息传递到js代码(javascript),再从js代码绕过struts,用XMLHttpRequest传递到java代码(servlet)。
常犯的一个错误就是在java中只对变量进行了声明但是没有给它分配空间,导致一些我看不懂的错误。这是从C/C++带来的习惯。
如何用response返回一个信息待续........
本文已收录于以下专栏:
相关文章推荐
初入职场,在这程序员一抓一大把的时代,要生存,就要什么都要学一点,什么都要会一点。在java世界里目前充斥着各种框架,struts,spring……但究其根本还是离不开servlet,故鄙人从java...
在Web开发中,前台和后台的数据交互是十分频繁的, 而JQuery对Ajax进行了封装,使得前台向后台发送数据变得十分简单。Ajax如何向后台传递数据
index.jsp页面代码
My JSP 'index.jsp' starting page
function Chec...
最近头儿让写一个类似于navicat可视化工具的查询界面,要求在单一jsp界面完成,由于本人水平有限,用了好几天才搞定,现把代码记录于此,以便日后查阅。
知识点:jqueryajax、jdbc数...
pageEncoding=&UTF-8&%&
修改客户信息
    body{ font-family:Arial, Helvetica, ...
以上篇博文源码为样例fork,介绍Ajax异步访问数据信息,以下为新增内容
控制层control() – 新增内容
URL: .\control\QueryBookServlet.java;
Java+JSP+Oracle+Ajax前台显示数据库数据
在这个例子中,我们将使用Java查询Oracle数据库里面的数据并在前台JSP页面显示。
Java连接Oracle数据库请参...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)/*************--:
如何使用Java模拟登陆ajax+js的onclick事件post数据的网站****/ - ITeye问答
&&&&& 最近在试着做一个如上所述的程序. 目前用的是HttpClient包. 发现并不能通过. 没找到别的方法,望诸位能帮忙出出主意. 目标网站在登陆界面是用户点击登陆,触发onclick事件后提交数据,局部刷新数据的.
问题补充:javahead 写道HttpClient完全可以实现网络通信,建议到网上下载几个教程和例子,仔细研究下
Java控件模型都有很好的封装,创建销毁,做局部刷新是再正常不过的了
谢谢你热心的回答.是这样,我用http头查看工具看了对方传递的参数,然后我把他的参数post过去之后总是不能成功, 你可否给我看一下?
问题补充:javahead 写道不太明白你的意思,HttpClient是用来提交请求的,只需要服务器的地址和端口就可以了,例如一个Serverlet,处理完后返回,可在PostMethod中取得返回的内容
我提个无理的要求,我能加你好友向你请教吗? 实在是让它烦透了.
不太明白你的意思,HttpClient是用来提交请求的,只需要服务器的地址和端口就可以了,例如一个Serverlet,处理完后返回,可在PostMethod中取得返回的内容
HttpClient完全可以实现网络通信,建议到网上下载几个教程和例子,仔细研究下
Java控件模型都有很好的封装,创建销毁,做局部刷新是再正常不过的了
已解决问题
未解决问题其他回答(1)
可以参考下这个文档说明,很详细
/developmentSkills/useAJAX.html
&&&您需要以后才能回答,未注册用户请先。}

我要回帖

更多关于 java处理ajax请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信