用springmvc从框架设计一个注册和登录功能,自定义一个登陆验证的控制器,实现正确登陆跳转至欢迎页面,错误登陆跳转至注册页面的基本功能。
时间: 2024-01-21 16:17:42 浏览: 31
好的,以下是实现注册和登录功能的基本步骤:
1. 在Spring配置文件中配置相关的Bean和视图解析器。
```
<!-- 配置控制器 -->
<context:component-scan base-package="com.example.controller" />
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
```
2. 创建一个注册页面和登录页面的JSP文件,放置在`/WEB-INF/views/`目录下。
3. 创建一个`User`类作为用户实体类,包含`username`和`password`两个属性,以及对应的getter和setter方法。
4. 创建一个`UserService`接口和实现类`UserServiceImpl`,用来处理用户数据的增删改查等操作。
5. 创建一个自定义登录验证的控制器`LoginController`,包含以下方法:
- `showLoginForm()`:用于显示登录页面。
- `processLoginForm(User user, BindingResult result, Model model)`:用于处理登录请求。
- `showRegistrationForm()`:用于显示注册页面。
- `processRegistrationForm(User user, BindingResult result, Model model)`:用于处理注册请求。
其中,`processLoginForm()`方法会先调用`UserService`的`findUserByUsernameAndPassword(String username, String password)`方法,检查用户名和密码是否正确。如果正确,就重定向到欢迎页面;否则,就返回注册页面。`processRegistrationForm()`方法则是调用`UserService`的`save(User user)`方法,将用户信息保存到数据库中。
下面是完整的代码示例:
User.java
```java
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
```
UserService.java
```java
public interface UserService {
void save(User user);
User findUserByUsernameAndPassword(String username, String password);
}
```
UserServiceImpl.java
```java
@Service
public class UserServiceImpl implements UserService {
private Map<String, User> userMap = new HashMap<>();
@Override
public void save(User user) {
userMap.put(user.getUsername(), user);
}
@Override
public User findUserByUsernameAndPassword(String username, String password) {
User user = userMap.get(username);
if (user != null && user.getPassword().equals(password)) {
return user;
}
return null;
}
}
```
LoginController.java
```java
@Controller
public class LoginController {
@Autowired
UserService userService;
@GetMapping("/login")
public String showLoginForm(Model model) {
model.addAttribute("user", new User());
return "login";
}
@PostMapping("/login")
public String processLoginForm(@ModelAttribute("user") User user, BindingResult result, Model model) {
User loginUser = userService.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());
if (loginUser != null) {
return "redirect:/welcome";
} else {
model.addAttribute("error", "Invalid username or password");
return "login";
}
}
@GetMapping("/register")
public String showRegistrationForm(Model model) {
model.addAttribute("user", new User());
return "register";
}
@PostMapping("/register")
public String processRegistrationForm(@ModelAttribute("user") User user, BindingResult result, Model model) {
userService.save(user);
return "redirect:/login";
}
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome";
}
}
```
login.jsp
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h1>Login</h1>
<form action="${pageContext.request.contextPath}/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Login" />
</div>
</form>
<c:if test="${not empty error}">
<p style="color: red">${error}</p>
</c:if>
<p>New user? <a href="${pageContext.request.contextPath}/register">Register here</a></p>
</body>
</html>
```
register.jsp
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Registration Page</title>
</head>
<body>
<h1>Registration</h1>
<form action="${pageContext.request.contextPath}/register" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Register" />
</div>
</form>
<p>Already have an account? <a href="${pageContext.request.contextPath}/login">Login here</a></p>
</body>
</html>
```
welcome.jsp
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Welcome Page</title>
</head>
<body>
<h1>Welcome!</h1>
<p>You have successfully logged in.</p>
<p><a href="${pageContext.request.contextPath}/login">Logout</a></p>
</body>
</html>
```
最后,启动你的Web应用程序并在浏览器中访问`http://localhost:8080/login`即可测试注册和登录功能。