实现一个基于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`,输入正确的用户名和密码,即可登录成功,显示登录用户的用户名和是第几位登录的用户。