前言:
在学习JSP时,会进行简单登录注册的上手练习,这时候会遇到诸多问题导致项目达不到自己的要求,本博客着重于这些关键点,实现JSP读取文件的简单登录,附上详细代码,关键代码注释。
效果演示:
ps:为了演示效果,所以在JSP表单设计时input标签涉及到密码的统一将“type”设置为“text”,实际使用建议设置为“password”。
- 项目文件结构:user.txt文件放在web/password下,与JSP文件在同一文件
- 注册
- 登录
- 再注册再登录:重新注册一个账号并进行登录,查看user.txt文件成功写入了两次注册的用户名和密码,实现功能
环境:
我使用的开发工具是IntelliJ IDEA 2019.3,其实使用eclipse也同样没有问题,这个看个人的习惯。apche的版本我使用的是Tomcat-9.0.30,这个哪个版本也无所谓,这里就交代一下,也有可能存在IDEA版本和Tomcat有冲突报警告的情况,但不影响使用。
详细代码:共5个JSP页面
- index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录页面</title>
</head>
<body >
<p align="center">用户登录页面</p>
<form action="logincheck.jsp" method="post">
<table align="center" border="0.5">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登录" name="login"></td>
</tr>
</table>
<p align="center"><a href="registered.jsp" color=blue>注册用户</a></p>
</form >
</body>
</html>
- logincheck.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.File"%>
<%@page import="java.util.*"%>
<%@page import="java.io.IOException" %>
<html>
<head>
<title>登录检查</title>
</head>
<body>
<%
ArrayList <String> arrayList = new ArrayList<>();
int line = 0;//记录已读行数
try {
String path ="/home/haitao/IdeaProjects/Web Project/web/password";//文件的目录,绝对路径
File file = new File(path,"user.txt");
FileReader fr = new FileReader(file);//按字符读取流中数据
BufferedReader bf = new BufferedReader(fr); //创建一个使用默认大小输入缓冲区的缓冲字符输入流。
String str;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
arrayList.add(str);
line++;
}
bf.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对ArrayList中存储的字符串进行处理
int length = arrayList.size();
int[] array = new int[length];
String[] strings = new String[line];//创建一个字符串数组存取文本中每行的内容,为比较做准备
for (int i = 0; i < length; i++) {
strings[i]=arrayList.get(i);
}
//从index.jsp获取输入的用户名和密码
String uname = request.getParameter("username");
String pwd = request.getParameter("password");
//依次对文件中的用户名和密码进行比较,其中的逻辑很容易理解,奇数行为用户名,偶数行为密码
for(int i = 0;i < length;) {
if (uname.equals(strings[i]) && pwd.equals(strings[i + 1])) {
request.getSession().setAttribute("username",uname);//将用户名保存在整个会话期间,便于成功登录显示
response.sendRedirect("loginsuccess.jsp");
break;
} else {
i+=2;
}
out.print("<script>alert('用户名或密码错误,请重新登录');location.href='index.jsp';</script>");//比较全部数据后不正确返回首页
}
%>
</body>
</html>
- loginsuccess.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<p align="center">
<%String username = request.getSession().getAttribute("username").toString();%>
您好,<%=username %> 你登录成功!!!!</p>
<p align="center"><a href="index.jsp" color=blue>返回登录</a></p>
</body>
</html>
- registered.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册页面</title>
</head>
<body >
<p align="center">用户注册页面</p>
<form action="registeredcheck.jsp" method="post">
<table align="center" border="0.5">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type="text" name="okpassword"></td>
</tr>
<tr>
<td><input type="submit" value=注册 name="registered" align="center"></td>
<td><input type="reset" name=refill value="重填" ></td>
</tr>
</table>
</form >
</body>
</html>
- registeredcheck.jsp
<%@page import="java.io.FileWriter" %>
<%@page import="java.io.IOException" %>
<%@page import="java.io.File"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String username = request.getParameter("username");//注册用户名
String password = request.getParameter("password");//密码
String okpassword = request.getParameter("okpassword");//确认密码
try
{
if(username.length()==0) {
out.print("<script>alert('用户名不能能为空');location.href='registered.jsp';</script>");
} else if(password.length()==0) {
out.print("<script>alert('密码不能为空');location.href='registered.jsp';</script>");
} else if(!password.equals(okpassword)){
out.print("<script>alert('密码输入不一致,请重新注册');location.href='registered.jsp';</script>");
} else if(password.equals(okpassword)) {
String path ="/home/haitao/IdeaProjects/Web Project/web/password";//文件的目录,绝对路径
File file = new File(path,"user.txt");
FileWriter fw = new FileWriter(file,true);//按字符向流中写入数据
if(file.length()==0) {//判断文件是否为空
fw.write(username);
fw.write("\n"+password);//linux系统中换行“\n”,在Windows系统中应查了一下是“\r\n”,如果系统是Windows可以先尝试“\n”应该也没问题
fw.flush();//冲刷出流,将数据写入
fw.close();
out.print("<script>alert('注册成功,点击确定返回登录');location.href='index.jsp';</script>");
} else {
fw.write("\n"+username);//如果文件不为空,写入时要先换行,否则会将之前的内容覆盖
fw.write("\n"+password);
fw.flush();
fw.close();
out.print("<script>alert('注册成功,点击确定返回登录');location.href='index.jsp';</script>");
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
%>
</body>
</html>
总结
在JSP中写JSP脚本进行文件读取操作实际上是Java代码操作文件,直接在JSP页面嵌入Java代码在实际应用中不是很实用,所以本博客所诉内容更多的是新人上手练习。以上便是JSP内嵌Java代码实现简单登录注册的介绍,关于这部分内容,读者有什么疑问或想法可以滴滴,欢迎探讨!