编写jsp登录页面(用户名,密码,验证码),如果验证码正确,将这些信息封装在javaBean中,并输出用户名
时间: 2024-03-10 15:47:18 浏览: 172
好的,我可以为您提供jsp登录页面的示例代码,以下是一个简单的示例:
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h2>Login Page</h2>
<form action="login" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<label for="captcha">Captcha:</label>
<input type="text" id="captcha" name="captcha"><br>
<<img src="captcha.jsp" alt="Captcha"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
```
在这个示例中,我们使用了一个表单来收集用户的登录信息,包括用户名、密码和验证码。表单的`action`属性指向一个名为`login`的Servlet,我们将在下面创建。
在登录表单中,我们使用了一个自定义的`captcha`输入框来接收用户输入的验证码。为了生成验证码图像,我们在表单中包含一个`img`元素,它的`src`属性指向一个名为`captcha.jsp`的JSP页面,我们将在下面创建。
接下来,我们需要创建一个JavaBean来封装用户的登录信息。这里我们创建一个名为`User`的类,它包含用户名、密码和验证码这三个属性,以及对应的getter和setter方法:
```java
public class User {
private String username;
private String password;
private String captcha;
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;
}
public String getCaptcha() {
return captcha;
}
public void setCaptcha(String captcha) {
this.captcha = captcha;
}
}
```
最后,我们需要创建一个名为`login`的Servlet来处理登录请求。在这个Servlet中,我们首先从请求参数中获取用户输入的用户名、密码和验证码,然后比较验证码是否正确。如果验证码正确,就创建一个`User`对象,将用户名和密码存储到对象中,并将对象存储到请求属性中。最后,将请求转发到一个名为`welcome.jsp`的JSP页面,该页面将显示用户的用户名。
```java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get user input from request parameters
String username = request.getParameter("username");
String password = request.getParameter("password");
String captcha = request.getParameter("captcha");
// get captcha value from session
HttpSession session = request.getSession();
String captchaValue = (String) session.getAttribute("captcha");
// compare captcha value
if (!captcha.equalsIgnoreCase(captchaValue)) {
request.setAttribute("error", "Invalid captcha");
request.getRequestDispatcher("login.jsp").forward(request, response);
return;
}
// create user object and set properties
User user = new User();
user.setUsername(username);
user.setPassword(password);
// store user object in request attribute
request.setAttribute("user", user);
// forward to welcome page
request.getRequestDispatcher("welcome.jsp").forward(request, response);
}
}
```
在这个Servlet中,我们首先从请求参数中获取用户输入的用户名、密码和验证码。然后从会话中获取之前生成的验证码,并将其与用户输入的验证码进行比较。如果验证码不匹配,就将一个名为`error`的属性存储到请求中,并将请求转发回登录页面,以便显示错误消息。
如果验证码正确,就创建一个`User`对象,并将用户名和密码存储到对象中。最后,将`User`对象存储到请求属性中,并将请求转发到一个名为`welcome.jsp`的JSP页面,该页面将显示用户的用户名。
最后,我们需要创建一个名为`captcha.jsp`的JSP页面来生成验证码图像。以下是一个简单的示例:
```jsp
<%@ page language="java" contentType="image/jpeg"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.awt.*, java.awt.image.*, java.util.*"%>
<%
// create captcha image
int width = 100;
int height = 30;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
Random random = new Random();
g.setColor(new Color(255, 255, 255));
g.fillRect(0, 0, width, height);
g.setColor(new Color(0, 0, 0));
g.setFont(new Font("Arial", Font.BOLD, 18));
String captcha = "";
for (int i = 0; i < 4; i++) {
int x = 20 + i * 20;
int y = 20 + random.nextInt(10);
char c = (char) (random.nextInt(26) + 'a');
captcha += c;
g.drawString(String.valueOf(c), x, y);
}
g.dispose();
// store captcha value in session
HttpSession session = request.getSession();
session.setAttribute("captcha", captcha);
// output image
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
ImageIO.write(image, "jpeg", out);
out.close();
%>
```
在这个JSP页面中,我们首先创建一个100x30的`BufferedImage`对象,并在其上绘制一个白色的矩形。然后,我们在图像上随机生成四个小写字母,并将这些字母绘制到图像上。最后,将生成的验证码存储在会话中,并将图像输出到响应流中,以便在登录页面中显示。
阅读全文