基于struts2登陆系统设计与实现(文件)

作业描述:基于struts2的登录系统设计与实现。功能分为注册和登录。系统功能要求:当用户在登录页面上填写用户名和密码并提交后,系统检查该用户是否已经注册,若注册,系统进入主页面,否则,进入注册页面。在后台用txt文件保存用户注册的信息。

有想要了解全部的小伙伴可以点链接下载

链接:https://pan.baidu.com/s/1MErh59zZxd8kaWcBVOlVuQ
提取码:9224

这是上学期java的作业,当时仅仅设计出登录注册的功能,登录后什么也做不了很是单调,这个星期天翻材料正好看到这个待完善的demo,于是心血来潮又给它加上了修改密码的功能,也是用文件完成的。

关于文件这块知识很多很杂,有很多我也不知道它的具体功能是什么,今天设计这个修改密码功能用到了很多文件的知识,我也是费劲功夫查阅资料才慢慢理清一些文件类和输入输出流类的关系和用途,就像我今天设计ChangeAction.java类用到的ByteArrayOutputStream、RandomAccessFile ,不得不说RandomAccessFile 这个类功能很强大,它有个函数seek(int ),只要知道文件某个位置的长度,这个函数就可以定位文件任意一个位置,通过这个seek()函数,我感觉可以完成文件的任何操作了!当然,我也在网上看到了一些其他的方法,但是很繁琐,也许是更加严密的文件修改方式,迫于时间有限我也没深究,只是用了这两个类完成了我的文件修改功能。

话不多说,先看实际应用。

 

 

 上面ChangeAction.java、Change.jsp、ChangeFail.jsp、ChangeFail.jsp均是为了系统更加完善所加的,其中loginsucc.jsp我也是修改过的。

说一下我的LoginAction.java和RegisterAction.java核心部分

 

 

 

 RegisterAction.java关键部分

public String Register() throws IOException {
// File f=new File("C:\\eclipse(ee)workpalce\\Struts2Demo1\Test.text");
File f=new File("C:\\\\eclipse(ee)workpalce\\\\Struts2Demo1(copy)\\Test.text");
OutputStream out = new FileOutputStream(f,true);

String []s=new String [4];
s[0]=username;
s[1]=" ";
s[2]=password;
s[3]="\n";
out.write(s[0].getBytes());
out.write(s[1].getBytes());
out.write(s[2].getBytes());
out.write(s[3].getBytes());

out.close();
return "success";
}

从上面定义的String 数组s ,以及写入文件的顺序来看,用户名和密码在文件Test.text中的位置是这样的:

 

 

 

 

每一行:[用户名][空格][密码][换行]

这样设计方便了LoginAction.java的设计,很容易设计出检索的代码,检索代码大致是这样的,定义好两个String 数组s1和s2,分别保存用户名和密码,比如读取第一行时,s1[0]=”123”,s2[0]=”abc”,这样读取完所有的用户名和密码,在判断时就可以先匹配用户名,如果成功则匹配密码(根据s2的设计对应密码项很好找。

LoginAction.java中关键部分

public String execute() throws Exception {
File f=new File("C:\\eclipse(ee)workpalce\\Struts2Demo1(copy)\\Test.text");
InputStream IN=new FileInputStream(f);
int length=0;
while(IN.read()!=-1)
length++;
if(length==0)
return "notexsit";


InputStream in=new FileInputStream(f);
byte []b=new byte[length];
in.read(b);
String str=new String(b);
char []a=str.toCharArray();

String []s1=new String[10];
String []s2=new String[10];
int i=0 , j=0;
while(i<a.length) {
s1[j]="";
while(a[i]!='\40') {
s1[j] = s1[j] + a[i++];
}
i++;
s2[j]="";
while(i<a.length&&a[i]!='\n') {
s2[j] = s2[j]+a[i++];
}
i++;
j++;
}

i=0;
j=0;
while(s1[i]!=null&&!s1[i].equals(username)) {
i++;
}
if(s1[i]==null)
return "notexsit";
if(s2[i].equals(password)) {
return "success";
}
else
return "input";
}

大致了解了我是如何将数据存放在文件中的,下面修改文件的代码也就很容易看懂了

ChangeAction.java中关键部分

public String execute() throws Exception {
File f=new File("C:\\eclipse(ee)workpalce\\Struts2Demo1(copy)\\Test.text");
InputStream IN=new FileInputStream(f);
int length=0;
while(IN.read()!=-1)
length++;
IN.close();
System.out.println("当前文件长度:"+length);
/*********************************************/
InputStream in=new FileInputStream(f);

byte []b=new byte[length];
in.read(b);
in.close();
String ss=new String(b);

char []arr=ss.toCharArray();

String []s1=new String[100];
String []s2=new String[100];
int i=0 , j=0;
int L1=0,L2=0;
while(i<arr.length) {
s1[j]="";
while(arr[i]!='\40') {
s1[j] = s1[j] + arr[i++];
}
i++;
s2[j]="";
while(i<arr.length&&arr[i]!='\n') {
s2[j] = s2[j]+arr[i++];
}
if(s1[j].equals(username)) {
L2=s2[j].length();
L1=i-L2;
ByteArrayOutputStream bytesz=new ByteArrayOutputStream();
RandomAccessFile RandFile=new RandomAccessFile("C:\\eclipse(ee)workpalce\\Struts2Demo1(copy)\\Test.text","rw");
RandFile.seek(i+1);
byte[]bs=new byte[1024];
int count=0;
while(-1!=(count=RandFile.read(bs,0,bs.length))) {
bytesz.write(bs, 0, count);
}
RandFile.seek(L1);
RandFile.write((password+'\n').getBytes());
RandFile.write(bytesz.toByteArray());
RandFile.close();
return "ChangeSucc";
}

i++;
j++;
}
return "ChangeFail";
}

其实原理不难,就是先对s1检索,是否有符合的账户,检索到符合用户即s1[j],对应文件第j+1行,修改密码我们要讲seek()定位到 i-L2 处,(i 的含义是第 j + 1行的末尾的换行的位置 , L2是 第 j+1行密码的长度),这样就可以修改改账户的密码了,不过RandFile.write((password+'\n').getBytes());这个操作也会将后面的数据全部覆盖,因此我们需要提前将后面数据放在缓存流 bytesz 中等修改完密码后再将缓存流中的数据接着写入文件,这样就完成了密码的修改工作。

 

 看一下效果:

 

 

 这是已有的几组数据,我们来修改其中一项

 

更改密码:abcdef

 

 

 

 

 

 

 我们来看一下文件

 

 

 芜湖~

 

 对比之前的

 

仅有一个登录成功

 差不多了,通过今天一天的努力完善这个系统(中间还优化了代码把隐藏的bug都撕的差不多了,哎~好累~)还是挺不容易的,好好把我java的知识补了补,也学习了不少知识。今天进步一点,加油鸭!

 

posted @ 2021-03-15 00:15  redjack  阅读(294)  评论(0)    收藏  举报