简单的用户登录系统
设计一个web应用,该web应用提供两个JSP页面,一个可以让用户输入姓名、年龄等信息,另一个页面显示登陆结果。web应用提供一个servlet对象用于负责数据的操作(姓名、年龄的合法性),web应用提供的javabean负责刻画登录用户,提供简单的数据获取和修改数据的方法。无需连接数据库
我写一个简单的示例:
简单的用户登录系统的设计,包括两个 JSP 页面、一个 Servlet 对象和一个 JavaBean。
该页面用于让用户输入姓名、年龄等信息,并提交表单内容。表单中包括以下字段:
input.jsp 页面的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="login" method="post">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required><br>
<label for="age">年龄:</label>
<input type="number" id="age" name="age" required><br>
<button type="submit">提交</button>
</form>
</body>
</html>
该页面用于显示用户登录结果,包括登录成功或失败的提示信息以及用户输入的姓名和年龄。如果登录失败,则会显示失败原因。
result.jsp 页面的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录结果</title>
</head>
<body>
<h1>登录结果</h1>
<% if (bean.isValid()) { %>
<p>欢迎您,<%= bean.getName() %>!您的年龄是 <%= bean.getAge() %>。</p>
<% } else { %>
<p>登录失败: <%= bean.getErrorMessage() %></p>
<% } %>
</body>
</html>
该对象用于处理用户输入的数据,并将处理结果存储在 JavaBean 中。Servlet 对象的代码如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
LoginBean bean = new LoginBean(name, age);
bean.validate();
request.setAttribute("bean", bean);
request.getRequestDispatcher("result.jsp").forward(request, response);
}
}
该对象用于刻画登录用户,包括用户输入的姓名、年龄以及登录结果的状态和提示信息。JavaBean 的代码如下:
public class LoginBean {
private String name;
private int age;
private boolean valid;
private String errorMessage;
public LoginBean(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isValid() {
return valid;
}
public String getErrorMessage() {
return errorMessage;
}
public void validate() {
if (name == null || name.trim().equals("")) {
valid = false;
errorMessage = "请输入姓名。";
} else if (age < 18 || age > 60) {
valid = false;
errorMessage = "年龄必须在 18 岁到 60 岁之间。";
} else {
valid = true;
}
}
}
该系统可以让用户输入姓名、年龄等信息并提交表单,然后通过 Servlet 对象进行数据处理和验证,并将结果存储在 JavaBean 中。最后,结果页面根据 JavaBean 的状态和提示信息来显示登录结果。
我可以使用Servlet、JSP和JavaBean来实现这个应用。
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求参数
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
// 校验参数合法性
if (StringUtils.isEmpty(name) || StringUtils.isEmpty(ageStr)) {
// 跳转到错误页面
request.getRequestDispatcher("/error.jsp").forward(request, response);
return;
}
int age = Integer.parseInt(ageStr);
if (age <= 0 || age >= 150) {
// 跳转到错误页面
request.getRequestDispatcher("/error.jsp").forward(request, response);
return;
}
// 将参数封装到JavaBean对象中
User user = new User(name, age);
// 将JavaBean对象保存到session中
request.getSession().setAttribute("user", user);
// 重定向到登录结果页面
response.sendRedirect(request.getContextPath() + "/result.jsp");
}
}
<form action="${pageContext.request.contextPath}/login" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="submit" value="登录"/>
</form>
<%
// 从session中获取JavaBean对象
User user = (User) session.getAttribute("user");
%>
欢迎 <%=user.getName()%> 登录,您的年龄是 <%=user.getAge()%> 岁。
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class GetConnListener implements ServletContextListener {
// 应该启动时,该方法被调用。
public void contextInitialized(ServletContextEvent sce) {
try {
// 取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
// 从配置参数中获取驱动
String driver = application.getInitParameter("driver");
// 从配置参数中获取数据库url
String url = application.getInitParameter("url");
// 从配置参数中获取用户名
String user = application.getInitParameter("user");
// 从配置参数中获取密码
String pass = application.getInitParameter("pass");
// 注册驱动
Class.forName(driver);
// 获取数据库连接
Connection conn = DriverManager.getConnection(url, user, pass);
// 将数据库连接设置成application范围内的属性
application.setAttribute("conn", conn);
} catch (Exception ex) {
System.out.println("Listener中获取数据库连接出现异常" + ex.getMessage());
}
}
// 应该关闭时,该方法被调用。
public void contextDestroyed(ServletContextEvent sce) {
// 取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
Connection conn = (Connection) application.getAttribute("conn");
// 关闭数据库连接
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>pass</param-name>
<param-value>root</param-value>
</context-param>
<listener>
<listener-class>com.example.GetConnListener</listener-class>
</listener>
注意:这里只提供了一个简单的示例,实际开发中需要考虑更多的因素,例如数据校验、数据持久化、安全性等。