写到这里,我感到非常的惭愧,关于AJAX的原理我一点没有搞懂,只会把代码写上,把效果做出来。
我也常常问自己,计算机的世界这么大,以我现在的情况,是只要做出来就行,还是把一些技术要搞明白呢?
我并没有得到回答。
题目:
输入一个英文单词,点“词典搜索”按钮,输出对应的中文解释;
如果没有对应的中文解释,提示“不存在该词条的解释”;
如果用户没有输入英文单词就点“词典搜索”按钮,提示“词条不能为空”。
第一步:完成servlet的后台开发 (自定义修改的地方,我们根据实现情况修改)
package com;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DictSearchServlet extends HttpServlet {
private static final long serialVersionUID = 606930490763501138L;
private Map dictMap = new HashMap();
public void init(){
dictMap.put("beida jade bird","北大青鸟");
dictMap.put("accp","阿博泰克认证的计算机专家");
dictMap.put("ajax","一种创建交互式网页的技术");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得并处理表单数据 (自定义修改)
String key = request.getParameter("key");
if (null!=key){
key = key.toLowerCase();
}
String result = (String)dictMap.get(key);
response.setCharacterEncoding("GBK");
response.setContentType("");
//实现的关键
PrintWriter out = response.getWriter();
// 没有查到结果
if (null==result){
out.print("不存在该词条的解释");
}else{
out.print(result);
}
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
第二步 :前台的开发
<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>青鸟在线词典</title>
<script>
function createXmlHttpRequest(){
if(window.ActiveXObject){//如果是IE浏览器
return new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){//非IE浏览器
return new XMLHttpRequest();
}
}
var xmlHttpRequest;
function doSearch(){
//获得表单中的显示信息的层 (可以自行定义)
var oResult = document.getElementById("divResult");
oResult.innerText = "搜索中...";
var oKey = document.getElementById("key");
var key = oKey.value;
if (!key){
oResult.innerText = "词条不能为空";
oKey.focus();
return ;
}
// 请求字符串 ( s为对应映射文件的映射名 编写代码时候 可以自行定义)
var url = "s?key="+key;
// 1. 创建XMLHttpRequest组件
xmlHttpRequest = createXmlHttpRequest();
// 2. 设置回调函数 (haoLeJiaoWo 下面方法的方法名 自行定义)
xmlHttpRequest.onreadystatechange = haoLeJiaoWo;
// 3. 初始化XMLHttpRequest组件
xmlHttpRequest.open("GET",url,true);
// 4. 发送请求
xmlHttpRequest.send(null);
}
function haoLeJiaoWo(){
if( xmlHttpRequest.readyState == 4
&&xmlHttpRequest.status == 200){
var result = xmlHttpRequest.responseText; //result为servlet返回的结果
var oResult = document.getElementById("divResult");
oResult.innerText = result;
}
}
</script>
</head>
<body>
<input id="key" />
<button onclick="javascript:doSearch();">词典搜索</button>
<div id="divResult"></div>
</body>
</html>
第三步: 完成配置信息
<servlet>
<description>dict servlet</description>
<display-name>dict servlet</display-name>
<servlet-name>DictSearchServlet</servlet-name>
<servlet-class>com.aptech.jb.dict.DictSearchServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DictSearchServlet</servlet-name>
<url-pattern>/s</url-pattern>
</servlet-mapping>