两个页面一个登录一个显示!利用IO流读本地磁盘里面的文件,用户名和密码!
另外建一个文件保存哪个用户登录的,IP,登录次数,登录时间
要求:
1登陆次数累加
2记录每次的IP与时间
我的思路:使用xstream 持久化对象到xml文件中,每次判断的时候再反序列化到内存,做相应的逻辑判断。
但是我总觉得效率很低,每次验证都要重新读取xml文件
xml 文件:
登陆用户名密码文件root.xml
<users>
<user>
<user>
<username>ysen2</username>
<password>123</password>
</user>
<user>
<username>ysen</username>
<password>123</password>
</user>
</user>
</users>
日志文件userloginfo.xml
<root>
<userLogInfos>
<userLogInfo>
<userName>ysen</userName>
<loginInfos>
<loginInfo>
<ip>127.0.0.1</ip>
<loginTime>2010-04-27 03:38:46.781 CST</loginTime>
</loginInfo>
<loginInfo>
<ip>127.0.0.1</ip>
<loginTime>2010-04-27 03:40:55.921 CST</loginTime>
</loginInfo>
<loginInfo>
<ip>127.0.0.1</ip>
<loginTime>2010-04-27 03:44:13.187 CST</loginTime>
</loginInfo>
<loginInfo>
<ip>127.0.0.1</ip>
<loginTime>2010-04-27 03:45:45.281 CST</loginTime>
</loginInfo>
<loginInfo>
<ip>127.0.0.1</ip>
<loginTime>2010-04-27 04:14:41.125 CST</loginTime>
</loginInfo>
</loginInfos>
<count>29</count>
</userLogInfo>
<userLogInfo>
<userName>ysen2</userName>
<loginInfos>
<loginInfo>
<ip>192.168.0.1</ip>
<loginTime>2010-04-27 02:24:07.609 CST</loginTime>
</loginInfo>
<loginInfo>
<ip>192.168.0.2</ip>
<loginTime>2010-04-27 02:24:07.609 CST</loginTime>
</loginInfo>
</loginInfos>
<count>20</count>
</userLogInfo>
</userLogInfos>
</root>
主要业务代码:
package com.ysen;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class LogManager {
private static String filePath = "d:/userloginfo.xml";
private static String rootPath = "d:/root.xml";
public static String getFilePath() {
return filePath;
}
public static void setFilePath(String filePath) {
if (filePath != null && !filePath.equals("")) {
LogManager.filePath = filePath;
}
}
public static String getRootPath() {
return rootPath;
}
public static void setRootPath(String rootPath) {
LogManager.rootPath = rootPath;
}
private static XStream xstream = new XStream(new DomDriver());// 不需要XPP3库
static {
// 序列化一个对象到XML
xstream.alias("userLogInfo", UserLogInfo.class);
xstream.alias("loginInfo", loginInfo.class);
xstream.alias("root", Root.class);
xstream.alias("users", Users.class);
xstream.alias("user", ValidUser.class);
}
private LogManager() {
}
public static XStream getInstance() {
if (xstream != null) {
return xstream;
}
return new XStream(new DomDriver());
}
public static boolean validPassword( User user){
/*
Users users = new Users();
ValidUser validuser1 = new ValidUser();
validuser1.setUsername("ysen");
validuser1.setPassword("123");
ValidUser validuser2 = new ValidUser();
validuser2.setUsername("ysen2");
validuser2.setPassword("123");
users.addUser(validuser2);
users.addUser(validuser1);
FileOutputStream fs = null;
try {
fs = new FileOutputStream("d:/root.xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(users, fs);
return true;*/
boolean flag = false;
FileInputStream fis = null;
try {
fis = new FileInputStream( rootPath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Users users = (Users) xstream.fromXML(fis);
List user_sub = users.getUsers();
for (Iterator iterator = user_sub.iterator(); iterator.hasNext();) {
ValidUser validUser = (ValidUser) iterator.next();
if (validUser.getUsername()!=null && validUser.getUsername()!=""&&validUser.getUsername().equals(user.getUsername())&& validUser.getPassword().equals(user.getPassword())) {
flag = true;
}
}
FileOutputStream fs = null;
try {
fs = new FileOutputStream( rootPath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(users, fs);
return flag;
}
public static void validata(User user) {
/*
* 验证用户名与密码
*/
if(!validPassword( user)){
return ;
}
FileInputStream fis = null;
try {
fis = new FileInputStream( filePath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Root root = (Root) xstream.fromXML(fis);
List userloginInfos = root.getUserLogInfo();
for (Iterator iterator = userloginInfos.iterator(); iterator.hasNext();) {
UserLogInfo userlogin = (UserLogInfo) iterator.next();
if (userlogin.getUserName().equals(user.getUsername())) {
// 登陆次数累加1
userlogin.addCount();
// 添加ip 与 登陆时间
loginInfo entry = new loginInfo();
entry.setIp(user.getIp());
entry.setLoginTime(user.getTime());
userlogin.add(entry);
}
}
FileOutputStream fs = null;
try {
fs = new FileOutputStream( filePath );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xstream.toXML(root, fs);
}
}
分享到:
相关推荐
XML的灵活性和可读性使得它成为数据库记录检索的一个理想选择,尤其是在需要跨平台或跨语言交互的情况下。本编程小实例将探讨如何使用C++.NET来实现XML方式查找关系表记录的功能。 首先,我们需要了解C++.NET框架中...
3. **遍历结果**:对于找到的每个记录,我们可以访问其属性和子元素来获取数据库记录的具体信息。例如,假设每条记录都有`id`和`data`属性: ```cpp for each (System::Xml::XmlElement^ record in records) { ...
在开发Web应用程序时,有时我们需要获取并记录用户的IP地址,以便了解用户来自哪里,这有助于进行数据分析、安全监控以及提供地域性服务。本项目“jsp程序 用户IP地址所在地记录”正是针对这一需求而设计的。它包含...
这个系统利用了XML文件来存储和管理同学录中的数据,具有用户注册、登录、管理员管理和显示学生信息等功能。接下来,我们将深入探讨该系统的核心知识点。 首先,.NET Framework是微软开发的一个开发平台,它提供了...
在登录阶段,服务器会检查用户提交的用户名和密码是否匹配存储在XML文件中的记录。如果匹配,用户会被认为已成功登录;如果不匹配,则会返回错误信息。 总的来说,这个压缩包包含的示例可能展示了如何使用Java和DOM...
### Android开发教程之使用Android和XML构建动态用户界面(一) #### 概述 本教程旨在教授开发者如何通过结合Android SDK与XML技术来构建具备高度灵活性及动态化的用户界面(UI)。通过本教程的学习,读者将掌握从...
4. **comments.xml**:此文件记录了用户对照片的评论,包括评论者、评论内容和时间等信息: ```xml <user>JohnDoe <content>Great shot! <timestamp>2022-01-02T14:30:00Z ``` 接下来,我们看下系统的几个关键...
界面.jpg可能展示了系统的用户界面,包括登录页面、学生信息列表、新增学生信息表单等。在ASP.NET中,这些界面通常由ASP.NET Web Forms或MVC(Model-View-Controller)架构创建,使用HTML、CSS和JavaScript进行布局...
Spring Security 框架提供了强大的身份验证和授权功能,然而在实际应用中,我们还需要记录用户的登录时间,以便于日后进行登录记录的追踪和分析。在本文中,我们将详细介绍如何使用 Spring Security 实现记录用户...
XMLDOM(XML Document Object Model)是用于处理XML文档的一个接口,它是W3C制定的一套标准,允许程序和脚本动态地访问和更新XML文档的内容、结构和样式。在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含...
本文将详细介绍如何在SpringBoot项目中集成Shiro实现简单的用户登录功能,并利用Logback进行日志记录。 首先,我们来看Shiro的登录实现。Shiro的核心组件包括Subject、SecurityManager、Realm等。Subject代表当前...
XML的另一个重要特性是其可扩展性,意味着用户可以自定义新的标记来适应特定领域的需求。这使得XML成为各行各业的数据交换标准,如电子商业(e-commerce)、医疗记录、软件配置等。 XML还与一系列相关技术紧密关联...
TinyXML采用**文档对象模型**(DOM)来解析XML文件,即一次性将整个XML文档加载到内存中并形成树状结构,使得用户可以通过一系列接口来访问和修改这些数据。这种方式虽然占用较多内存,但对于小型至中型文件来说非常...
使用Lotusscript编写代理,我们可以编写脚本来解析XML数据,然后根据需要执行操作,如更新数据库记录、发送邮件等。 在提供的压缩包文件中,`xmlOpt.lss`可能是一个包含了处理XML的Lotusscript库或类的文件,可以...
总的来说,这个资源涵盖了Java后端开发中实现注册登录系统的基本步骤,包括XML配置、MySQL数据库操作、用户验证、安全措施等关键环节。通过学习和实践,开发者可以深入理解Web应用的开发流程,并为其他更复杂的系统...
总结来说,Android的记录访问权限和`UsageStatsManager`是强大的工具,它们可以帮助开发者深入了解用户如何与他们的应用互动,同时也有助于提高用户体验和设备的安全性。然而,正确使用这些工具需要对Android权限...
2. 遍历XML文档:通过`Document`对象访问XML的节点结构,如元素、属性和文本。 3. 处理数据:提取所需信息,可能涉及转换、过滤或计算。 4. 显示结果:使用JSP标签库(如JSTL)或内联Java代码将处理后的数据输出到...
5. 数据持久化:可能使用数据库(如MySQL)来持久化用户信息和考试记录,同时XML数据可能会被导入/导出。 6. 错误处理和日志记录:用于调试和问题排查。 在实际开发中,这个XML考试系统可能还涉及其他技术,如CSS和...
综上所述,"学生登录系统JSP+XML"是一个集成了多个技术的Web应用,涵盖了从用户界面设计、后端逻辑处理到数据存储和权限控制的多个层面,展示了Web开发中的典型实践。通过学习和理解这个系统,开发者可以提升自己在...
XML还与SOAP(简单对象访问协议)一起,用于构建Web服务,允许不同系统间的远程调用和数据交换,这对于电子商务中的供应链管理和合作伙伴集成至关重要。 XML文档还可以通过XPath、XQuery和XSLT进行查询、检索和转换...