Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA服务器don';不要发送正确的HTML_Java_Html_Cookies - Fatal编程技术网

JAVA服务器don';不要发送正确的HTML

JAVA服务器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

我用Java编写了一个小应用程序,但它不能正确地服务于HTML。 当方法checkCookies返回false时出现问题。通常应该执行一个“else”子句,但这不会发生。一些有趣的事情-从handle()方法的开始到第一个条件,应用程序运行了3次(计数器正在增加)。我不知道如何修理它。若我得到了一个名为“Login”的cookie,或者我手动修改了这个方法,使其始终返回true,那个么它运行良好。 主文件: Loginpage.java

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;