JAVA服务器don';不要发送正确的HTML
我用Java编写了一个小应用程序,但它不能正确地服务于HTML。 当方法checkCookies返回false时出现问题。通常应该执行一个“else”子句,但这不会发生。一些有趣的事情-从handle()方法的开始到第一个条件,应用程序运行了3次(计数器正在增加)。我不知道如何修理它。若我得到了一个名为“Login”的cookie,或者我手动修改了这个方法,使其始终返回true,那个么它运行良好。 主文件: Loginpage.javaJAVA服务器don';不要发送正确的HTML,java,html,cookies,Java,Html,Cookies,我用Java编写了一个小应用程序,但它不能正确地服务于HTML。 当方法checkCookies返回false时出现问题。通常应该执行一个“else”子句,但这不会发生。一些有趣的事情-从handle()方法的开始到第一个条件,应用程序运行了3次(计数器正在增加)。我不知道如何修理它。若我得到了一个名为“Login”的cookie,或者我手动修改了这个方法,使其始终返回true,那个么它运行良好。 主文件: Loginpage.java import com.sun.net.httpserver
import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
public class Loginpage {
public static void main (String[] args) throws Exception{
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/form", new Form());
server.setExecutor(null);
server.start();
}
}
Form.java
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.*;
import java.net.HttpCookie;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Form implements HttpHandler {
int counter = 0;
@Override
public void handle(HttpExchange httpExchange) throws IOException {
counter++;
System.out.println(counter);
List<String> cookies = httpExchange.getRequestHeaders().get("Cookie");
HttpCookie cookie;
String response = "<html><body>system</body></html>";
String method = httpExchange.getRequestMethod();
if (checkCookies(cookies)) {
response = "<html><body> Hello! </body></html>";
} else {
if (method.equals("GET")) {
response = "<html><body><form method='post'>" +
"<input type='text' name='username'><br>" +
"<input type='password' name='pass'><br>" +
"<input type='submit' value='login'<br>" +
"</form></body></html>";
} else if (method.equals("POST")) {
InputStreamReader isr = new InputStreamReader(httpExchange.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
String formData = br.readLine();
Map data = parseFormData(formData);
if (checkData(data)) {
cookie = new HttpCookie("Login", String.valueOf(counter + (counter * 12)));
httpExchange.getResponseHeaders().add("Set-Cookie", cookie.toString());
}
}
}
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
private boolean checkCookies(List<String> cookies) {
boolean isValid = false;
for (String s : cookies) {
System.out.println(s);
if (s.matches("Login.*")) {
isValid = true;
}
}
System.out.println(isValid);
return isValid;
}
private boolean checkData(Map<String, String> data) {
DAO dao = new DAO();
String username = data.get("username");
System.out.println(username);
String password = data.get("pass");
System.out.println(password);
if (dao.checkData(username, password)) {
return true;
} else return false;
}
private static Map<String, String> parseFormData(String formData) throws UnsupportedEncodingException {
Map<String, String> map = new HashMap<>();
String[] pairs = formData.split("&");
for (String pair : pairs) {
String[] keyValue = pair.split("=");
String value = new URLDecoder().decode(keyValue[1], "UTF-8");
map.put(keyValue[0], value);
}
return map;
}
}
在checkCookies()中,方法解决了这个问题,但我不知道为什么它在修复之前不返回false。
有人能解释一下吗?这不是一个空列表-它是一个
null
引用。因此,您得到了一个NullPointerException
,并且您的代码被中止。在控制台或日志文件中查找异常。@ErwinBolwidt在控制台中我没有任何异常。只要计数器增加3倍就可以了。我还检查了日志,什么也没有——再次检查。程序仍在运行,但不要转到“下一步”。
if (cookies == null) return false;