📄 webthread.java
字号:
buff.append((char) i);
}
}
}
private void parseAttributes(String s) throws SQLException {
server.trace("data=" + s);
while (s != null) {
int idx = s.indexOf('=');
if (idx >= 0) {
String property = s.substring(0, idx);
s = s.substring(idx + 1);
idx = s.indexOf('&');
String value;
if (idx >= 0) {
value = s.substring(0, idx);
s = s.substring(idx + 1);
} else {
value = s;
}
// TODO compatibility problem with JDK 1.3
// String attr = URLDecoder.decode(value, "UTF-8");
// String attr = URLDecoder.decode(value);
String attr = StringUtils.urlDecode(value);
attributes.put(property, attr);
} else {
break;
}
}
server.trace(attributes.toString());
}
private boolean parseHeader() throws IOException, SQLException {
boolean keepAlive = false;
server.trace("parseHeader");
int len = 0;
ifModifiedSince = null;
while (true) {
String line = readHeaderLine();
if (line == null) {
break;
}
server.trace(" " + line);
String lower = StringUtils.toLowerEnglish(line);
if (lower.startsWith("if-modified-since")) {
ifModifiedSince = line.substring(line.indexOf(':') + 1).trim();
} else if (lower.startsWith("connection")) {
String conn = line.substring(line.indexOf(':') + 1).trim();
if ("keep-alive".equals(conn)) {
keepAlive = true;
}
} else if (lower.startsWith("content-length")) {
len = Integer.parseInt(line.substring(line.indexOf(':') + 1).trim());
server.trace("len=" + len);
} else if (lower.startsWith("accept-language")) {
if (session != null) {
Locale locale = session.locale;
if (locale == null) {
String languages = line.substring(line.indexOf(':') + 1).trim();
StringTokenizer tokenizer = new StringTokenizer(languages, ",;");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (!token.startsWith("q=")) {
if (server.supportsLanguage(token)) {
int dash = token.indexOf('-');
if (dash >= 0) {
String language = token.substring(0, dash);
String country = token.substring(dash + 1);
locale = new Locale(language, country);
} else {
locale = new Locale(token, "");
}
session.locale = locale;
String language = locale.getLanguage();
session.put("language", language);
server.readTranslations(session, language);
break;
}
}
}
}
}
} else if (line.trim().length() == 0) {
break;
}
}
if (session != null && len > 0) {
byte[] bytes = new byte[len];
for (int pos = 0; pos < len;) {
pos += input.read(bytes, pos, len - pos);
}
String s = new String(bytes);
parseAttributes(s);
}
return keepAlive;
}
String process(String file) {
server.trace("process " + file);
while (file.endsWith(".do")) {
if ("login.do".equals(file)) {
file = login();
} else if ("index.do".equals(file)) {
file = index();
} else if ("logout.do".equals(file)) {
file = logout();
} else if ("settingRemove.do".equals(file)) {
file = settingRemove();
} else if ("settingSave.do".equals(file)) {
file = settingSave();
} else if ("test.do".equals(file)) {
file = test();
} else if ("query.do".equals(file)) {
file = query();
} else if ("tables.do".equals(file)) {
file = tables();
} else if ("editResult.do".equals(file)) {
file = editResult();
} else if ("getHistory.do".equals(file)) {
file = getHistory();
} else if ("admin.do".equals(file)) {
file = admin();
} else if ("adminSave.do".equals(file)) {
file = adminSave();
} else if ("adminShutdown.do".equals(file)) {
file = adminShutdown();
} else if ("autoCompleteList.do".equals(file)) {
file = autoCompleteList();
} else {
file = "error.jsp";
}
}
server.trace("return " + file);
return file;
}
private String autoCompleteList() {
String query = (String) attributes.get("query");
boolean lowercase = false;
if (query.trim().length() > 0 && Character.isLowerCase(query.trim().charAt(0))) {
lowercase = true;
}
try {
String sql = query;
if (sql.endsWith(";")) {
sql += " ";
}
ScriptReader reader = new ScriptReader(new StringReader(sql));
reader.setSkipRemarks(true);
String lastSql = "";
while (true) {
String n = reader.readStatement();
if (n == null) {
break;
}
lastSql = n;
}
String result = "";
if (reader.isInsideRemark()) {
if (reader.isBlockRemark()) {
result = "1#(End Remark)# */\n" + result;
} else {
result = "1#(Newline)#\n" + result;
}
} else {
sql = lastSql == null ? "" : lastSql;
while (sql.length() > 0 && sql.charAt(0) <= ' ') {
sql = sql.substring(1);
}
if (sql.trim().length() > 0 && Character.isLowerCase(sql.trim().charAt(0))) {
lowercase = true;
}
Bnf bnf = session.getBnf();
if (bnf == null) {
return "autoCompleteList.jsp";
}
HashMap map = bnf.getNextTokenList(sql);
String space = "";
if (sql.length() > 0) {
char last = sql.charAt(sql.length() - 1);
if (!Character.isWhitespace(last) && (last != '.' && last >= ' ' && last != '\'' && last != '"')) {
space = " ";
}
}
ArrayList list = new ArrayList(map.size());
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Entry) it.next();
String key = (String) entry.getKey();
String type = "" + key.charAt(0);
String value = (String) entry.getValue();
key = key.substring(2);
if (Character.isLetter(key.charAt(0)) && lowercase) {
key = StringUtils.toLowerEnglish(key);
value = StringUtils.toLowerEnglish(value);
}
if (key.equals(value) && !".".equals(value)) {
value = space + value;
}
key = StringUtils.urlEncode(key);
key = StringUtils.replaceAll(key, "+", " ");
value = StringUtils.urlEncode(value);
value = StringUtils.replaceAll(value, "+", " ");
list.add(type + "#" + key + "#" + value);
}
Collections.sort(list);
StringBuffer buff = new StringBuffer();
if (query.endsWith("\n") || query.trim().endsWith(";")) {
list.add(0, "1#(Newline)#\n");
}
for (int i = 0; i < list.size(); i++) {
if (i > 0) {
buff.append('|');
}
buff.append((String) list.get(i));
}
result = buff.toString();
}
session.put("autoCompleteList", result);
} catch (Throwable e) {
e.printStackTrace();
}
return "autoCompleteList.jsp";
}
private String admin() {
session.put("port", "" + server.getPort());
session.put("allowOthers", "" + server.getAllowOthers());
session.put("ssl", String.valueOf(server.getSSL()));
session.put("sessions", server.getSessions());
return "admin.jsp";
}
private String adminSave() {
try {
server.setPort(MathUtils.decodeInt((String) attributes.get("port")));
server.setAllowOthers(Boolean.valueOf((String) attributes.get("allowOthers")).booleanValue());
server.setSSL(Boolean.valueOf((String) attributes.get("ssl")).booleanValue());
server.saveSettings();
} catch (Exception e) {
server.trace(e.toString());
}
return admin();
}
private String adminShutdown() {
server.shutdown();
return "admin.jsp";
}
private String index() {
String[][] languageArray = server.getLanguageArray();
String language = (String) attributes.get("language");
Locale locale = session.locale;
if (language != null) {
if (locale == null || !StringUtils.toLowerEnglish(locale.getLanguage()).equals(language)) {
locale = new Locale(language, "");
server.readTranslations(session, locale.getLanguage());
session.put("language", language);
session.locale = locale;
}
} else {
language = (String) session.get("language");
}
session.put("languageCombo", getComboBox(languageArray, language));
String[] settingNames = server.getSettingNames();
String setting = attributes.getProperty("setting");
if (setting == null && settingNames.length > 0) {
setting = settingNames[0];
}
String combobox = getComboBox(settingNames, setting);
session.put("settingsList", combobox);
ConnectionInfo info = server.getSetting(setting);
if (info == null) {
info = new ConnectionInfo();
}
session.put("setting", PageParser.escapeHtml(setting));
session.put("name", PageParser.escapeHtml(setting));
session.put("driver", PageParser.escapeHtml(info.driver));
session.put("url", PageParser.escapeHtml(info.url));
session.put("user", PageParser.escapeHtml(info.user));
return "index.jsp";
}
private String getHistory() {
int id = Integer.parseInt(attributes.getProperty("id"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -