從文件中讀取數據對用戶名、密碼進行驗證,一開始出現從文件中讀取的數據帶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>