`
congpeixue
  • 浏览: 274837 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

使用Servlet Ajax 实现 局部刷新下拉列表(附source)

阅读更多
最近由于项目需要, 趁今晚有时间写了个DEMO,附上源码,与大家共勉之。



把Servlet和jsp贴上

1 一个粗糙的Servlet
package com.chinasunzone.h2.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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

import com.chinasunzone.h2.domain.Province;
import com.chinasunzone.h2.util.DBUtils;
import com.chinasunzone.h2.viewObject.ViewObject;

/**
 * Servlet implementation class for Servlet: ProvinceSelectServlet
 * 
 */
public class ProvinceSelectServlet extends javax.servlet.http.HttpServlet
		implements javax.servlet.Servlet {

	// INTI
	private static final String INIT = "1";
	
	// SELECT
	private static final String SELECT = "2";
	
	static final long serialVersionUID = 1L;

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public ProvinceSelectServlet() {
		super();
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		Connection conn = null;

		ViewObject viewObject = new ViewObject();
		
		RequestDispatcher dispatcher = null;
		
		List<Province> provinces = new ArrayList<Province>();

		String handle = request.getParameter("handle");

		
		// 
		if (INIT.equals(handle)) {
			
			// exception may be accor
			conn = DBUtils.getConnection();
			try {
				PreparedStatement preparedStatement = conn
						.prepareStatement("SELECT ID, NAME FROM PROVINCE");
				ResultSet rs = preparedStatement.executeQuery();
				while (rs != null && rs.next()) {
					Province province = new Province();
					province.setId(rs.getInt("id"));
					province.setName(rs.getString("name"));
					provinces.add(province);
				}
				viewObject.setProvince(provinces);
				request.setAttribute("viewObject", viewObject);
				dispatcher = request.getRequestDispatcher("/page/select_province.jsp");
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				DBUtils.closeConnection(conn);
			}
			dispatcher.forward(request, response);
			// 
		} else if (SELECT.equals(handle)) {
			conn = DBUtils.getConnection();
			response.setContentType("text/xml");
			response.setHeader("Cache-Control", "no-cache");
			response.setCharacterEncoding("UTF-8");
			Integer provinceId = Integer.parseInt(request.getParameter("provinceId"));
			try {
				
				//  preparestatement can't bu use.
				String SELECT_CITY_BY_PROVINCEID = "SELECT ID, NAME FROM CITY WHERE PROVINCE_ID=" + provinceId;
				
				ResultSet rs = conn.createStatement().executeQuery(SELECT_CITY_BY_PROVINCEID);

				StringBuilder sb = new StringBuilder("<province>");
				while(rs != null && rs.next()) {
					sb.append("<city><id>" + rs.getInt("id") + "</id><name>" + rs.getString("name") + "</name></city>");
				}
				sb.append("</province>");
				PrintWriter out = response.getWriter();
				
				out.write(sb.toString());
				out.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				DBUtils.closeConnection(conn);
			}
		}
	}
}


2 简单的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">
<%--
 	auther	: cong_px
 	date	: 2008/10/18
 	version	: 1.0.0
 --%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<script type="text/javascript">
		/**
		 *return XMLHttpRequest
		 *
		 */
		function getCity(provinceId) {
		   var url = "ProvinceSelectServlet?handle=2&provinceId="+provinceId; 
		   if (window.XMLHttpRequest) { 
		   	req = new XMLHttpRequest(); 
		   }else if (window.ActiveXObject) { 
		   	req = new ActiveXObject("Microsoft.XMLHTTP"); 
		   } 
		   if(req){ 
				// 初始化 HTTP 请求参数,例如 URL 和 HTTP 方法,但是并不发送请求。
			   req.open("GET",url, true); 
				// 每次 readyState 属性改变的时候调用的事件句柄函数
			   req.onreadystatechange = complete; 
				// 发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体。
			   req.send(null); 
		   } 
		} 
		
		/**
		 * query XML
		 *
		 */
		function complete(){
		   if (req.readyState == 4) { 
		   if (req.status == 200) { 
			   var city = req.responseXML.getElementsByTagName("city");
			   var cityIds = new Array();
				var cityNames = new Array();
			   for(var i = 0;i < city.length; i++){
					cityIds[i] = city[i].childNodes[0].firstChild.data;
					cityNames[i] = city[i].childNodes[1].firstChild.data;
			   }
			   buildSelect(cityIds, cityNames, document.getElementById("cityId"));
			   }
		   }
		}
		
		/**
		 * print select
		 *
		 */
		function buildSelect(cityIds, cityNames, select) {
		   select.options.length = 0;
			select.options[0] = new Option("", "");
		   for(var i = 1;i < cityIds.length; i++) {
		   	select.options[select.options.length] = new Option(cityNames[i-1], cityIds[i-1]);
		   }
		}
	</script>
	<title></title>
</head>
<body>
	<select name="province" onchange="getCity(this.value)">
		<option></option>
		<c:forEach var="province" items="${viewObject.provinces}">
		<option value="${province.id} ">${province.name }</option>
		</c:forEach>
	</select>
	<select id="cityId" name="city">
		<option></option>
	</select>
	<input type="text" name="address" value="汽轮大厦10楼">
</body>
</html>




关于在jetty中启动此web服务, 请参照http://congpeixue.iteye.com/admin/blogs/254664
  • 大小: 29.6 KB
分享到:
评论

相关推荐

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

    - Ajax监听到onreadystatechange事件,检查返回状态,如果成功则解析JSON数据,并在聊天窗口中动态插入新的聊天记录,实现局部刷新。 文件"ajaxChat"可能包含了实现这个聊天功能的Ajax脚本和Servlet代码,通过分析...

    AJAX_Servlet级联下拉列表

    在Web开发中,AJAX(Asynchronous JavaScript and XML)与Servlet技术常常被用来实现动态、交互式的用户界面,其中一种常见的应用就是级联下拉列表。级联下拉列表允许用户在选择一个选项后,根据所选选项动态加载并...

    servlet+ajax做的两个下拉列表联动

    使用XMLHttpRequest对象或者现代浏览器中的fetch API,JavaScript可以监听下拉列表的改变事件,触发Ajax请求,并在接收到Servlet返回的数据后,动态地更新第二个下拉列表的选项。 实现这个功能的具体步骤包括: 1....

    Ajax实现java web 中下拉列表二级联动

    在Java Web开发中,二级联动下拉列表是一种常见的交互功能,通常用于地区选择、类别分类等场景。...通过以上步骤和注意事项,我们就可以在Java Web应用中成功实现Ajax驱动的二级联动下拉列表,提升用户的交互体验。

    js+jsp+servlet实现网页局部刷新

    ### 使用JS + JSP + Servlet 实现网页局部刷新的关键知识点 在现代Web开发中,提升用户体验的一个重要方式是实现页面的局部刷新。这种方式允许开发者在不重新加载整个页面的情况下更新部分数据,从而使得用户能够...

    AJAX重构+级联下拉列表

    在"java web前台级联下拉列表代码"中,我们可以推测这个项目是用Java作为后端语言,使用Servlet或Spring MVC等框架处理AJAX请求。前端可能使用纯JavaScript,或者结合jQuery、Vue.js、React等库来实现交互。文件名...

    html+Servlet+ajax实现登录修改

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

    利用Ajax实现无刷新分页

    **Ajax 实现无刷新分页技术详解** 在Web开发中,提供大量的数据通常需要分页显示,以提高用户体验和加载速度。传统的分页方式需要用户每次点击分页按钮时整个页面重新加载,而Ajax(Asynchronous JavaScript and ...

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

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

    ajax+java servlet实现无刷新搜索实例(可用)

    ajax+java servlet实现无刷新搜索实例(亲测可用) ,1.使用mysql数据库,已有sql语句;2.使用eclipse\MyEclipse导入项目即可;3.运行URL地址在doc/init.txt

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    ajax 异步实现两级联动下拉列表和输入提示

    以上就是基于AJAX实现的二级联动下拉列表和输入提示的基本原理和步骤。这个项目是一个典型的实例,可以帮助开发者了解如何在实际应用中运用这些技术。通过不断实践和优化,我们可以提供更加高效、友好的用户体验。

    Servlet+Ajax实现智能搜索

    本教程将探讨如何利用Servlet和Ajax技术来实现这样的功能。Servlet是Java服务器端编程的核心技术,用于处理HTTP请求,而Ajax(Asynchronous JavaScript and XML)则是一种在不刷新整个页面的情况下更新部分网页内容...

    struts2 dwr ajax 配置 局部刷新

    在Struts2和DWR的环境中,你可以在用户触发某些事件(如点击按钮)时,使用DWR调用后端方法,获取数据,然后使用JavaScript更新DOM元素,实现局部刷新。 总结来说,Struts2、DWR和Ajax的结合使用,能够提供更流畅、...

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

    在这个系统中,用户在输入框中输入关键词时,后台服务器会通过Servlet处理请求,动态地返回与输入相关的搜索建议,而这一切都在不刷新整个页面的情况下完成,这正是Ajax(异步JavaScript和XML)技术的核心应用。...

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

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

    Ajax城市 城镇联动下拉列表框

    接着是`Java`环境,我们可以使用JSP、Servlet和Ajax库如jQuery AJAX或者AngularJS来实现。在JSP中,设置两个下拉列表,一个用于城市,一个用于城镇。当城市选择发生变化时,触发一个AJAX事件,发送请求到Servlet,...

    jsp+servlet+ajax实现登录

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

Global site tag (gtag.js) - Google Analytics