JSP部分:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function refreshModelList() {
var make = document.getElementById("make").value;
var modelYear = document.getElementById("modelYear").value;
if(make == "" || modelYear == "") {
clearModelsList();
return;
}
var url = "RefreshModelListServlet?"+ createQueryString(make, modelYear) + "&ts=" + new Date().getTime();
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function createQueryString(make, modelYear) {
var queryString = "make=" + make + "&modelYear=" + modelYear;
return queryString;
}
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
updateModelsList();
}
}
}
function updateModelsList() {
clearModelsList();
var models = document.getElementById("models");
var results = xmlHttp.responseXML.getElementsByTagName("model");
var option = null;
for(var i = 0; i < results.length; i++) {
option = document.createElement("option");
option.appendChild(document.createTextNode(results[i].firstChild.nodeValue));
models.appendChild(option);
}
}
function clearModelsList() {
var models = document.getElementById("models");
while(models.childNodes.length > 0) {
models.removeChild(models.childNodes[0]);
}
}
</script>
</head>
<body>
<h1>
Select Model Year and Make
</h1>
<form action="#">
<span style="font-weight:bold;">Model Year:</span>
<select id="modelYear" οnchange="refreshModelList();">
<option value="">
Select One
</option>
<option value="2006">
2006
</option>
<option value="1995">
1995
</option>
<option value="1985">
1985
</option>
<option value="1970">
1970
</option>
</select>
<br />
<br />
<span style="font-weight:bold;">Make:</span>
<select id="make" οnchange="refreshModelList();">
<option value="">
Select One
</option>
<option value="Chevrolet">
Chevrolet
</option>
<option value="Dodge">
Dodge
</option>
<option value="Pontiac">
Pontiac
</option>
</select>
<br />
<br />
<span style="font-weight:bold;">Models:</span>
<br />
<select id="models" size="6" style="width:300px;">
</select>
</form>
</body>
</html>
Servlet部分:
public class RefreshModelListServlet extends HttpServlet {
private static List<MakeModelYear> availableModels = new ArrayList();
public void init() throws ServletException {
availableModels.add(new MakeModelYear(2006, "Dodge", "Charger"));
availableModels.add(new MakeModelYear(2006, "Dodge", "Magnum"));
availableModels.add(new MakeModelYear(2006, "Dodge", "Ram"));
availableModels.add(new MakeModelYear(2006, "Dodge", "Viper"));
availableModels.add(new MakeModelYear(1995, "Dodge", "Avenger"));
availableModels.add(new MakeModelYear(1995, "Dodge", "Intrepid"));
availableModels.add(new MakeModelYear(1995, "Dodge", "Neon"));
availableModels.add(new MakeModelYear(1995, "Dodge", "Spirit"));
availableModels.add(new MakeModelYear(1985, "Dodge", "Aries"));
availableModels.add(new MakeModelYear(1985, "Dodge", "Daytona"));
availableModels.add(new MakeModelYear(1985, "Dodge", "Diplomat"));
availableModels.add(new MakeModelYear(1985, "Dodge", "Omni"));
availableModels.add(new MakeModelYear(1970, "Dodge", "Challenger"));
availableModels.add(new MakeModelYear(1970, "Dodge", "Charger"));
availableModels.add(new MakeModelYear(1970, "Dodge", "Coronet"));
availableModels.add(new MakeModelYear(1970, "Dodge", "Dart"));
availableModels.add(new MakeModelYear(2006, "Chevrolet", "Colorado"));
availableModels.add(new MakeModelYear(2006, "Chevrolet", "Corvette"));
availableModels.add(new MakeModelYear(2006, "Chevrolet", "Equinox"));
availableModels.add(new MakeModelYear(2006, "Chevrolet", "Monte Carlo"));
availableModels.add(new MakeModelYear(1995, "Chevrolet", "Beretta"));
availableModels.add(new MakeModelYear(1995, "Chevrolet", "Camaro"));
availableModels.add(new MakeModelYear(1995, "Chevrolet", "Cavalier"));
availableModels.add(new MakeModelYear(1995, "Chevrolet", "Lumina"));
availableModels.add(new MakeModelYear(1985, "Chevrolet", "Cavalier"));
availableModels.add(new MakeModelYear(1985, "Chevrolet", "Chevette"));
availableModels.add(new MakeModelYear(1985, "Chevrolet", "Celebrity"));
availableModels.add(new MakeModelYear(1985, "Chevrolet", "Citation II"));
availableModels.add(new MakeModelYear(1970, "Chevrolet", "Bel Air"));
availableModels.add(new MakeModelYear(1970, "Chevrolet", "Caprice"));
availableModels.add(new MakeModelYear(1970, "Chevrolet", "Chevelle"));
availableModels.add(new MakeModelYear(1970, "Chevrolet", "Monte Carlo"));
availableModels.add(new MakeModelYear(2006, "Pontiac", "G6"));
availableModels.add(new MakeModelYear(2006, "Pontiac", "Grand Prix"));
availableModels.add(new MakeModelYear(2006, "Pontiac", "Solstice"));
availableModels.add(new MakeModelYear(2006, "Pontiac", "Vibe"));
availableModels.add(new MakeModelYear(1995, "Pontiac", "Bonneville"));
availableModels.add(new MakeModelYear(1995, "Pontiac", "Grand Am"));
availableModels.add(new MakeModelYear(1995, "Pontiac", "Grand Prix"));
availableModels.add(new MakeModelYear(1995, "Pontiac", "Firebird"));
availableModels.add(new MakeModelYear(1985, "Pontiac", "6000"));
availableModels.add(new MakeModelYear(1985, "Pontiac", "Fiero"));
availableModels.add(new MakeModelYear(1985, "Pontiac", "Grand Prix"));
availableModels.add(new MakeModelYear(1985, "Pontiac", "Parisienne"));
availableModels.add(new MakeModelYear(1970, "Pontiac", "Catalina"));
availableModels.add(new MakeModelYear(1970, "Pontiac", "GTO"));
availableModels.add(new MakeModelYear(1970, "Pontiac", "LeMans"));
availableModels.add(new MakeModelYear(1970, "Pontiac", "Tempest"));
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
int modelYear = Integer.parseInt(request.getParameter("modelYear"));
String make = request.getParameter("make");
StringBuffer results = new StringBuffer("<models>");
MakeModelYear availableModel = null;
for (Iterator it = availableModels.iterator(); it.hasNext();) {
availableModel = (MakeModelYear) it.next();
if (availableModel.modelYear == modelYear) {
if (availableModel.make.equals(make)) {
results.append("<model>");
results.append(availableModel.model);
results.append("</model>");
}
}
}
results.append("</models>");
response.setContentType("text/xml");
response.getWriter().write(results.toString());
}
private static class MakeModelYear {
private int modelYear;
private String make;
private String model;
public MakeModelYear(int modelYear, String make, String model) {
this.modelYear = modelYear;
this.make = make;
this.model = model;
}
}
}