实现一个基于Struts2的登录系统(需要访问数据库)。修改实验1登录系统代码,页面使用Struts2标签,登录成功页面使用OGNL表达式显示登录用户名称,并显示是系统第几位登录成功的用户的代码

时间: 2024-04-29 12:23:25 浏览: 12
1. 创建数据库 首先我们需要创建一个数据库,用于存储用户信息和登录记录。 创建一个名为`login_system`的数据库,然后创建两个表:`user`和`login_record`。 `user`表用于存储用户信息,包括用户名和密码。 ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` `login_record`表用于存储登录记录,包括登录时间和用户名。 ```sql CREATE TABLE `login_record` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login_time` datetime NOT NULL, `username` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 2. 配置数据库连接 在`struts.xml`中配置数据库连接信息。 ```xml <struts> <constant name="struts.convention.package.scan" value="com.example.action"/> <package name="login" extends="struts-default"> <action name="login" class="com.example.action.LoginAction"> <result name="success">/login_success.jsp</result> <result name="input">/login.jsp</result> </action> </package> <constant name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <constant name="hibernate.show_sql" value="true"/> <constant name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <constant name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/login_system"/> <constant name="hibernate.connection.username" value="root"/> <constant name="hibernate.connection.password" value=""/> <constant name="hibernate.hbm2ddl.auto" value="update"/> </struts> ``` 3. 编写实体类和DAO类 创建`User`和`LoginRecord`两个实体类,用于表示用户信息和登录记录。 ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; private String password; // getter and setter } @Entity @Table(name = "login_record") public class LoginRecord { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Temporal(TemporalType.TIMESTAMP) private Date loginTime; private String username; // getter and setter } ``` 创建`UserDAO`和`LoginRecordDAO`两个DAO类,用于操作数据库。 ```java public class UserDAO { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public User findByUsername(String username) { Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery("FROM User WHERE username = :username"); query.setParameter("username", username); return (User) query.uniqueResult(); } } public class LoginRecordDAO { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void add(LoginRecord record) { Session session = sessionFactory.getCurrentSession(); session.save(record); } public int count() { Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery("SELECT COUNT(*) FROM LoginRecord"); return ((Long) query.uniqueResult()).intValue(); } } ``` 4. 编写Action类 创建`LoginAction`类,用于处理登录请求。 ```java public class LoginAction extends ActionSupport { private String username; private String password; private UserDAO userDAO; private LoginRecordDAO loginRecordDAO; public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void setLoginRecordDAO(LoginRecordDAO loginRecordDAO) { this.loginRecordDAO = loginRecordDAO; } public String execute() { User user = userDAO.findByUsername(username); if (user == null || !user.getPassword().equals(password)) { return INPUT; } LoginRecord record = new LoginRecord(); record.setLoginTime(new Date()); record.setUsername(username); loginRecordDAO.add(record); int count = loginRecordDAO.count(); ServletActionContext.getRequest().setAttribute("count", count); return SUCCESS; } // getter and setter } ``` 5. 编写JSP页面 创建`login.jsp`页面,用于显示登录表单。 ```html <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <s:form action="login"> <s:textfield name="username" label="Username"/> <s:password name="password" label="Password"/> <s:submit value="Login"/> </s:form> </body> </html> ``` 创建`login_success.jsp`页面,用于显示登录成功信息。 ```html <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Login Success</title> </head> <body> <h1>Welcome, ${username}!</h1> <p>You are the ${count}th user to log in.</p> </body> </html> ``` 6. 运行程序 启动Tomcat服务器,访问`http://localhost:8080/login_system/login.jsp`,输入正确的用户名和密码,即可登录成功,显示登录用户的用户名和是第几位登录的用户。

相关推荐

最新推荐

recommend-type

基于struts2和hibernate实现登录和注册功能

主要为大家详细介绍了基于struts2和hibernate实现登录和注册功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

毕业设计论文-基于struts2的银行储蓄系统的设计与实现

1 系统简介 1 1.1 系统概述 1 1.2 相关概念及技术介绍 1 1.2.1 JSP简介 1 1.2.2 Struts2 简介 2 1.2.3 Hibernate 简介 3 1.2.4 Ajax 简介 5 1.2.5 SQL Server 简介 6 1.2.6 MyEclipse 简介 6 1.3 核心技术 7 1.3.1 ...
recommend-type

Hibernate与Struts 2整合,学生选课系统源代码

以学生选课系统为例,详细的介绍了Struts2,Spring以及Struts2与Spring整合过程。给出了每个步骤及详细源代码。过程详细,方便大家自学Struts2,Spring这2个开源框架
recommend-type

实战struts2_用户登录

实战struts2_用户登录实战struts2_用户登录实战struts2_用户登录
recommend-type

javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。