一、具体框架以及代码功能的展示:
1. 文件结构
-
web03: 项目根目录。
-
src: 包含Java源代码。
-
cn.lvb: 主包。
-
bean: 包含实体类,如
Book
和Student
。 -
controller: 包含处理HTTP请求的Servlet类,如
DoLogin
,Index
,StuList1
,VerifyCode
。 -
dao: 包含数据访问对象(DAO)类,如
StudentDAO
。
-
-
-
web: 包含Web资源。
-
css: 样式表文件。
-
fonts: 字体文件。
-
images: 图片资源。
-
js: JavaScript文件。
-
WEB-INF: 包含受保护的资源,如
web.xml
和 JSP 文件。 -
jsp: 包含JSP页面,如
index.jsp
和stu_list.jsp
。 -
login.html: 登录页面。
-
-
2. Java 类
-
Book.java: 一个简单的Java Bean类,表示书籍实体,包含书籍的ID、名称、作者、价格和描述等属性。
-
DoLogin.java: 处理用户登录请求的Servlet。它验证用户输入的用户名、密码和验证码,并返回JSON格式的响应。
-
Index.java: 处理主页请求的Servlet。检查用户是否已登录,如果未登录则重定向到登录页面。
-
StuList1.java: 处理学生列表请求的Servlet。从
StudentDAO
获取学生列表并转发到stu_list.jsp
页面。 -
VerifyCode.java: 生成验证码图片的Servlet。验证码图片用于登录时的验证。
-
StudentDAO.java: 数据访问对象类,提供对学生数据的访问方法,如获取所有学生列表或根据学号获取单个学生信息。
3. JSP 页面
-
index.jsp: 主页面,显示后台管理系统的布局和导航菜单。
-
stu_list.jsp: 显示学生列表的页面,使用JSTL标签库遍历并显示学生信息。
-
login.html: 登录页面,包含用户名、密码和验证码的输入表单,以及登录按钮。
4. HTML 和 JavaScript
-
login.html: 包含登录表单和JavaScript代码,用于处理登录请求和验证码刷新。
-
mylogin(): JavaScript函数,通过AJAX发送登录请求到
DoLogin
Servlet,并根据响应结果进行相应操作。 -
refreshCaptcha(): JavaScript函数,用于刷新验证码图片。
-
5. CSS 和样式
-
CSS 文件: 包含样式表文件,用于定义页面的外观和布局。
-
内联样式: 在
login.html
中定义了登录页面的样式,包括背景图片、表单布局等。
6. Servlet 功能
-
DoLogin: 处理登录请求,验证用户输入的用户名、密码和验证码,并返回JSON格式的响应。
-
Index: 检查用户是否已登录,如果未登录则重定向到登录页面,否则转发到主页。
-
StuList1: 获取学生列表并转发到显示页面。
-
VerifyCode: 生成验证码图片并存储在会话中,用于验证用户输入。
7. DAO 功能
-
StudentDAO: 提供对学生数据的访问方法,如获取所有学生列表或根据学号获取单个学生信息。
8. 页面交互
-
AJAX 请求: 在
login.html
中使用AJAX发送登录请求,并根据响应结果进行页面跳转或显示错误信息。 -
验证码刷新: 通过JavaScript函数
refreshCaptcha()
刷新验证码图片,避免浏览器缓存旧的验证码。
9. 页面布局
-
index.jsp: 使用Bootstrap框架和自定义样式构建后台管理系统的布局,包括侧边导航栏、头部信息和主要内容区域。
-
stu_list.jsp: 使用Bootstrap表格组件显示学生列表,并提供编辑和删除操作的按钮。
10. 依赖库
-
Bootstrap: 用于构建响应式页面布局和样式。
-
jQuery: 用于简化JavaScript代码和处理AJAX请求。
-
JSTL: 用于在JSP页面中遍历和显示数据。
!!
!!运行结果展示先放在这里,具体代码可往下看:
用户名密码代码已经设置好了:tom 123456 :
当登陆用户名密码错误时:
正确时但验证码错误,重新刷新验证码登录:
都正确时,进入页面:
但是要注意 只有登陆了之后http://localhost:8080/web03/Index 这个网页才能直接访问,否则运行后只会跳转到让你登陆的界面:http://localhost:8080/web03/login.html
二、代码各个部分以及功能展示:
这个 Index
类是一个Servlet,用于处理主页请求。它的主要功能是检查用户是否已经登录,并根据
用户的登录状态决定是否允许访问主页。以下是代码的详细解释:
1. 注解
-
@WebServlet("/Index")
: 这个注解将该Servlet映射到URL路径/Index
。当用户访问/Index
时,该Servlet会被调用。
2. doGet 方法
-
HttpSession session = request.getSession();: 获取当前用户的会话(Session)。会话用于在多个请求之间存储用户相关的信息。
-
String user = (String)session.getAttribute("user");: 从会话中获取名为
user
的属性。这个属性通常在用户登录成功后设置(例如在DoLogin
Servlet 中设置)。 -
if(user==null): 检查
user
属性是否为null
。如果为null
,表示用户未登录。-
response.sendRedirect("login.html");: 如果用户未登录,重定向到
login.html
页面,要求用户登录。 -
return;: 结束方法执行,确保后续代码不会被执行。
-
-
request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request,response);: 如果用户已登录,将请求转发到
/WEB-INF/jsp/index.jsp
页面。/WEB-INF
目录下的资源通常受保护,不能直接通过URL访问,只能通过服务器端转发访问。
3. doPost 方法
-
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException: 处理POST请求。
-
doGet(request, response);: 在
doPost
方法中调用doGet
方法,使得POST请求和GET请求的处理逻辑一致。这是一种常见的做法,特别是在处理表单提交时。
-
4. 功能总结
-
用户登录验证: 该Servlet首先检查用户是否已经登录。如果用户未登录,则重定向到登录页面。
-
页面转发: 如果用户已登录,则将请求转发到主页 (
index.jsp
),允许用户访问主页内容。 -
安全性: 通过检查会话中的
user
属性,确保只有已登录的用户才能访问主页。
5. 使用场景
-
这个Servlet通常用于保护需要登录才能访问的页面。例如,在后台管理系统中,只有登录后的用户才能访问管理页面。
-
通过这种方式,可以有效地防止未授权用户访问受保护的资源。
6. 相关技术
-
HttpSession: 用于在多个请求之间存储用户信息。会话通常用于跟踪用户的登录状态。
-
RequestDispatcher: 用于将请求转发到其他资源(如JSP页面)。转发是在服务器端完成的,客户端不会知道转发的目标资源。
-
sendRedirect: 用于将客户端重定向到另一个URL。与转发不同,重定向会导致客户端发起一个新的请求。
通过这个Servlet,应用程序能够确保只有已登录的用户才能访问主页,从而保护敏感资源不被未授权用户访问。
package cn.lvb.controller;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/Index")
public class Index extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String user = (String)session.getAttribute("user");
if(user==null)
{
response.sendRedirect("login.html");
return;
}
request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个 index.jsp
文件是一个Java Server Page (JSP)
用于构建后台管理系统的首页。它提供了用户界面和导航功能,允许用户访问系统的不同部分。以下是该文件的功能与作用的详细解释:
1. 页面结构
-
DOCTYPE 和 HTML 标签: 定义了文档类型和HTML文档的基本结构。
-
head 部分: 包含页面的元数据、标题、样式表和脚本引用。
-
body 部分: 包含页面的实际内容,分为左侧导航栏、头部信息和主要内容区域。
2. 页面功能
-
左侧导航栏 (
<aside class="lyear-layout-sidebar">
):-
Logo: 显示系统的Logo,点击可以返回首页。
-
导航菜单: 包含多个菜单项和子菜单项,用于导航到系统的不同部分,如后台首页、学生信息、UI元素、表单、示例页面、JS插件等。
-
多级菜单: 支持多级菜单结构,允许用户访问更深层次的页面。
-
版权信息: 显示在导航栏底部,包含版权声明和链接。
-
-
头部信息 (
<header class="lyear-layout-header">
):-
用户信息: 显示当前登录用户的头像和用户名,并提供下拉菜单用于访问个人信息、修改密码、清空缓存和退出登录。
-
主题配色切换: 允许用户切换系统的主题配色,包括Logo、头部和侧边栏的背景颜色。
-
-
主要内容区域 (
<main class="lyear-layout-content">
):-
iframe 内容: 使用
<div id="iframe-content"></div>
作为占位符,用于动态加载其他页面的内容。
-
3. 样式和脚本
-
样式表:
-
Bootstrap: 提供响应式布局和基本样式。
-
Material Design Icons: 提供图标支持。
-
自定义样式 (
style.min.css
): 定义系统的自定义样式。
-
-
脚本:
-
jQuery: 用于简化JavaScript代码和处理DOM操作。
-
Bootstrap: 提供交互组件和JavaScript功能。
-
Perfect Scrollbar: 提供自定义滚动条。
-
Multitabs: 支持多标签页功能。
-
自定义脚本 (
index.min.js
): 包含系统的自定义JavaScript逻辑。
-
4. 动态内容加载
-
多标签页功能: 通过
multitabs
类和相关脚本,支持在主要内容区域动态加载和切换多个标签页,提升用户体验。
5. 用户交互
-
导航菜单: 用户可以通过点击导航菜单项访问系统的不同功能页面。
-
用户信息下拉菜单: 提供用户相关的操作选项,如查看个人信息、修改密码、退出登录等。
-
主题配色切换: 允许用户根据个人喜好切换系统的视觉主题。
6. 安全性
-
用户登录验证: 虽然在这个JSP文件中没有直接处理登录验证,但通常会在服务器端(如Servlet)验证用户是否已登录,未登录用户会被重定向到登录页面。
7. 使用场景
-
后台管理系统: 这个页面通常用于后台管理系统的主页,提供系统的整体导航和用户界面。
-
多模块支持: 通过多级菜单和多标签页功能,支持系统的多个模块和功能页面。
8. 技术栈
-
前端: HTML, CSS, JavaScript, Bootstrap, jQuery.
-
后端: JSP, Java Servlets.
通过这个 index.jsp
文件,系统能够提供一个功能丰富、用户友好的后台管理界面,支持多模块导航和动态内容加载,提升用户的操作体验。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title>首页 - 光年(Light Year Admin)后台管理系统模板</title>
<link rel="icon" href="favicon.ico" type="image/ico">
<meta name="keywords" content="LightYear,光年,后台模板,后台管理系统,光年HTML模板">
<meta name="description" content="LightYear是一个基于Bootstrap v3.3.7的后台管理系统的HTML模板。">
<meta name="author" content="yinqi">
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/materialdesignicons.min.css" rel="stylesheet">
<link rel="stylesheet" href="js/bootstrap-multitabs/multitabs.min.css">
<link href="css/style.min.css" rel="stylesheet">
</head>
<body>
<div class="lyear-layout-web">
<div class="lyear-layout-container">
<!--左侧导航-->
<aside class="lyear-layout-sidebar">
<!-- logo -->
<div id="logo" class="sidebar-header">
<a href="index.html"><