JSP内嵌Java代码读写txt文件实现简单web登录注册

前言:

在学习JSP时,会进行简单登录注册的上手练习,这时候会遇到诸多问题导致项目达不到自己的要求,本博客着重于这些关键点,实现JSP读取文件的简单登录,附上详细代码,关键代码注释。

效果演示:

ps:为了演示效果,所以在JSP表单设计时input标签涉及到密码的统一将“type”设置为“text”,实际使用建议设置为“password”。

  1. 项目文件结构:user.txt文件放在web/password下,与JSP文件在同一文件
    在这里插入图片描述
  2. 注册

主页进行注册

  1. 登录
    登录
  2. 再注册再登录:重新注册一个账号并进行登录,查看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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</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代码实现简单登录注册的介绍,关于这部分内容,读者有什么疑问或想法可以滴滴,欢迎探讨!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值