从文件中读取数据对用户名、密码进行验证,一开始出现从文件中读取的数据带BOM,与输入的数据长度不一致,将文件转为不带BOM(方法见utf-8 BOM批量转换工具)后用equals比较还是不相同,最后只能自己写了个比较的函数
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.Reader"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>check</title>
</head>
<body>
<%!
boolean eq(String s1,String s2){
boolean b = true;
if(s1.length()==s2.length()){
for(int i=0;i<s2.length();i++){
if(s1.charAt(i)!=s2.charAt(i)){
b = false;
break;
}
}
}else{
b=false;
}
return b;
}
%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
boolean flag=false;
String username=request.getParameter("username");
String password=request.getParameter("password");
try {
String path = getServletContext().getRealPath("/student.txt");
Reader in = new FileReader(path);
BufferedReader f = new BufferedReader(in);
String line="";
line = f.readLine();
while(line!=null) {
String[] ss = line.split(" ");
//String un = new String(ss[0].getBytes("UTF-8"),"UTF-8");
//String pw = new String(ss[1].getBytes("UTF-8"),"UTF-8");
//if("0111".equals(un)&&"11".equals(pw)){
//if("0111".equals(username)&&"11".equals(password)){
//if(un.equals(username)&&pw.equals(password)){
//if(username.equals(ss[0])&&password.equals(ss[1])){
//if(username.compareTo(ss[0])==0){
//注释掉的是试过的方法都不行,现在从文件中读出的数据与输入的数据长度是一致的,
//不知道是不是编码问题,始终比较结果为不等
if(eq(username,ss[0])&&eq(password,ss[1])){
flag = true;
break;
}
line = f.readLine();
}
}catch (Exception e) {
e.printStackTrace();
}
if(flag){
out.println("ok");
}else{
out.println("学号或密码错误!");
}
%>
</body>
</html>