`
ysen
  • 浏览: 123038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml 记录 用户访问记录

    博客分类:
  • xml
阅读更多

两个页面一个登录一个显示!利用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);

	}
	
	
	
	
	

}

 

  • log.rar (1.3 MB)
  • 下载次数: 47
分享到:
评论
3 楼 maomiandyou 2010-05-24  
不讨论,但是第一感觉就是xml太臃肿了
如果是我,我会改为下面这样,可以节约很多空间的,最好连空格,换行也去掉
----------------------
<users>
  <u i="1" n="a" p="a" />
  <u i="2" n="b" p="b" />
</users>
2 楼 ysen 2010-04-30  
Foxswily 写道
不了解LogManager上层封装有没有同步,至少单看这部分代码会有IO争抢的问题。
频繁解析、构造xml效率很要命。

可以尝试利用Log的xml输出,比如log4j的XmlLayout,既解决并发也解决效率。



可以通过加锁的方式,解决线程安全的问题,但是怎么才能解决xml存储的时候数据丢失的问题了?
1 楼 Foxswily 2010-04-28  
不了解LogManager上层封装有没有同步,至少单看这部分代码会有IO争抢的问题。
频繁解析、构造xml效率很要命。

可以尝试利用Log的xml输出,比如log4j的XmlLayout,既解决并发也解决效率。

相关推荐

    使用XML方式查找关系表记录 编程小实例,C++.net源代码编写

    XML的灵活性和可读性使得它成为数据库记录检索的一个理想选择,尤其是在需要跨平台或跨语言交互的情况下。本编程小实例将探讨如何使用C++.NET来实现XML方式查找关系表记录的功能。 首先,我们需要了解C++.NET框架中...

    使用XML方式查找数据库记录 编程小实例,C++.net源代码编写

    3. **遍历结果**:对于找到的每个记录,我们可以访问其属性和子元素来获取数据库记录的具体信息。例如,假设每条记录都有`id`和`data`属性: ```cpp for each (System::Xml::XmlElement^ record in records) { ...

    jsp程序 用户IP地址所在地记录

    在开发Web应用程序时,有时我们需要获取并记录用户的IP地址,以便了解用户来自哪里,这有助于进行数据分析、安全监控以及提供地域性服务。本项目“jsp程序 用户IP地址所在地记录”正是针对这一需求而设计的。它包含...

    XML同学录系统源码

    这个系统利用了XML文件来存储和管理同学录中的数据,具有用户注册、登录、管理员管理和显示学生信息等功能。接下来,我们将深入探讨该系统的核心知识点。 首先,.NET Framework是微软开发的一个开发平台,它提供了...

    注册与登录_基于xml格式的存储.zip

    在登录阶段,服务器会检查用户提交的用户名和密码是否匹配存储在XML文件中的记录。如果匹配,用户会被认为已成功登录;如果不匹配,则会返回错误信息。 总的来说,这个压缩包包含的示例可能展示了如何使用Java和DOM...

    Android开发教程之使用_Android_和_XML_构建动态用户界面(一).

    ### Android开发教程之使用Android和XML构建动态用户界面(一) #### 概述 本教程旨在教授开发者如何通过结合Android SDK与XML技术来构建具备高度灵活性及动态化的用户界面(UI)。通过本教程的学习,读者将掌握从...

    XML_在线相册

    4. **comments.xml**:此文件记录了用户对照片的评论,包括评论者、评论内容和时间等信息: ```xml &lt;user&gt;JohnDoe &lt;content&gt;Great shot! &lt;timestamp&gt;2022-01-02T14:30:00Z ``` 接下来,我们看下系统的几个关键...

    简单的XML学生信息系统

    界面.jpg可能展示了系统的用户界面,包括登录页面、学生信息列表、新增学生信息表单等。在ASP.NET中,这些界面通常由ASP.NET Web Forms或MVC(Model-View-Controller)架构创建,使用HTML、CSS和JavaScript进行布局...

    Spring security如何实现记录用户登录时间功能

    Spring Security 框架提供了强大的身份验证和授权功能,然而在实际应用中,我们还需要记录用户的登录时间,以便于日后进行登录记录的追踪和分析。在本文中,我们将详细介绍如何使用 Spring Security 实现记录用户...

    xmldom

    XMLDOM(XML Document Object Model)是用于处理XML文档的一个接口,它是W3C制定的一套标准,允许程序和脚本动态地访问和更新XML文档的内容、结构和样式。在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含...

    shiro简单登录+logback日志记录

    本文将详细介绍如何在SpringBoot项目中集成Shiro实现简单的用户登录功能,并利用Logback进行日志记录。 首先,我们来看Shiro的登录实现。Shiro的核心组件包括Subject、SecurityManager、Realm等。Subject代表当前...

    XML学习指南 大部分基本的XML问题

    XML的另一个重要特性是其可扩展性,意味着用户可以自定义新的标记来适应特定领域的需求。这使得XML成为各行各业的数据交换标准,如电子商业(e-commerce)、医疗记录、软件配置等。 XML还与一系列相关技术紧密关联...

    TinyXML入门教程

    TinyXML采用**文档对象模型**(DOM)来解析XML文件,即一次性将整个XML文档加载到内存中并形成树状结构,使得用户可以通过一系列接口来访问和修改这些数据。这种方式虽然占用较多内存,但对于小型至中型文件来说非常...

    domino通过lotusscript解析xml

    使用Lotusscript编写代理,我们可以编写脚本来解析XML数据,然后根据需要执行操作,如更新数据库记录、发送邮件等。 在提供的压缩包文件中,`xmlOpt.lss`可能是一个包含了处理XML的Lotusscript库或类的文件,可以...

    java注册登录系统(xml&mysql)两种方式实现

    总的来说,这个资源涵盖了Java后端开发中实现注册登录系统的基本步骤,包括XML配置、MySQL数据库操作、用户验证、安全措施等关键环节。通过学习和实践,开发者可以深入理解Web应用的开发流程,并为其他更复杂的系统...

    Android 使用记录访问权限

    总结来说,Android的记录访问权限和`UsageStatsManager`是强大的工具,它们可以帮助开发者深入了解用户如何与他们的应用互动,同时也有助于提高用户体验和设备的安全性。然而,正确使用这些工具需要对Android权限...

    XML数据操作接口 如何利用JSP操作XML文件

    2. 遍历XML文档:通过`Document`对象访问XML的节点结构,如元素、属性和文本。 3. 处理数据:提取所需信息,可能涉及转换、过滤或计算。 4. 显示结果:使用JSP标签库(如JSTL)或内联Java代码将处理后的数据输出到...

    XML考试系统.rar

    5. 数据持久化:可能使用数据库(如MySQL)来持久化用户信息和考试记录,同时XML数据可能会被导入/导出。 6. 错误处理和日志记录:用于调试和问题排查。 在实际开发中,这个XML考试系统可能还涉及其他技术,如CSS和...

    学生登陆系统JSP+XML

    综上所述,"学生登录系统JSP+XML"是一个集成了多个技术的Web应用,涵盖了从用户界面设计、后端逻辑处理到数据存储和权限控制的多个层面,展示了Web开发中的典型实践。通过学习和理解这个系统,开发者可以提升自己在...

    XML文件电子商务

    XML还与SOAP(简单对象访问协议)一起,用于构建Web服务,允许不同系统间的远程调用和数据交换,这对于电子商务中的供应链管理和合作伙伴集成至关重要。 XML文档还可以通过XPath、XQuery和XSLT进行查询、检索和转换...

Global site tag (gtag.js) - Google Analytics