news 2026/5/8 17:31:41

作业:邮件登录系统(JSP)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
作业:邮件登录系统(JSP)

一、邮件登录系统的核心流程

整体流程可以理解成:

login.jsp 用户输入用户名和密码 ↓ LoginServlet 接收表单参数,判断用户名密码是否正确 ↓ 正确:保存 session,跳转到 main.jsp 错误:跳回 login.jsp,提示错误 ↓ 访问 inbox.jsp / send.jsp / user.jsp 等页面 先判断 session 中有没有登录用户 ↓ 有:允许访问 没有:跳回 login.jsp

二、登录页面 login.jsp

这个页面负责让用户输入用户名和密码。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>邮件系统登录</title> </head> <body> <h2>邮件登录系统</h2> <form action="LoginServlet" method="post"> 用户名:<input type="text" name="username"><br><br> 密码:<input type="password" name="password"><br><br> <input type="submit" value="登录"> </form> <% String msg = (String) request.getAttribute("msg"); if (msg != null) { %> <p style="color:red;"><%= msg %></p> <% } %> </body> </html>

重点记住:

<form action="LoginServlet" method="post">

表示表单会提交到LoginServlet

name="username" name="password"

这两个name很重要,Servlet 里要靠它们接收数据。


三、登录处理 LoginServlet

这是整个系统最关键的代码。

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); // 1. 接收表单参数 String username = request.getParameter("username"); String password = request.getParameter("password"); // 2. 判断用户名和密码 if ("admin".equals(username) && "123456".equals(password)) { // 3. 登录成功,把用户信息保存到 session HttpSession session = request.getSession(); session.setAttribute("loginUser", username); // 4. 跳转到主页面 response.sendRedirect("main.jsp"); } else { // 5. 登录失败,保存错误信息 request.setAttribute("msg", "用户名或密码错误"); // 6. 转发回登录页面 request.getRequestDispatcher("login.jsp").forward(request, response); } } }

四、这段代码必须会解释

1. 接收表单参数

String username = request.getParameter("username"); String password = request.getParameter("password");

含义:

从前端表单中获取用户输入的数据。

注意:

request.getParameter()

返回值永远是String类型,不是int


2. 判断用户名密码

if ("admin".equals(username) && "123456".equals(password)) {

这里表示:

用户名是admin,密码是123456,就算登录成功。

为什么写成:

"admin".equals(username)

而不是:

username.equals("admin")

因为如果usernamenull,后者可能会空指针异常。


3. 保存登录状态

HttpSession session = request.getSession(); session.setAttribute("loginUser", username);

这两行是登录系统最重要的代码。

含义:

服务器给当前用户创建一个session,并在里面保存登录用户信息。

只要 session 还在,系统就认为这个用户已经登录。


4. 登录成功跳转

response.sendRedirect("main.jsp");

这是客户端跳转。

特点:

地址栏会改变 会重新发起一次请求 request 中的数据会丢失 session 中的数据不会丢失

所以登录成功后通常用sendRedirect


5. 登录失败转发

request.setAttribute("msg", "用户名或密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response);

这是服务器端转发。

特点:

地址栏不变 属于一次请求 request 中的数据可以保留

所以登录失败后要把错误信息带回登录页面,适合用forward


五、主页面 main.jsp

登录成功后进入主页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String loginUser = (String) session.getAttribute("loginUser"); if (loginUser == null) { response.sendRedirect("login.jsp"); return; } %> <html> <head> <title>邮件系统首页</title> </head> <body> <h2>欢迎进入邮件系统</h2> <p>当前登录用户:<%= loginUser %></p> <a href="inbox.jsp">收件箱</a><br> <a href="send.jsp">写邮件</a><br> <a href="LogoutServlet">退出登录</a> </body> </html>

核心代码是:

String loginUser = (String) session.getAttribute("loginUser"); if (loginUser == null) { response.sendRedirect("login.jsp"); return; }

意思是:

如果 session 中没有登录用户,说明没有登录,直接跳回登录页。


六、权限页面 inbox.jsp / send.jsp

比如收件箱页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String loginUser = (String) session.getAttribute("loginUser"); if (loginUser == null) { response.sendRedirect("login.jsp"); return; } %> <html> <head> <title>收件箱</title> </head> <body> <h2>收件箱</h2> <p>当前用户:<%= loginUser %></p> <ul> <li>张三:你好,明天开会。</li> <li>李四:作业已经提交。</li> <li>王五:请查收附件。</li> </ul> <a href="main.jsp">返回首页</a> </body> </html>

这种页面属于“隐私页面”,必须判断登录状态。

PPT 里说的:

隐私页面内容阅读完即关闭

本质就是:

没有登录不能访问; 访问完要关闭或退出; 防止别人直接通过地址栏访问。

七、退出登录 LogoutServlet

退出登录就是销毁 session。

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/LogoutServlet") public class LogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); // 销毁 session,清除登录状态 session.invalidate(); // 跳回登录页面 response.sendRedirect("login.jsp"); } }

重点代码:

session.invalidate();

含义:

销毁当前用户的 session,相当于退出登录。


八、考试最容易考的代码点

1. 接收表单数据

String username = request.getParameter("username");

2. 保存登录状态

HttpSession session = request.getSession(); session.setAttribute("loginUser", username);

3. 获取登录状态

String loginUser = (String) session.getAttribute("loginUser");

4. 判断是否登录

if (loginUser == null) { response.sendRedirect("login.jsp"); return; }

5. 退出登录

session.invalidate();

6. 客户端跳转

response.sendRedirect("main.jsp");

7. 服务器端转发

request.getRequestDispatcher("login.jsp").forward(request, response);

九、可以直接背的标准解释

邮件登录系统的核心是利用session保存用户登录状态。用户在login.jsp输入用户名和密码后,表单提交给LoginServlet。Servlet 通过request.getParameter()获取用户名和密码,并进行校验。校验成功后,使用session.setAttribute()保存当前登录用户,然后通过response.sendRedirect()跳转到系统首页。对于收件箱、写邮件等隐私页面,需要先通过session.getAttribute()判断用户是否已经登录,如果没有登录,则重定向回登录页面。用户退出系统时,通过session.invalidate()销毁 session,从而清除登录状态。


重点:

request.getParameter():接收表单参数 session.setAttribute():保存登录状态 session.getAttribute():获取登录状态 session.invalidate():退出登录 response.sendRedirect():客户端跳转 forward():服务器端转发

期末如果考程序设计题,大概率就是让你写一个登录验证 Servlet + session 权限判断页面

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:31:35

YOLO26-seg分割优化:特征融合 | 金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块

💡💡💡问题点:特征融合对高性能视觉模型至关重要,但往往会带来难以承受的计算复杂度。然而,主流的基于注意力的融合方法通常计算开销巨大、实现复杂,在资源受限的场景中效率低下。 💡💡💡我们提出金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块…

作者头像 李华
网站建设 2026/5/8 17:31:21

YOLO26分割原创自研:SPPF原创自研 | SPPF_attention,重新设计加入注意力机制,能够在不同尺度上更好的、更多的关注注意力特征信息

💡💡💡本文原创自研创新改进: 优点:为了利用不同的池化核尺寸提取特征的方式可以获得更多的特征信息,提高网络的识别精度。 如何优化:在此基础上加入注意力机制,能够在不同尺度上更好的、更多的获取特征信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响…

作者头像 李华
网站建设 2026/5/8 17:31:00

如何免费获取专业气象数据:Open-Meteo开源天气API完整指南

如何免费获取专业气象数据&#xff1a;Open-Meteo开源天气API完整指南 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo 在数字化转型的今天&#xff0c;获取精准、实时且免…

作者头像 李华
网站建设 2026/5/8 17:29:23

离谱!一句话+百元预算,这只龙虾就给我搓出了一支百万级广告片?

梦瑶 发自 凹非寺量子位 | 公众号 QbitAI哪怕AI工具满天飞的今天&#xff0c;广告圈打工人也得说一句&#xff1a;内容创作&#xff0c;真苦《广告片》久矣......成本高得没边儿不说&#xff0c;做起来还得在七八个工具之间反复横跳。一支30秒的片子得做一礼拜&#xff0c;预算…

作者头像 李华