用Glassfish和NetBeans编写第一个AJAX程序

2024-01-31 12:08

本文主要是介绍用Glassfish和NetBeans编写第一个AJAX程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

By Jason.Huang@sun.COM , 8/1/07  

B/S结构的应用似乎已经成为了默认的方式,大家每天开启关闭最多的应用我想应该是您的Web浏览器.B/S结构的应用最大的优点就是方便,客户端什么也 不需要安装就可以使用我们的应用. 当然B/S结构的一些特点也对基于这种方式应用的开发和设计产生了影响. 最典型的问题就是每次和服务器的交互都需要发起一次请求,传统的方式下需要把整个表单进行提交,处理完成后需要把表单再次显示. 在实际应用中,我们常常需要对Web页面的局部做动态处理,然后最后在做整个表单的提交处理. 例如,在提交注册信息之前,先检查注册用户名是否可以使用.

不知道你是否参加2006年在北京举行的Sun Techday,在James Gosling演讲之后来自Sun公司TE部门的技术传道士们做了精彩的技术演示,其中一个演示是关于PetStore. 经典PetStore现在已经变得生动了许多,其中一个主要的技术就是采用了AJAX. AJAX使得Web应用保持了"瘦"客户端简单的优点,同时也增加了"胖"客户端操作性好的优点. AJAX已经不是新鲜名词了,这里就不做介绍了,让我们用一个简单的例子来演示如何采用Glassfish和NetBeans编写第一个AJAX程序.

Glassfish安装


为了运行这个例子,您需要下载并启动Glassfish.

下载Galssfish地址: https://glassfish.dev.java.net/downloads/v1_ur1-p01-b02.html

安装方法:

  1. java -Xmx256m -jar glassfish-installer-v1_ur1-p01-b02.jar
  2. cd glassfish
  3. ant -f setup.xml

说明:为了完成安装,你需要下载JDK和ANT。

启动方法:

  1. cd glassfish
  2. ./bin/asadmin start-domain

启动后如下图所示:

  gf

NetBeans 安装

同时为了提高开发效率,推荐大家使用开源的IDE工具: NetBeans,使用NetBeans可以和主流的应用服务器相结合完成JavaEE程序的开发.

NetBeans的下载地址: www.netbeans.org
下面是用NetBeasn开发的一个应用程序的一个界面:
  nb

AJAX程序开发

虽然AJAX应用不需要每次提交整个页面(或者某个页面的iframe部分),但是实际上在开发的时候我们还是要进行 客户和服务器端程序的通讯。只不过,和传统的方式不同的是,j 我们不再是通过表单(form)的方式来提交数据给服务器端,而是通过Java Script在画面背后发出请求和处理响应结果并更新浏览器中的画面。

在本文中,通过一个简单常用的Case来说明基于Glassfish和NetBeans的Ajax程序开发过程。在这个Case中,我们实现一个 用户注册时候,ID是否重复的检查功能。传统方式下,我 们会提交用户填写的整个注册表单,这样数据量较大而且需要做一些数据再次显示的处理,比较麻烦。


开发步骤:

我们总共需要开发3个重要的程序。在客户端,发送请求和处理服务器响应的两个Java Script以及一个处理请求的Servlet。

  • 客户端发送请求Java Script

根据浏览器的不同,客户端发送请求的主要共呢功能是通过window.XMLHttpRequest或者ActiveXObject ("Microsoft.XMLHTTP");来实现的。主 要代码如下表所示,请结合代码中的注释阅读。


       function validate() {
            // 获取用户填写的ID
            var idField = document.getElementById("userid");
            // 构建处理请求的Servlet对应的URL
            var url = "ValidateServlet?id=" + escape(idField.value);
            // 根据浏览器不同创建不同的请求对象(req)
            if (window.XMLHttpRequest) {
                req = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
            // 准本通过请求对象发送请求
            req.open("GET", url, true);
            // 为本次请求注册回调方法,该回调方法就是用于处理服务器端响应结果的Java Script方法
            req.onreadystatechange = callback;
            // 发送请求
            req.send(null);
        }
       


  • 客户端处理响应Java Script

当客户端接受到来自服务器的请求之后,通过回调方法来解析处理结果,并通过DHTML更新画面.其主要代码如下表所示:


       // 当服务器的响应返回至浏览器时,浏览器会调用本方法
       function callback() {
            // 判断服务器的处理状态是否正常
            if (req.readyState == 4) {
                if (req.status == 200) {
                    // update the HTML DOM based on whether or not message is valid
                    parseMessage();
                }
            }
        }
       
        // 解析来自服务器的数据
        function parseMessage() {
            var message = req.responseXML.getElementsByTagName("message")[0];
            setMessage(message.childNodes[0].nodeValue);
        }
       
        // 根据服务器处理结果更新画面
        function setMessage(message) {
            mdiv = document.getElementById("userIdMessage");
            if (message == "invalid") {
                mdiv.innerHTML = "<div style=/"color:red/">Invalid User Id</ div>";
            } else {
                mdiv.innerHTML = "<div style=/"color:green/">Valid User Id</ div>";
            }
        }
       

  • Server端的Servlet

在Glassfish Server端,我们需要开发一个Servlet来处理来自客户端Java Script的请求。和传统方式不同的是,在这个Servlet中,我 们既没有直接返回HTML格式的信息,也没有进行页面的跳转控制。
这个Servlet的重点是返回处理信息的片段。Servlet的核心代码如下表所示:


public class ValidateServlet extends HttpServlet {
   
    private ServletContext context;
   
    // 为了简单,我们把已经存在的ID保存在一个HashMap中.
    private HashMap users = new HashMap(); // Account Info
   
    public void init(ServletConfig config) throws ServletException {
        this.context = config.getServletContext();
        users.put("jason","account data for jason");
        users.put("duke","account data for duke");       
    }
   
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        System.out.println("Request received!");
        PrintWriter out = response.getWriter();
       
        // 获取用户输入的ID
        String targetId = request.getParameter("id");
       
        // 判断用户ID是否存在
        if ((targetId != null) && !users.containsKey(targetId.trim())) {
            //用户ID不存在
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");
            out.write("<message>valid</message>");
        } else {
            //用户ID存在
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");
            out.write("<message>invalid</message>");
        }
        out.close();
    }

...

}



程序运行后的画面:

app


相关资源:

  1. 下载程序源 码
  2. http://developers.sun.com/ajax/
  3. http://java.sun.com/javascript/

这篇关于用Glassfish和NetBeans编写第一个AJAX程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663714

相关文章

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3