浅讲ajax

1.ajax入门案例

1.1 搭建Web环境

ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

对于JavaWeb项目而言,ajax主要用于浏览器和服务器之间数据的传输。

如果是单单地堆砌知识点,会显得比较无聊,那么根据惯例,我先不继续介绍ajax,而是来写一个案例吧。

打开eclipse,新建一个web项目。

如果对JavaWeb项目还不太清楚的,可以去参考我之前的文章。我

目录结构:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>

</web-app>

这样就好了,web项目搭建完毕。

暂时不要往下写,先确保我们到目前为止的工作是没问题的。

验证方法就是在WebContent目录下,新建一个空的jsp页面,里面随便写的什么。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body style="padding:100px">
<h1>Hello World</h1>
</body>
</html>

启动tomcat,把这个项目跑起来。

没报错。

打开浏览器,输入访问地址,我这里的tomcat端口号是80 ,默认可以不写。

http://localhost/ajax/index.jsp

来了,没问题。

好的,这说明我们的web项目搭建没有问题。

1.2 编写服务器程序Servlet

个人感悟,精粹整理

web环境已经搭好,接下来,让我们来编写一个简单的Servlet程序,tomcat是一个服务器,现在它里面有一个名字叫做ajax的web项目,那么这些Servlet就好比是web项目里面的一个个小功能。

你的电脑里面有QQ,Word,杀毒软件等程序。一个web项目,也就是一个应用程序。本质上和你电脑上的QQ概念是一样一样的。

你打开QQ,可以聊天,语音,视频。这些小功能,类比到JavaWeb项目,就是一个个Servlet。

很多人都知道框架,比如大名鼎鼎的SpringMVC,里面有一个个的Controller,其实这些Controller到底是什么玩意,不要怕,他们其实就是对Servlet做了一个封装,本质上还是一样一样的。

我们写一个Servlet,都需要去web.xml里面注册一下,否则就用不了。你安装一个QQ,注册表里面是不是肯定也需要注册一下啊,这不还是一样一样的吗?

好了,闲话不多说。我们来写一个小功能,也就是一个Servlet。

继承HttpServlet,同时改写doGet方法

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("111");
    }
}

里面我们先什么也不写。

接下来,我们要在web.xml里面把这个Servlet注册一下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <!-- 这里是servlet的名字 -->
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
        <!-- 这里写servlet类在的包路径 -->
    </servlet>

    <servlet-mapping>
        <!-- 这里是地址映射 -->
        <servlet-name>MyServlet</servlet-name>

        <!-- 这里写servlet映射地址 -->
        <url-pattern>/MyServlet</url-pattern>

    </servlet-mapping>

</web-app>

OK,Servlet注册完毕,我们先来访问一下这个功能。

重启tomcat。

访问:http://localhost/ajax/MyServlet

1.3 前台页面设计

服务器小程序已经差不多了,现在我们为了和服务器进行交互,就需要编写前台页面。这个页面也就是给用户看的。换言之,用户只能通过前台页面来访问我们的Servlet。

我们来写一个小案例,在页面上发送一句话到服务器,然后服务器给出一个回应就行了。

就是这么一个简单的案例,主要用来熟悉一下流程。

为了简单起见,我就不自己调css样式了,直接用bootstrap吧。

引入bootstrap的核心css文件。

?

然后,修改index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css">
<title>Insert title here</title>
<style type="text/css">
    .container {
        margin-top:100px;
    }
</style>
<script>

    window.onload = function(){
        var btn = document.getElementById("submit");
        btn.onclick = function(){
            alert();
        }
    };

</script>
</head>
<body>
    <div class="container">

        <div class="row">
          <div class="col-lg-8">
            <div class="input-group">
              <input type="text" class="form-control">
              <span class="input-group-btn">
                <button id="submit" class="btn btn-default" type="button">提交</button>
              </span>
            </div>
          </div>

        </div>
    </div>
</body>
</html>

页面效果:

1.4 基于get方式的数据请求

当我们点击提交按钮,就alert()一下,如果成功的话,那么说明点击事件没有问题。然后,继续往下写代码。

如果是以往,我们都是通过form表单来进行提交的,可是这样的话,就会有一个问题,就是页面会刷新,而且代码也相对比较难懂。

自从ajax出来了之后,这种情况得到了巨大的改善,局部刷新技术在当时来看,还是非常不错的。

我先把实现代码给出:

btn.onclick = function(){
    var  xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open("get","MyServlet?message="+document.getElementsByTagName("input")[0].value,true);
    xhr.send();
    xhr.onreadystatechange = function(){
        if(xhr.readyState==4 && xhr.status==200){
            alert(xhr.responseText);
        }
    };
}

同时修改一下MyServlet

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String msg = req.getParameter("message");
    System.out.println(msg);
}

重启 tomcat ,访问index.jsp页面。

现在的浏览器一般都有调试功能,按一下F12,调试界面就出来了。然后,找到一个network,以谷歌浏览器为例

network视图会把所有的数据交互显示出来,包括引入的 js , css文件,还有各种请求和回应,都会在这里显示出来。

比如,现在我刷新一下页面

我这么一刷新,首先服务器接收到的是这么一个 URL: http://localhost/ajax/index.jsp

这就是一个请求,服务器收到这个请求后,返回给我 index.jsp页面和bootstrap.min.css这个文件。

因为我在index.jsp的确引入过bootstrap.min.css,所以他也就一起加载进来了。

现在,我输入一句话,点击提交,看看会发生什么?

我们把input框里面的内容提交到服务器程序 MyServlet

控制台已经接受到了,这里比较幸运,没有遇到中文乱码的问题,那么先不管乱码了。

因为MyServlet中没有返回什么东西,所以alert出来的是空。

好的,那我们给浏览器也返回一句话吧。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String msg = req.getParameter("message");
    System.out.println(msg);

    resp.setContentType("text/html;charset=utf-8");
    PrintWriter out=resp.getWriter();
    out.println("你好,这是服务器返回的信息!");
    out.flush();
    out.close();

}

再次点击提交按钮

OK了。

?接下来,看一下请求的具体信息

在比对一下js代码,就一目了然了。

btn.onclick = function(){
    var  xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open("get","MyServlet?message="+document.getElementsByTagName("input")[0].value,true);
    xhr.send();
    xhr.onreadystatechange = function(){
        if(xhr.readyState==4 && xhr.status==200){
            alert(xhr.responseText);
        }
    };
}

readyState:

0: 请求未初始化
1: 服务器连接已建立,还没发送
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
当 readyState 等于 4 且状态为 200 时,表示响应已就绪.

请求方式是get,并且只有当返回的状态码为200的时候,才会打印出responseText,这个就是对应的

?out.println("你好,这是服务器返回的信息!");

这句话。

1.5 基于post方式的数据请求

get方法会在URL地址栏里显示你提交所带的值,post方法不会。所以,相对来说,post方法比较安全。

post方法在流程上和get方式差不多,我就直接上代码了:

window.onload = function(){
    var btn = document.getElementById("submit");
    btn.onclick = function(){
        var  xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
        xhr.open("post","MyServlet",true);
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        var postData = {message : document.getElementsByTagName("input")[0].value};

        var postDataStr = (function(obj){ // 转成post需要的字符串.
            var str = "";
            for(var prop in obj){
                str += prop + "=" + obj[prop] + "&"
            }
            return str;
        })(postData);
        alert(postDataStr);
        xhr.send(postDataStr);
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4 && xhr.status==200){
                alert(xhr.responseText);
            }
        };
    }
};

MyServlet.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String msg = req.getParameter("message");
        System.out.println(msg);

        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out=resp.getWriter();
        out.println("你好,这是服务器返回的信息!");
        out.flush();
        out.close();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

个人博客已经搭建完毕 ,后续会逐渐退出新功能 : 立即前往 (服务器暂时关闭了,还在调整之中。。。)

首页:

详情页:

由于现在博客网站搭建还不够完善,所以暂时使用了三级域名,后续慢慢完善之后,我会去弄一个好点的域名的。

[转发自http://www.cnblogs.com/skyblue-li/p/6054013.html]

时间: 2024-10-06 16:55:08

浅讲ajax的相关文章

JavaScript : 浅讲ajax

1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 对于JavaWeb项目而言,ajax主要用于浏览器和服务器之间数据的传输. 如果是单单地堆砌知识点,会显得比较无聊,那么根据惯例,我先不继续介绍ajax,而是来写一个案例吧. 打开

神经网络浅讲:从神经元到深度学习

神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方式讲解神经网络.适合对神经网络了解不多的同学.本文对阅读没有一定的前提要求,但是懂一些机器学习基础会更好地帮助理解本文. 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术.人脑中的神经网络是一个非常复杂的组织.成人的大脑中估计有1000亿个神经元之多. 图1 人脑神经网络 那么机

树状数组浅讲

树状数组浅讲 rt,个人肤浅理解,各位神犇请自动出门右转 不同于传统数组每个元素单独存放,求和时遍历相加,树状数组每个元素不单独维护,而是被维护在一个包含其他元素的前缀和里.宜先仔细揣摩后再行. 上图便体现了树状数组储存数据的原理 相当于以下等式 说明:C[]是树状数组,A[]是实际元素 C[1]=A[1]; C[2]=A[1]+A[2]; C[3]=A[3]; C[4]=A[1]+A[2]+A[3]+A[4]; C[5]=A[5]; C[6]=A[5]+A[6]; C[7]=A[7]; C[8

哈佛大学构建动态网站--第七讲ajax

Ajax ajax举例: DOM的结构 通过js来修改html页面. Ajax的含义: return false的用途 跨浏览器的ajax 为什么不直接从yahoo获得数据呢? XMLHttpRequest的状态 用DOM而不是弹窗显示数据 同时获得多个数据 添加等待指示 通过XML方式来获得数据 插入DOM元素 JSON 将php类转化为json 使用了第三方框架YUI调用ajax 使用JQuery库调用ajax 使用google map中提供的api ajax举例: google maps其

详细讲一讲AJAX的GET/POST

一.POST/GET之我所见 其实对于他们的区别,想必互联网上已经传遍了,无论大家怎么理解,对于我而言,我觉得,它们只有一个区别. 就是一个有form,一个没有. 怎么理解了,就是POST上传就类似我们在界面上的一个<form>,按下提交按钮后把form内的东西都传递到服务器去,当然你也可以不传递任何东西,如果在ajax的send时不传递任何东西,此时是没有form的,但但凡send里面有了数据,就自然有了form(包括abc=123这样的以及new FormData()),因此,他们的区别仅

浅谈Ajax(转)

一.简介 AJAX(Asynchronous JavaScript And XML),指异步JavaScript及XML,它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术,其本质就是JavaScript技术,与XML其实没有太大关系. 通过AJAX,可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信.通过这个对象,JavaScript可在不重载页面的情况与 Web 服务器交换数据. AJAX在浏览器与Web服务器之间使用异步数据

浅谈Ajax 异步的几点细节

1.浏览器执行到Ajax代码的这行语句的时候,发出了一个HTTP请求,欲想请求服务器上的数据.服务器此时开始I/O,所谓的I/O就是磁盘的读写,需要花费一些时间,所以不会立即产生下行的HTTP报文: 2. 由于Ajax是异步的,所以本地的JavaScript程序不会停止运行,页面就不会死等,(不会傻等HTTP报文的反馈)后面javascript语句将继续执行.进程不会阻塞: 3. 等服务器的I/O结束,将下行HTTP报文发送到本地.此时,回调函数执行(将使用DOM更改页面内容).

浅谈Ajax

最近又学习关于jquery中封装的Ajax的方法,越来越感觉到Ajax的好用,所以就想总结一下Ajax的强大之处. Ajax全称Asynchronous JavaScript and XML,顾名思义:异步的 JavaScript 和 XML,当然XML已经逐渐被Json所取代了.在2005年,Google通过其Google Suggest使Ajax变得流行起来.Google Suggest 使用Ajax创造出动态性极强的web界面:当您在谷歌的搜索框输入关键字时,JavaScript会把这些字

浅谈ajax中的GET和POST

Get方式:   用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的资源路径后面.另外最重要的一点是,它会被客户端的浏览器缓存起来,那么,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如帐号和密码等.因此,在某些情况下,get方法会带来严重的安全性问题. Post方式:   当使用POST方式时,浏览器把各表单字段元素及其数据作为HTTP消息的实体内容发