插入数据库语句
create table COUNTRY
(
NAME VARCHAR2(100) not null,
TYPE NUMBER not null
)
;
alter table COUNTRY
add constraint PRIMARY_KEY primary key (TYPE);
insert into COUNTRY (NAME, TYPE)
values ('中国', 1);
insert into COUNTRY (NAME, TYPE)
values ('美国', 2);
insert into COUNTRY (NAME, TYPE)
values ('日本', 3);
create table CITY
(
NAME VARCHAR2(100) not null,
TYPE NUMBER not null,
COUNTRYTYPE NUMBER not null
)
;
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('沈阳', 1, 1);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('大连', 2, 1);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city1', 3, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city2', 4, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('american_city3', 5, 2);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('japan_city1', 6, 3);
insert into CITY (NAME, TYPE, COUNTRYTYPE)
values ('japan_city2', 7, 3);
create table STREET
(
NAME VARCHAR2(100) not null,
TYPE NUMBER not null,
CITYTYPE NUMBER not null
)
;
insert into STREET (NAME, TYPE, CITYTYPE)
values ('中街', 1, 1);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('太原街', 2, 1);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street1', 3, 2);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street2', 4, 2);
insert into STREET (NAME, TYPE, CITYTYPE)
values ('大连street3', 5, 2);
新建servlet 类两个
package test.servlet;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SelectServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml;charset=gb2312");
response.setHeader("Cache-Control", "no-cache");
String targetId = request.getParameter("id").toString();
String xml_start = "<selects>";
String xml_end = "</selects>";
String xml = "";
List list1 = new ArrayList();
List list2 = new ArrayList();
String sql = "select * from city where countrytype='" + targetId + "'";
ConnDB53 db=new ConnDB53();
ResultSet rs=db.executeQuery(sql);
try{
while (rs.next()) {
list1.add(rs.getString("name"));
list2.add(rs.getString("type"));
}
}catch(Exception e){
e.printStackTrace();
}
if (targetId.equalsIgnoreCase("0")) {
xml = "<select><value>0</value><text>--请选择--</text></select>";
} else {
xml = "<select><value>0</value><text>--请选择--</text></select>";
for (int i = 0; i < list1.size(); i++) {
xml += "<select><value>" + list2.get(i) + "</value><text>"
+ list1.get(i) + "</text></select>";
}
}
String last_xml = "<?xml version='1.0' encoding='GB2312'?>" + xml_start
+ xml + xml_end;
response.getWriter().write(last_xml);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package test.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SelectServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml;charset=gb2312");
response.setHeader("Cache-Control", "no-cache");
String targetId = request.getParameter("id").toString();
String xml_start = "<selects>";
String xml_end = "</selects>";
String xml = "";
List list1 = new ArrayList();
List list2 = new ArrayList();
String sql = "select * from street where citytype='"+ targetId + "'";
ConnDB53 db=new ConnDB53();
ResultSet rs=db.executeQuery(sql);
try {
while (rs.next()) {
list1.add(rs.getString("name"));
list2.add(rs.getString("type"));
}
} catch (Exception e) {
e.printStackTrace();
}
if (targetId.equalsIgnoreCase("0")) {
xml = "<select><value>0</value><text>--请选择--</text></select>";
} else {
xml = "<select><value>0</value><text>--请选择--</text></select>";
for (int i = 0; i < list1.size(); i++) {
xml += "<select><value>" + list2.get(i) + "</value><text>"
+ list1.get(i) + "</text></select>";
}
}
String last_xml = "<?xml version='1.0' encoding='GB2312'?>" + xml_start
+ xml + xml_end;
response.getWriter().write(last_xml);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package test.servlet;
import java.sql.*;
public class ConnDB53 {
Connection conn = null;
Statement stmt = null;
Statement stmt2 = null;
ResultSet rs = null;
String user = "maximo";
String pass = "maximo53";
String url = "jdbc:oracle:thin:@10.64.27.53:1521:PROD";
public ConnDB53() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, pass);
} catch (java.lang.ClassNotFoundException e) {
System.err.println(e.getMessage());
}catch (SQLException e) {
System.err.println(e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
try {
//conn=DriverManager.getConnection(url,user,pass);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
} finally {
}
return rs;
}
public int executeUpdate(String sql) {
int result = 0;
try {
//conn=DriverManager.getConnection(url,user,pass);
stmt2 = conn.createStatement();
result = stmt2.executeUpdate(sql);
} catch (SQLException ex) {
ex.printStackTrace();
result = 0;
} finally {
}
return result;
}
public void freeConn() {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
}
}
public void close() {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (stmt2 != null)
stmt2.close();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}
web文件加入
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>
CookieServlet
</servlet-name>
<servlet-class>
test.servlet.SelectServlet
</servlet-class>
</servlet>
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>
CookieServlet2
</servlet-name>
<servlet-class>
test.servlet.SelectServlet2
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
CookieServlet
</servlet-name>
<url-pattern>
/servlet/select
</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>
CookieServlet2
</servlet-name>
<url-pattern>
/servlet/select2
</url-pattern>
</servlet-mapping>
新建JSP文件
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<jsp:useBean id ="db" scope="page" class="test.servlet.ConnDB53" ></jsp:useBean>
<html>
<head>
<title>3级菜单联动演示</title>
<script type="text/javascript">
var req;
function Change_Select(){
//当第一个下拉框的选项发生改变时调用该函数
var country = document.getElementByIdx('one').value;
var url = "servlet/select?id="+ escape(country);
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET",url,true);
req.onreadystatechange = callback; //指定回调函数为callback
req.send(null);
}
}
function callback(){
if(req.readyState ==4){
if(req.status ==200){
parseMessage();//解析XML文档
}else{
alert("Not able to retrieve description" + req.statusText);
}
}
}
function parseMessage(){
var xmlDoc = req.responseXML.documentElement;
//获得返回的XML文档
var xSel = xmlDoc.getElementsByTagName_r('select');
//获得XML文档中的所有<select>标记
var city = document.getElementByIdx('two');
//获得网页中的第二个下拉框
city.options.length=0;
//每次获得新的数据的时候先把每二个下拉框架的长度清0
for(var i=0;i<xSel.length;i++){
var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
//获得每个<select>标记中的第一个标记的值,也就是<value>标记的值
var xText = xSel[i].childNodes[1].firstChild.nodeValue;
//获得每个<select>标记中的第二个标记的值,也就是<text>标记的值
var option = new Option(xText, xValue);
//根据每组value和text标记的值创建一个option对象
try{
city.add(option);//将option对象添加到第二个下拉框中
}catch(e){
}
}
}
//*************************************************************************
function Change_Select2(){
var city = document.getElementByIdx('two').value;
var url = "servlet/select2?id="+ escape(city);
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET",url,true);
req.onreadystatechange = callback2;
req.send(null);
}
}
function callback2(){
if(req.readyState ==4){
if(req.status ==200){
parseMessage2();
}else{
alert("Not able to retrieve description" + req.statusText);
}
}
}
function parseMessage2(){
var xmlDoc = req.responseXML.documentElement;
var xSel = xmlDoc.getElementsByTagName_r('select');
var street = document.getElementByIdx('three');
street.options.length=0;
for(var i=0;i<xSel.length;i++){
var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
var xText = xSel[i].childNodes[1].firstChild.nodeValue;
var option = new Option(xText, xValue);
try{
street.add(option);
}catch(e){
}
}
}
</script>
</head>
<body>
<%
String sql=" select * from country ";
ResultSet rs =db.executeQuery(sql);
List dlist = new ArrayList();
List vlist = new ArrayList();
try {
while (rs.next()) {
dlist.add((String) rs.getString("name"));
vlist.add(rs.getString("type"));
}
} catch (Exception e) {
e.printStackTrace();
}
%>
<div align="center">
<form name="form1" method="post" action="">
<table width="70%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center">国家城市选择</td>
</tr>
<tr>
<td><select name="one" id="one" onChange="Change_Select()">
<!--第一个下拉菜单-->
<option value="0">--请选择--</option>
<%
for (int i = 0; i < dlist.size(); i++) {
%>
<option value="<%=vlist.get(i) %>"><%=dlist.get(i)%></option>
<%
}
%>
</select> <select name="two" id="two" onChange="Change_Select2()">
<!--第二个下拉菜单-->
<option value="0">--请选择--</option>
</select> <select name="three" id="three">
<!--第三个下拉菜单-->
<option value="0">--请选择--</option>
</select></td>
</tr>
</table>
</form>
</div>
</body>
</html>
分享到:
相关推荐
struts2+jsp+json+javascript实现的三级下拉菜单,没有service和dao层,数据是虚拟的。需要的欢迎下载。项目直接导入myeclipse就可以使用。访问路径localhost:8080/ajax_day02_hw/proviencecityarea.jsp
基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar
【jsp+ajax 三级联动菜单】是一个典型的Web开发技术应用场景,它主要利用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(AJAX)来实现动态网页中的数据交互和页面更新。在这个例子中,我们看到的是一个...
在Web开发中,"Ajax JavaWeb JS 三级联动"是一个常见的功能需求,它涉及...总之,"Ajax JavaWeb JS 三级联动"是一个集成了前端、后端和异步通信技术的复杂功能,通过合理的分工协作,可以实现高效、流畅的Web交互体验。
**三、三级联动菜单实现** 1. **HTML结构**:首先,我们需要创建一个包含三个下拉框的HTML结构,分别对应一级、二级和三级菜单。每个下拉框的改变事件都将触发Ajax请求。 2. **JavaScript逻辑**:使用DWR提供的API...
通过以上步骤,我们可以实现一个功能完善的AJAX三级联动菜单。这个项目对于理解AJAX、JavaScript、jQuery、Java Servlet以及JSON数据交互具有很好的实践价值,同时也能提升前端与后端的协作能力。在实际应用中,这种...
城市三级联动菜单是一种常见...总的来说,实现城市三级联动菜单涉及到前端的AJAX交互、后端的数据处理以及合理的数据库设计。通过这个过程,我们可以了解到前后端协同工作的重要性,以及如何通过异步通信提升用户体验。
在这个“js和ajax实现三级联动.zip”压缩包中,包含了一个实现三级联动(省市区选择)的示例。这种功能常用于地址输入或者地理定位等场景,为用户提供了流畅的导航体验。 首先,我们来理解一下什么是三级联动。在...
本项目"纯js实现ajax无刷新三级联动"旨在利用JavaScript和Ajax技术,无需页面整体刷新即可实现多级选择联动效果,这种效果常见于下拉菜单的联动筛选中。在描述中提到,此项目使用了JSON格式进行数据交换,这有助于...
这个"淘宝商品发布三级联动菜单.zip"文件包含了实现这一功能的源代码,主要依赖于JavaScript库jQuery 1.9.1版本。 jQuery是一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。...
本资源包“联动菜单大全”包含了多种类型的联动菜单实现,包括与数据库交互的、使用AJAX技术的,以及无限级别的联动菜单。这些菜单方案可以极大地提升用户体验,尤其是在需要用户进行多级选择时。 首先,我们要理解...
在三级联动菜单中,CSS3可以用来美化下拉菜单的外观,包括颜色、字体、边框、阴影、过渡和动画等,同时通过媒体查询实现响应式布局,确保在不同屏幕尺寸上都能正常显示。 3. **JavaScript/jQuery**:JavaScript是...
在实现三级联动菜单的过程中,我们需要掌握以下几个关键知识点: 1. HTML 结构:首先,我们需要创建一个HTML结构来定义菜单的层次关系。通常,我们会使用`<ul>`和`<li>`标签来构建多级嵌套的列表,一级菜单作为顶级...
Ajax三级联动菜单是一种常见的前端交互...总的来说,Ajax三级联动菜单通过异步通信实现了动态数据加载,提高了用户体验,减少了不必要的页面刷新。理解这个过程并能够实现这样的功能,对前端开发者来说是一项基本技能。
本话题将详细讲解如何利用AJAX实现三级联动效果,这是一种在用户选择某个选项后,自动更新下级选项列表的技术,通常应用于地区选择、商品分类等场景。 首先,我们需要理解AJAX的基本原理。AJAX允许网页在不重新加载...
总之,实现Ajax三级联动的关键在于利用JavaScript和Ajax技术进行动态数据交互,通过监听用户的选择事件,动态加载并更新下拉菜单选项。这一过程涉及前端与后端的紧密协作,以提供流畅、无刷新的交互体验。
"商品发布三级联动菜单js代码" 是一种实现这一功能的技术解决方案,它常见于商城网站,提升用户体验,增强商品搜索的准确性。这种技术主要依赖JavaScript(JS)语言,通过前端代码实现页面元素的动态交互。 一、...
在实现三级联动菜单时,jQuery主要负责以下几方面的工作: 1. **DOM操作**:jQuery提供了一套简洁的API来获取、修改和操作HTML元素。在创建联动菜单时,我们需要根据用户的选中项来改变下一级菜单的显示状态。...