作业:邮件登录系统(JSP)
一、邮件登录系统的核心流程整体流程可以理解成login.jsp 用户输入用户名和密码 ↓ LoginServlet 接收表单参数判断用户名密码是否正确 ↓ 正确保存 session跳转到 main.jsp 错误跳回 login.jsp提示错误 ↓ 访问 inbox.jsp / send.jsp / user.jsp 等页面 先判断 session 中有没有登录用户 ↓ 有允许访问 没有跳回 login.jsp二、登录页面 login.jsp这个页面负责让用户输入用户名和密码。% page contentTypetext/html;charsetUTF-8 languagejava % html head title邮件系统登录/title /head body h2邮件登录系统/h2 form actionLoginServlet methodpost 用户名input typetext nameusernamebrbr 密码input typepassword namepasswordbrbr input typesubmit value登录 /form % String msg (String) request.getAttribute(msg); if (msg ! null) { % p stylecolor:red;% msg %/p % } % /body /html重点记住form actionLoginServlet methodpost表示表单会提交到LoginServlet。nameusername namepassword这两个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;charsetUTF-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)因为如果username是null后者可能会空指针异常。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 contentTypetext/html;charsetUTF-8 languagejava % % 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 hrefinbox.jsp收件箱/abr a hrefsend.jsp写邮件/abr a hrefLogoutServlet退出登录/a /body /html核心代码是String loginUser (String) session.getAttribute(loginUser); if (loginUser null) { response.sendRedirect(login.jsp); return; }意思是如果 session 中没有登录用户说明没有登录直接跳回登录页。六、权限页面 inbox.jsp / send.jsp比如收件箱页面% page contentTypetext/html;charsetUTF-8 languagejava % % 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 hrefmain.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 权限判断页面。