简单的用户登录系统
设计一个web应用,该web应用提供两个JSP页面,一个可以让用户输入姓名、年龄等信息,另一个页面显示登陆结果。web应用提供一个servlet对象用于负责数据的操作(姓名、年龄的合法性),无需连接数据库
简单的用户登录系统可以通过以下步骤实现:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LoginServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理 GET 请求
doPost(request, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 从请求参数中读取用户输入的姓名和年龄
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
// 验证用户输入的信息是否合法
if (name == null || name.trim().isEmpty() || age <= 0) {
response.sendRedirect("error.jsp");
return;
}
// 将用户信息存储在Session中
HttpSession session = request.getSession();
session.setAttribute("name", name);
session.setAttribute("age", age);
// 重定向到登录结果页面
response.sendRedirect("result.jsp");
}
}
在以上示例中,我们使用了重定向的方式来显示登录结果。如果用户提供的信息不合法,我们将会使用sendRedirect方法将请求重定向到一个错误页面。如果用户提供的信息是合法的,我们将使用HttpSession对象来将用户信息存储在服务器上,以便在后续的请求中使用。
以下为你提供一个简单的用户登录系统示例代码:
1 登录页面(login.jsp),用户输入姓名和年龄
<form method="post" action="LoginServlet">
<label>姓名:</label>
<input type="text" name="name"/><br/>
<label>年龄:</label>
<input type="text" name="age"/><br/>
<input type="submit" value="登录"/>
</form>
2 处理用户提交信息的 Servlet(LoginServlet.java),判断用户输入的是否合法(姓名不能为空且年龄必须为正整数),并将判断结果存入 session 中
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取用户输入的姓名和年龄
String name = request.getParameter("name");
String age = request.getParameter("age");
// 判断用户输入的姓名和年龄是否合法
if (name == null || name.isEmpty()) {
// 姓名为空,返回登录页面,并显示错误提示信息
request.setAttribute("error", "姓名不能为空");
request.getRequestDispatcher("/login.jsp").forward(request, response);
} else if (age == null || !age.matches("\\d+")) {
// 年龄不是正整数,返回登录页面,并显示错误提示信息
request.setAttribute("error", "年龄必须是正整数");
request.getRequestDispatcher("/login.jsp").forward(request, response);
} else {
// 用户输入的姓名和年龄都合法,将判断结果保存到 session 中,并重定向到结果页面
HttpSession session = request.getSession();
session.setAttribute("name", name);
session.setAttribute("age", age);
response.sendRedirect(request.getContextPath() + "/result.jsp");
}
}
}
3 结果页面(result.jsp),显示用户登录结果
<%
// 从 session 中获取登录结果
HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
String age = (String) session.getAttribute("age");
%>
<h1>登录结果</h1>
<% if (name == null || age == null) { %>
<p>请先登录</p>
<% } else { %>
<p>欢迎您,<%= name %>!您的年龄是 <%= age %> 岁。</p>
<% } %>
上边使用了 JSP 技术和 Servlet 技术实现了一个简单的用户登录系统,用户输入姓名和年龄后,用 Servlet 来处理数据,判断用户输入是否合法,再将处理结果保存到 session 中,最终显示登录结果。
jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例。Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。
区别:
jsp 是 html 页面中内嵌的 Java 代码,侧重页面显示;
Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制, mvc 设计思想中 jsp 位于视图层, servlet 位于控制层Jsp 运行机制:如下图:
JVM 只能识别 Java 类,并不能识别 jsp 代码! web 容器收到以.jsp 为扩展名的 url 请求时,会将访问请求交给tomcat 中 jsp 引擎处理,每个 jsp 页面第一次被访问时, jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译servlet 源程序生成.class 文件,再有 web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互。