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; }}
}
