📄 busqueryservlet.java
字号:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class BusQueryServlet extends HttpServlet {
private Map busMap;
public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext context = this.getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/Lines.txt");
busMap = readBuses(is); //读取公共汽车线路数据
System.out.println("OK!!!");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//
//创建数据输入流
DataInputStream dis = new DataInputStream(req.getInputStream());
//读取客户端发送的查询数据
int mode = dis.readInt(); //查询方式
String condition = dis.readUTF(); //查询条件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
int code = query(mode, condition, dos); //查询
//设置响应头属性
res.setContentType("application/octet-stream");
byte[] buf = baos.toByteArray(); //响应数据
res.setContentLength(buf.length);
//获得响应输出流,写出响应数据。
ServletOutputStream sos = res.getOutputStream();
DataOutputStream os = new DataOutputStream(sos);
System.out.println(code);
os.writeInt(code);
os.write(buf);
os.close();
}
private Map readBuses(InputStream is) {
HashMap bMap = new HashMap(100);
BufferedReader bufReader = new BufferedReader(new InputStreamReader(is));
String line = null;
String num = null;
String stations = null;
int index = -1;
try {
while((line = bufReader.readLine()) != null) {
index = line.indexOf("-");
num = line.substring(0, index);
stations = line.substring(index+1);
bMap.put(num, stations);
}
}
catch(IOException ioe) {
//
}
return bMap;
}
//查询
private int query(int mode, String condition, DataOutputStream dos) throws IOException {
System.out.println("mode = " + mode + "; condition=" + condition);
int count = 0;
switch(mode) {
case QueryMode.BUS: //按照公共汽车线路进行查询
String stations = (String)busMap.get(condition);
if(stations != null) {
count = 1;
dos.writeUTF(condition);
dos.writeUTF(stations);
}
break;
case QueryMode.STATION: //按照公共汽车站点名进行查询
Iterator lines = busMap.keySet().iterator();
String num = null;
String sta = null;
int index = -1;
while(lines.hasNext()) {
num = (String)lines.next();
sta = (String)busMap.get(num);
index = sta.indexOf(condition);
if(index != -1) {
count++;
dos.writeUTF(num);
dos.writeUTF(sta);
}
}
break;
default: //请求序号错误!
count = -1;
}
dos.writeUTF("END.");
dos.flush();
return count;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -