Java Web应用程序实现用户登录、学生信息管理和(多种样式的)验证码验证以及页面跳转等基本功能(IDEA)含(Ajax、JSTL)

一、IDEA具体代码的排版布局

注意!!!

https://gitee.com/ele-admin/EasyCaptcha

这里面其中的代码要从以上链接里去找到 以及如何更改多样式的验证码。

二、具体的代码内容(从框架自上而下的代码内容)从Book开始

package cn.lvb.bean;

public class Book {

    private String id;
    private String name;
    private String author;
    private float price;
    private String description;

    public Book() {

    }

    public Book(String id, String name, String author, float price, String description) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
        this.description = description;
    }


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

 

StuClass:

package cn.lvb.bean;

public class StuClass {

    private String clsId;
    private String clsName;

    public StuClass(String clsId, String clsName) {
        this.clsId = clsId;
        this.clsName = clsName;
    }

    public StuClass() {
    }

    public String getClsId() {
        return clsId;
    }

    public void setClsId(String clsId) {
        this.clsId = clsId;
    }

    public String getClsName() {
        return clsName;
    }

    public void setClsName(String clsName) {
        this.clsName = clsName;
    }
}

Student:

package cn.lvb.bean;

public class Student {

    private String no;
    private String name;
    private Integer gender;
    private String birthday;
    private String clsId;

    private String photoURL;

    public String getPhotoURL() {
        return photoURL;
    }

    public void setPhotoURL(String photoURL) {
        this.photoURL = photoURL;
    }

    private StuClass stuClass;

    public StuClass getStuClass() {
        return stuClass;
    }

    public void setStuClass(StuClass stuClass) {
        this.stuClass = stuClass;
    }

    public Student() {

    }

    public Student(String no, String name, Integer gender, String birthday, String clsId) {
        this.no = no;
        this.name = name;
        this.gender = gender;
        this.birthday = birthday;
        this.clsId = clsId;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getClsId() {
        return clsId;
    }

    public void setClsId(String clsId) {
        this.clsId = clsId;
    }
}

/stu/Add

 

package cn.lvb.controller.stu;

import cn.lvb.bean.StuClass;
import cn.lvb.bean.Student;
import cn.lvb.dao.StuClsDAO;
import cn.lvb.dao.StudentDAO;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/stu/Add")
public class Add extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        List<StuClass> clsList = StuClsDAO.getAllList();
        request.setAttribute("clsList",clsList);

        request.getRequestDispatcher("/WEB-INF/jsp/stu/add.jsp").forward(request,response);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //doGet(request, response);
        response.setContentType("application/json;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        String no = request.getParameter("no");
        String name = request.getParameter("name");
        String gender = request.getParameter("gender");
        String birthday = request.getParameter("birthday");
        String clsId = request.getParameter("clsId");

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


        Student studentTemp = StudentDAO.getOne(no);

        if(studentTemp!=null)
        {
            String ret = "{\"code\":-1,\"msg\":\"学号已存在\"}";
            out.write(ret);
            return;

        }
        else
        {
            Student student =
                    new Student(no,name, Integer.parseInt(gender),birthday,clsId);

            student.setPhotoURL(photoURL);

            StudentDAO.add(student);
            String ret = "{\"code\":1,\"msg\":\"成功\"}";
            out.write(ret);
            return;
        }



    }
}

/stu/Delete

package cn.lvb.controller.stu;

import cn.lvb.dao.StudentDAO;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/stu/Delete")
public class Delete extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/json;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

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

        StudentDAO.delete(no);
        String ret = "{\"code\":1,\"msg\":\"成功\"}";
        out.write(ret);
        return;




    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

/stu/Edit

 

package cn.lvb.controller.stu;

import cn.lvb.bean.Student;
import cn.lvb.dao.StudentDAO;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/stu/Edit")
public class Edit extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String no = request.getParameter("no");
        Student student = StudentDAO.getOne(no);

        request.setAttribute("student",student);
        request.getRequestDispatcher("/WEB-INF/jsp/stu/edit.jsp").forward(request,response);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/json;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        String no = request.getParameter("no");
        String name = request.getParameter("name");
        String gender = request.getParameter("gender");
        String birthday = request.getParameter("birthday");
        String clsId = request.getParameter("clsId");


        Student student =
                new Student(no,name, Integer.parseInt(gender),birthday,clsId);

        StudentDAO.edit(student);
        String ret = "{\"code\":1,\"msg\":\"成功\"}";
        out.write(ret);
        return;




    }
}

 不动

/Captcha2:

package cn.lvb.controller;

import com.wf.captcha.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/Captcha2")
public class Captcha2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // SpecCaptcha captcha = new SpecCaptcha(130, 48);
        // captcha.text();  // 获取验证码的字符
        //   captcha.textChar();  // 获取验证码的字符数组

        // gif类型
        // GifCaptcha captcha = new GifCaptcha(130, 48);

        // 中文类型
        // ChineseCaptcha captcha = new ChineseCaptcha(130, 48);

        // 中文gif类型
        ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);

        // 算术类型
        //ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
        //captcha.setLen(3);  // 几位数运算,默认是两位
//        captcha.getArithmeticString();  // 获取运算的公式:3+2=?
//        captcha.text();  // 获取运算的结果:5

        captcha.out(response.getOutputStream());  // 输出验证码
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

/DoLogin

package cn.lvb.controller;

import com.wf.captcha.utils.CaptchaUtil;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/DoLogin")
public class DoLogin extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/json;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

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


        HttpSession session = request.getSession();

        if (!CaptchaUtil.ver(verifyCode, request)) {
            CaptchaUtil.clear(request);  // 清除session中的验证码
            String ret = "{\"code\":-1,\"msg\":\"验证码错误\"}";
            out.write(ret);
            return;
        }



//        String code =(String) session.getAttribute("code");
//        session.removeAttribute("code");
//        if(!verifyCode.equals(code))
//        {
//            String ret = "{\"code\":-1,\"msg\":\"验证码错误\"}";
//            out.write(ret);
//            return;
//        }

        if(username.equals("tom") && password.equals("123456"))
        {
            session.setAttribute("user",username);
            String ret = "{\"code\":1,\"msg\":\"登录成功\"}";
            out.write(ret);
            return;
        }
        else
        {
            String ret = "{\"code\":-1,\"msg\":\"用户名密码错误\"}";
            out.write(ret);
            return;
        }

        //username:username, password:password, verifyCode




    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

/GetStuListJson

 

package cn.lvb.controller;

import cn.lvb.bean.Student;
import cn.lvb.dao.StudentDAO;
import org.json.JSONObject;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.stream.Collectors;

@WebServlet("/GetStuListJson")
public class GetStuListJson extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json;charset=UTF-8");
        request.setCharacterEncoding("utf-8");


        String search = request.getParameter("search");
        PrintWriter out = response.getWriter();

        List<Student> list = StudentDAO.getAllList();


        if(search!=null && search!="")
        {

            list = list.stream()
                    .filter(student -> student.getName().toLowerCase().contains(search.toLowerCase()))
                    .collect(Collectors.toList());
        }



        JSONObject jsonObject = new JSONObject();
        jsonObject.put("rows", list);
        jsonObject.put("total", list.size());

        String jsonstr =jsonObject.toString();
        out.write(jsonstr);
        return;
//
//        Gson gson = new Gson();
//
//        String json = gson.toJson(list);
//        System.out.println(json);
//        out.write(json);
//        Gson gson = new GsonBuilder()
//                .setDateFormat("yyyy-MM-dd") // 自定义日期格式
//                .create();
//
 构建包含数据的Map
//        Map<String, Object> response = new HashMap<>();
//        response.put("rows", StudentDAO.getAllList());
//        response.put("total", StudentDAO.getAllList().size());
//
 序列化为JSON字符串
//        String jsonstr = gson.toJson(response);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

/Index

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);
    }
}

 

/StuList1

package cn.lvb.controller;

import cn.lvb.bean.Student;
import cn.lvb.dao.StudentDAO;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.util.List;

@WebServlet("/StuList1")
public class StuList1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        List<Student> list = StudentDAO.getAllList();
        request.setAttribute("list", list);

        request.getRequestDispatcher("/WEB-INF/jsp/stu_list.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }


}

/upload

 

package cn.lvb.controller;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    private static final String UPLOAD_DIR = "uploads"; // 图片保存目录

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取上传的文件
        Part filePart = request.getPart("file");
        String fileName = extractFileName(filePart);

        // 保存文件到服务器
        String applicationPath = getServletContext().getRealPath("");
        String uploadFilePath = applicationPath + File.separator + UPLOAD_DIR;
        File uploadDir = new File(uploadFilePath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        try (InputStream fileContent = filePart.getInputStream()) {
            Files.copy(fileContent, new File(uploadDir, fileName).toPath(), StandardCopyOption.REPLACE_EXISTING);
        }

        // 构造图片的访问URL
        String fileUrl = request.getContextPath() + "/" + UPLOAD_DIR + "/" + fileName;

        // 返回图片URL给前端
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write("{\"imageUrl\": \"" + fileUrl + "\"}");
    }

    // 提取文件名
    private String extractFileName(Part part) {
        // 获取原始文件名
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        String originalFileName = "";
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                originalFileName = s.substring(s.indexOf("=") + 2, s.length() - 1);
                break;
            }
        }

        // 如果没有文件名,直接返回空字符串
        if (originalFileName.isEmpty()) {
            return "";
        }

        // 提取文件扩展名
        String fileExtension = "";
        int lastDotIndex = originalFileName.lastIndexOf(".");
        if (lastDotIndex > 0) {
            fileExtension = originalFileName.substring(lastDotIndex); // 包含 "."
        }

        // 使用时间戳生成唯一文件名
        long timestamp = System.currentTimeMillis();
        String uniqueFileName = "img_" + timestamp + fileExtension;

        return uniqueFileName;
    }
}

 /VerifyCode

package cn.lvb.controller;

import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/VerifyCode")
public class VerifyCode extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //通知浏览器不要缓存
        response.setHeader("Expires", "-1");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");

        int width = 120;
        int height = 25;
        //创建一副内存图像:BufferedImage
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        //得到属于该图片的画笔:Graphics



        Graphics g = image.getGraphics();
        //画边框
        g.setColor(Color.BLUE);
        g.drawRect(0, 0, width, height);
        //填充背景色
        g.setColor(Color.YELLOW);
        g.fillRect(1, 1, width-2, height-2);
        //画干扰线
        g.setColor(Color.GRAY);

        Random r = new Random();
        for(int i=0;i<10;i++)
            g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));

        //随机数字
        g.setColor(Color.RED);
        g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 20));
        int x = 23;



        String code = "";
        for(int i=0;i<4;i++){
            int a = r.nextInt(10);
            code+=a+"";

            g.drawString(a+"", x, 20);
            x+=20;
        }
        request.getSession().setAttribute("code",code);


        //输出到浏览器的页面上:ImageIO
        ImageIO.write(image, "jpg", response.getOutputStream());


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 StuClsDAO

package cn.lvb.dao;

import cn.lvb.bean.StuClass;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class StuClsDAO {

    private static Map<String, StuClass> map = new LinkedHashMap<>();

    static {
        map.put("1",new StuClass("1","1班"));
        map.put("2",new StuClass("2","2班"));
        map.put("3",new StuClass("3","3班"));
        map.put("4",new StuClass("4","4班"));
        map.put("5",new StuClass("5","5班"));
    }

    public static Map<String, StuClass>  getAllMap()
    {
        return  map;
    }
    public static List<StuClass> getAllList()
    {
        List<StuClass> list = new ArrayList<>();
        for (Map.Entry<String, StuClass> me : map.entrySet()) {
            list.add(me.getValue());
        }
        return  list;
    }

    public static StuClass  getOne(String no)
    {
        return  map.get(no);
    }

    public static void  add(StuClass StuClass)
    {
        map.put(StuClass.getClsId(), StuClass);

        return;
    }


    public static void  edit(StuClass StuClass)
    {
        map.remove(StuClass.getClsId());

        map.put(StuClass.getClsId(), StuClass);


        return;
    }



    public static void  delete(String no)
    {
        map.remove(no);


        return;
    }


}

StudentDAO

package cn.lvb.dao;

import cn.lvb.bean.StuClass;
import cn.lvb.bean.Student;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class StudentDAO {

    private static Map<String, Student> map = new LinkedHashMap<>();

    static {
        map.put("111",new Student("111","张三",1,"2018-01-01","1"));
        map.put("222",new Student("222","张1",1,"2018-01-01","2"));
        map.put("333",new Student("333","张2",1,"2018-01-01","2"));
        map.put("444",new Student("444","张3",2,"2018-01-01","3"));
        map.put("555",new Student("555","张4",1,"2018-01-01","5"));
    }

    public static Map<String, Student>  getAllMap()
    {
        return  map;
    }
    public static List<Student> getAllList()
    {
        List<Student> list = new ArrayList<>();
        for (Map.Entry<String, Student> me : map.entrySet()) {
            Student stu =  me.getValue();

            StuClass stuClass = StuClsDAO.getOne(stu.getClsId());
            stu.setStuClass(stuClass);
            list.add(stu);
        }
        return  list;
    }

    public static Student  getOne(String no)
    {
        return  map.get(no);
    }

    public static void  add(Student student)
    {
        map.put(student.getNo(), student);

        return;
    }


    public static void  edit(Student student)
    {
        map.remove(student.getNo());

        map.put(student.getNo(), student);


        return;
    }



    public static void  delete(String no)
    {
        map.remove(no);


        return;
    }


}

add.jsp 

<%--
  Created by IntelliJ IDEA.
  User: lvb
  Date: 2025/3/24
  Time: 10:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<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="${pageContext.request.contextPath}/css/bootstrap.min.css" rel="stylesheet">
    <link href="${pageContext.request.contextPath}/css/materialdesignicons.min.css" rel="stylesheet">
    <!--标签插件-->
    <link rel="stylesheet" href="${pageContext.request.contextPath}/js/jquery-tags-input/jquery.tagsinput.min.css">
    <link href="${pageContext.request.contextPath}/css/style.min.css" rel="stylesheet">

    <link rel="stylesheet" href="${pageContext.request.contextPath}/js/bootstrap-datepicker/bootstrap-datepicker3.min.css">



</head>

<body>
<div class="container-fluid p-t-15">

    <div class="row">
        <div class="col-lg-12">
            <div class="card">
                <div class="card-body">

                    <form class="row">

                        <div class="form-group col-md-12">
                            <label for="no">学号</label>
                            <input type="text" class="form-control" id="no" name="no" value="" placeholder="请输入标题" />
                        </div>
                        <div class="form-group col-md-12">
                            <label for="name">姓名</label>
                            <input type="text" class="form-control" id="name" name="name" value="" placeholder="关键词" />
                        </div>
                        <div class="form-group col-md-12">
                            <label>性别</label>
                            <div class="clearfix">
                                <label class="lyear-radio radio-inline radio-primary">
                                    <input type="radio"  name="gender" value="1"><span>男</span>
                                </label>
                                <label class="lyear-radio radio-inline radio-primary">
                                    <input type="radio" name="gender" value="2" checked><span>女</span>
                                </label>
                            </div>
                        </div>


                        <div class="form-group col-md-12">
                            <label for="birthday">生日</label>

                            <input class="form-control js-datepicker m-b-10" type="text"
                                   id="birthday"
                                   name="birthday"
                                   placeholder="yyyy-mm-dd" value="" data-date-format="yyyy-mm-dd" />


                        </div>



                        <div class="form-group col-md-12">
                            <label for="clsId">班级</label>
                            <select name="clsId" class="form-control" id="clsId">
                                <c:forEach items="${clsList}" var="cls">
                                    <option value="${cls.clsId}">${cls.clsName}</option>
                                </c:forEach>

                            </select>
                        </div>


                        <div class="form-group col-md-12">
                            <label>照片</label>
                            <div class="form-controls">

                                <ul class="list-inline clearfix lyear-uploads-pic">
                                    <li class="col-xs-4 col-sm-3 col-md-2">
                                        <figure>
                                            <img id="imgPhoto" src="../images/touxinag.png" alt="图片一">
                                            <figcaption>
                                                <a class="btn btn-round btn-square btn-danger" href="#!"><i class="mdi mdi-delete"></i></a>
                                            </figcaption>
                                        </figure>
                                    </li>
                                    <li class="col-xs-4 col-sm-3 col-md-2">
                                        <a class="pic-add" id="add-pic-btn" href="#!" title="点击上传"></a>
                                    </li>
                                </ul>

                                <input type="file" id="fileInput" style="display: none;" accept="image/*">
                                <input type="hidden" id="photoURL" name="photoURL">

                            </div>
                        </div>




                        <div class="form-group col-md-12">
                            <button type="button" onclick="save()" class="btn btn-primary ajax-post" target-form="add-form">确 定</button>
                            <button type="button" class="btn btn-default" onclick="javascript:history.back(-1);return false;">返 回</button>
                        </div>
                    </form>

                </div>
            </div>
        </div>

    </div>

</div>

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
<!--标签插件-->
<script src="${pageContext.request.contextPath}/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/main.min.js"></script>

<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/moment.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/locale/zh-cn.js"></script>
<!--日期选择插件-->
<script src="${pageContext.request.contextPath}/js/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js"></script>

<script>
    function save() {

        var no = $('#no').val();
        var name = $('#name').val();
        var birthday = $('#birthday').val();
        var clsId = $('#clsId').val();

        var gender = $('input[name="gender"]:checked').val();
        var photoURL = $('#photoURL').val();




        if(!gender)
        {
            alert("请选择性别")
            return;
        }



        $.ajax({
            url:"Add",
            type: "post",
            data:{
                no:no, name:name, gender:gender,birthday:birthday,clsId:clsId,photoURL:photoURL
            },
            dataType: "json",
            success:function(res){

                if(res.code==-1)
                {
                    alert(res.msg);
                }
                else   if(res.code==1)
                {
                    alert("ok");
                    window.location.href = '../StuList1';
                }

            },
            error:function (error)
            {
                console.log(error);
                alert("failure");
            }


        });


    }



    $(document).ready(function () {
        // 点击上传按钮时,触发文件选择
        $('#add-pic-btn').on('click', function (e) {
            e.preventDefault();
            $('#fileInput').click(); // 触发隐藏的文件选择框
        });

        // 当文件被选择时,上传文件
        $('#fileInput').on('change', function () {
            const file = this.files[0];
            if (file) {
                uploadImage(file);
            }
        });

        // 上传图片到服务器
        function uploadImage(file) {
            const formData = new FormData();
            formData.append('file', file);

            $.ajax({
                url: '../upload', // 后端接收文件的Servlet路径
                type: 'POST',
                data: formData,
                processData: false, // 不处理数据
                contentType: false, // 不设置内容类型
                success: function (response) {
                    // 假设后端返回的是图片的URL
                    const imageUrl = response.imageUrl;
                    $('#imgPhoto').attr('src', imageUrl); // 更新图片显示


                    $('#photoURL').val(imageUrl);

                },
                error: function (xhr, status, error) {
                    alert('图片上传失败,请重试!');
                }
            });
        }
    });





</script>


</body>
</html>

edit.jsp

<%--
  Created by IntelliJ IDEA.
  User: lvb
  Date: 2025/3/24
  Time: 10:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<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="${pageContext.request.contextPath}/css/bootstrap.min.css" rel="stylesheet">
    <link href="${pageContext.request.contextPath}/css/materialdesignicons.min.css" rel="stylesheet">
    <!--标签插件-->
    <link rel="stylesheet" href="${pageContext.request.contextPath}/js/jquery-tags-input/jquery.tagsinput.min.css">
    <link href="${pageContext.request.contextPath}/css/style.min.css" rel="stylesheet">

    <link rel="stylesheet" href="${pageContext.request.contextPath}/js/bootstrap-datepicker/bootstrap-datepicker3.min.css">



</head>

<body>
<div class="container-fluid p-t-15">

    <div class="row">
        <div class="col-lg-12">
            <div class="card">
                <div class="card-body">

                    <form class="row">

                        <div class="form-group col-md-12">
                            <label for="no">学号</label>
                            <input disabled type="text" class="form-control" id="no" name="no" value="${student.no}" placeholder="请输入标题" />
                        </div>
                        <div class="form-group col-md-12">
                            <label for="name">姓名</label>
                            <input type="text" class="form-control" id="name" name="name"value="${student.name}" placeholder="关键词" />
                        </div>
                        <div class="form-group col-md-12">
                            <label>性别</label>

                            <div class="clearfix">
                                <label class="lyear-radio radio-inline radio-primary">
                                    <input type="radio" name="gender" value="1" ${student.gender == '1' ? 'checked' : ''}><span>男</span>
                                </label>
                                <label class="lyear-radio radio-inline radio-primary">
                                    <input type="radio" name="gender" value="2" ${student.gender  == '2' ? 'checked' : ''}><span>女</span>
                                </label>
                            </div>

                        </div>


                        <div class="form-group col-md-12">
                            <label for="birthday">生日</label>

                            <input class="form-control js-datepicker m-b-10" type="text"
                                   id="birthday"
                                   name="birthday"
                                   value="${student.birthday}"
                                   placeholder="yyyy-mm-dd" value="" data-date-format="yyyy-mm-dd" />


                        </div>



                        <div class="form-group col-md-12">
                            <label for="clsId">班级</label>
                            <select name="clsId" class="form-control" id="clsId">

                                <option value="1" ${student.clsId == '1' ? 'selected' : ''}>一班</option>
                                <option value="2" ${student.clsId == '2' ? 'selected' : ''}>二班</option>
                            </select>
                        </div>


                        <div class="form-group col-md-12">
                            <label>照片</label>
                            <div class="form-controls">

                                <ul class="list-inline clearfix lyear-uploads-pic">
                                    <li class="col-xs-4 col-sm-3 col-md-2">
                                        <figure>
                                            <img id="imgPhoto" src="${student.photoURL}" alt="图片一">
                                            <figcaption>
                                                <a class="btn btn-round btn-square btn-danger" href="#!"><i class="mdi mdi-delete"></i></a>
                                            </figcaption>
                                        </figure>
                                    </li>
                                    <li class="col-xs-4 col-sm-3 col-md-2">
                                        <a class="pic-add" id="add-pic-btn" href="#!" title="点击上传"></a>
                                    </li>
                                </ul>

                                <input type="file" id="fileInput" style="display: none;" accept="image/*">
                                <input type="hidden" id="photoURL" name="photoURL">

                            </div>
                        </div>






                        <div class="form-group col-md-12">
                            <button type="button" onclick="save()" class="btn btn-primary ajax-post" target-form="add-form">确 定</button>
                            <button type="button" class="btn btn-default" onclick="javascript:history.back(-1);return false;">返 回</button>
                        </div>
                    </form>

                </div>
            </div>
        </div>

    </div>

</div>

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
<!--标签插件-->
<script src="${pageContext.request.contextPath}/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/main.min.js"></script>

<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/moment.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datetimepicker/locale/zh-cn.js"></script>
<!--日期选择插件-->
<script src="${pageContext.request.contextPath}/js/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js"></script>

<script>
    function save() {

        var no = $('#no').val();
        var name = $('#name').val();
        var birthday = $('#birthday').val();
        var clsId = $('#clsId').val();

        var gender = $('input[name="gender"]:checked').val();

        if(!gender)
        {
            alert("请选择性别")
            return;
        }



        $.ajax({
            url:"Edit",
            type: "post",
            data:{
                no:no, name:name, gender:gender,birthday:birthday,clsId:clsId
            },
            dataType: "json",
            success:function(res){

                if(res.code==-1)
                {
                    alert(res.msg);
                }
                else   if(res.code==1)
                {
                    alert("ok");
                    window.location.href = '../StuList1';
                }

            },
            error:function (error)
            {
                console.log(error);
                alert("failure");
            }


        });


    }


</script>


</body>
</html>

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"><img src="images/logo-sidebar.png" title="LightYear" alt="LightYear" /></a>
            </div>
            <div class="lyear-layout-sidebar-scroll">

                <nav class="sidebar-main">
                    <ul class="nav nav-drawer">
                        <li class="nav-item active"> <a class="multitabs" href="lyear_main.html"><i class="mdi mdi-home"></i> <span>后台首页</span></a> </li>



                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-palette"></i> <span>学生信息</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a class="multitabs" href="StuList1">学生列表1</a> </li>
                                <li> <a class="multitabs" href="stu_list.html">学生列表2</a> </li>
                            </ul>
                        </li>




                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-palette"></i> <span>UI 元素</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a class="multitabs" href="lyear_ui_buttons.html">按钮</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_cards.html">卡片</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_grid.html">格栅</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_icons.html">图标</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_tables.html">表格</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_modals.html">模态框</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_tooltips_popover.html">提示 / 弹出框</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_alerts.html">警告框</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_pagination.html">分页</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_progress.html">进度条</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_tabs.html">标签页</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_typography.html">排版</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_step.html">步骤</a> </li>
                                <li> <a class="multitabs" href="lyear_ui_other.html">其他</a> </li>
                            </ul>
                        </li>



                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-format-align-justify"></i> <span>表单</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a class="multitabs" href="lyear_forms_elements.html">基本元素</a> </li>
                                <li> <a class="multitabs" href="lyear_forms_radio.html">单选框</a> </li>
                                <li> <a class="multitabs" href="lyear_forms_checkbox.html">复选框</a> </li>
                                <li> <a class="multitabs" href="lyear_forms_switch.html">开关</a> </li>
                            </ul>
                        </li>
                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-file-outline"></i> <span>示例页面</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a class="multitabs" href="lyear_pages_doc.html">文档列表</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_gallery.html">图库列表</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_config.html">网站配置</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_rabc.html">设置权限</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_add_doc.html">新增文档</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_guide.html">表单向导</a> </li>
                                <li> <a class="multitabs" href="lyear_pages_data_table.html">表格插件</a> </li>
                                <li> <a href="lyear_pages_login.html" target="_blank">登录页面</a> </li>
                                <li> <a href="lyear_pages_login_2.html" target="_blank">登录页面2</a> </li>
                                <li> <a href="lyear_pages_login_3.html" target="_blank">登录页面3</a> </li>
                                <li> <a href="lyear_pages_login_4.html" target="_blank">登录页面4</a> </li>
                                <li> <a href="lyear_pages_error.html" target="_blank">错误页面</a> </li>
                            </ul>
                        </li>
                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-language-javascript"></i> <span>JS 插件</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a class="multitabs" href="lyear_js_datepicker.html">日期选取器</a> </li>
                                <li> <a class="multitabs" href="lyear_js_sliders.html">滑块</a> </li>
                                <li> <a class="multitabs" href="lyear_js_colorpicker.html">选色器</a> </li>
                                <li> <a class="multitabs" href="lyear_js_chartjs.html">Chart.js</a> </li>
                                <li> <a class="multitabs" href="lyear_js_jconfirm.html">对话框</a> </li>
                                <li> <a class="multitabs" href="lyear_js_tags_input.html">标签插件</a> </li>
                                <li> <a class="multitabs" href="lyear_js_notify.html">通知消息</a> </li>
                            </ul>
                        </li>
                        <li class="nav-item nav-item-has-subnav">
                            <a href="javascript:void(0)"><i class="mdi mdi-menu"></i> <span>多级菜单</span></a>
                            <ul class="nav nav-subnav">
                                <li> <a href="#!">一级菜单</a> </li>
                                <li class="nav-item nav-item-has-subnav">
                                    <a href="#!">一级菜单</a>
                                    <ul class="nav nav-subnav">
                                        <li> <a href="#!">二级菜单</a> </li>
                                        <li class="nav-item nav-item-has-subnav">
                                            <a href="#!">二级菜单</a>
                                            <ul class="nav nav-subnav">
                                                <li> <a href="#!">三级菜单</a> </li>
                                                <li> <a href="#!">三级菜单</a> </li>
                                            </ul>
                                        </li>
                                    </ul>
                                </li>
                                <li> <a href="#!">一级菜单</a> </li>
                            </ul>
                        </li>
                    </ul>
                </nav>

                <div class="sidebar-footer">
                    <p class="copyright">Copyright &copy; 2019. <a target="_blank" href="http://lyear.itshubao.com">IT书包</a> All rights reserved.</p>
                </div>
            </div>

        </aside>
        <!--End 左侧导航-->

        <!--头部信息-->
        <header class="lyear-layout-header">

            <nav class="navbar navbar-default">
                <div class="topbar">

                    <div class="topbar-left">
                        <div class="lyear-aside-toggler">
                            <span class="lyear-toggler-bar"></span>
                            <span class="lyear-toggler-bar"></span>
                            <span class="lyear-toggler-bar"></span>
                        </div>
                    </div>

                    <ul class="topbar-right">
                        <li class="dropdown dropdown-profile">
                            <a href="javascript:void(0)" data-toggle="dropdown">
                                <img class="img-avatar img-avatar-48 m-r-10" src="images/users/avatar.jpg" alt="笔下光年" />
                                <span>${user} <span class="caret"></span></span>
                            </a>
                            <ul class="dropdown-menu dropdown-menu-right">
                                <li> <a class="multitabs" data-url="lyear_pages_profile.html" href="javascript:void(0)"><i class="mdi mdi-account"></i> 个人信息</a> </li>
                                <li> <a class="multitabs" data-url="lyear_pages_edit_pwd.html" href="javascript:void(0)"><i class="mdi mdi-lock-outline"></i> 修改密码</a> </li>
                                <li> <a href="javascript:void(0)"><i class="mdi mdi-delete"></i> 清空缓存</a></li>
                                <li class="divider"></li>
                                <li> <a href="lyear_pages_login.html"><i class="mdi mdi-logout-variant"></i> 退出登录</a> </li>
                            </ul>
                        </li>
                        <!--切换主题配色-->
                        <li class="dropdown dropdown-skin">
                            <span data-toggle="dropdown" class="icon-palette"><i class="mdi mdi-palette"></i></span>
                            <ul class="dropdown-menu dropdown-menu-right" data-stopPropagation="true">
                                <li class="drop-title"><p>LOGO</p></li>
                                <li class="drop-skin-li clearfix">
                  <span class="inverse">
                    <input type="radio" name="logo_bg" value="default" id="logo_bg_1" checked>
                    <label for="logo_bg_1"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_2" id="logo_bg_2">
                    <label for="logo_bg_2"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_3" id="logo_bg_3">
                    <label for="logo_bg_3"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_4" id="logo_bg_4">
                    <label for="logo_bg_4"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_5" id="logo_bg_5">
                    <label for="logo_bg_5"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_6" id="logo_bg_6">
                    <label for="logo_bg_6"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_7" id="logo_bg_7">
                    <label for="logo_bg_7"></label>
                  </span>
                                    <span>
                    <input type="radio" name="logo_bg" value="color_8" id="logo_bg_8">
                    <label for="logo_bg_8"></label>
                  </span>
                                </li>
                                <li class="drop-title"><p>头部</p></li>
                                <li class="drop-skin-li clearfix">
                  <span class="inverse">
                    <input type="radio" name="header_bg" value="default" id="header_bg_1" checked>
                    <label for="header_bg_1"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_2" id="header_bg_2">
                    <label for="header_bg_2"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_3" id="header_bg_3">
                    <label for="header_bg_3"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_4" id="header_bg_4">
                    <label for="header_bg_4"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_5" id="header_bg_5">
                    <label for="header_bg_5"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_6" id="header_bg_6">
                    <label for="header_bg_6"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_7" id="header_bg_7">
                    <label for="header_bg_7"></label>
                  </span>
                                    <span>
                    <input type="radio" name="header_bg" value="color_8" id="header_bg_8">
                    <label for="header_bg_8"></label>
                  </span>
                                </li>
                                <li class="drop-title"><p>侧边栏</p></li>
                                <li class="drop-skin-li clearfix">
                  <span class="inverse">
                    <input type="radio" name="sidebar_bg" value="default" id="sidebar_bg_1" checked>
                    <label for="sidebar_bg_1"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_2" id="sidebar_bg_2">
                    <label for="sidebar_bg_2"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_3" id="sidebar_bg_3">
                    <label for="sidebar_bg_3"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_4" id="sidebar_bg_4">
                    <label for="sidebar_bg_4"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_5" id="sidebar_bg_5">
                    <label for="sidebar_bg_5"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_6" id="sidebar_bg_6">
                    <label for="sidebar_bg_6"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_7" id="sidebar_bg_7">
                    <label for="sidebar_bg_7"></label>
                  </span>
                                    <span>
                    <input type="radio" name="sidebar_bg" value="color_8" id="sidebar_bg_8">
                    <label for="sidebar_bg_8"></label>
                  </span>
                                </li>
                            </ul>
                        </li>
                        <!--切换主题配色-->
                    </ul>

                </div>
            </nav>

        </header>
        <!--End 头部信息-->

        <!--页面主要内容-->
        <main class="lyear-layout-content">

            <div id="iframe-content"></div>

        </main>
        <!--End 页面主要内容-->
    </div>
</div>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/perfect-scrollbar.min.js"></script>
<script type="text/javascript" src="js/bootstrap-multitabs/multitabs.js"></script>
<script type="text/javascript" src="js/index.min.js"></script>
</body>
</html>

stu_list.jsp 


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<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 href="css/style.min.css" rel="stylesheet">
    <link rel="stylesheet" href="js/jconfirm/jquery-confirm.min.css">
</head>

<body>
<div class="container-fluid p-t-15">

    <div class="row">
        <div class="col-lg-12">
            <div class="card">
                <div class="card-toolbar clearfix">
                    <form class="pull-right search-bar" method="get" action="#!" role="form">
                        <div class="input-group">
                            <div class="input-group-btn">
                                <input type="hidden" name="search_field" id="search-field" value="title">
                                <button class="btn btn-default dropdown-toggle" id="search-btn" data-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
                                    标题 <span class="caret"></span>
                                </button>
                                <ul class="dropdown-menu">
                                    <li> <a tabindex="-1" href="javascript:void(0)" data-field="title">标题</a> </li>
                                    <li> <a tabindex="-1" href="javascript:void(0)" data-field="cat_name">栏目</a> </li>
                                </ul>
                            </div>
                            <input type="text" class="form-control" value="" name="keyword" placeholder="请输入名称">
                        </div>
                    </form>
                    <div class="toolbar-btn-action">
                        <a class="btn btn-primary m-r-5" href="stu/Add"><i class="mdi mdi-plus"></i> 新增</a>
                    </div>
                </div>
                <div class="card-body">

                    <div class="table-responsive">
                        <table class="table table-bordered">
                            <thead>
                            <tr>
                                <th>序号</th>
                                <th>学号</th>
                                <th>姓名</th>
                                <th>性别</th>
                                <th>生日</th>
                                <th>班级</th>
                                <th>操作</th>
                            </tr>
                            </thead>
                            <tbody>
                            <c:forEach items="${list}" var="stu" varStatus="vs">

                                <tr>
                                    <td >${vs.index+1} </td>

                                    <td>${stu.no}</td>
                                    <td>${stu.name}</td>
                                    <td>${stu.gender==1?"男":"女"}</td>
                                    <td>${stu.birthday}</td>
                                    <td>${stu.stuClass.clsName}</td>
                                    <td>
                                        <div class="btn-group">
                                            <a class="btn btn-xs btn-default" href="stu/Edit?no=${stu.no}" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
                                            <a class="btn btn-xs btn-default" onclick="delete2(${stu.no})" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>
                                        </div>
                                    </td>
                                </tr>

                            </c:forEach>


                            </tbody>
                        </table>
                    </div>


                </div>
            </div>
        </div>

    </div>

</div>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/main.min.js"></script>
<script src="js/jconfirm/jquery-confirm.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('.search-bar .dropdown-menu a').click(function() {
            var field = $(this).data('field') || '';
            $('#search-field').val(field);
            $('#search-btn').html($(this).text() + ' <span class="caret"></span>');
        });
    });

    function delete2(no){

        $.alert({
            title: '提示信息',
            content: '您确定删除吗?',
            buttons: {
                confirm: {
                    text: '确认',
                    btnClass: 'btn-primary',
                    action: function(){
                        $.ajax({
                            url:"stu/Delete?no="+no,
                            type: "get",

                            dataType: "json",
                            success:function(res){

                                if(res.code==-1)
                                {
                                    alert(res.msg);
                                }
                                else   if(res.code==1)
                                {
                                    alert("ok");
                                    window.location.href = 'StuList1';
                                }

                            },
                            error:function (error)
                            {
                                console.log(error);
                                alert("failure");
                            }


                        });

                    }
                },
                cancel: {
                    text: '取消',
                    action: function () {
                    }
                }
            }
        });


    }


    function delete2_bak(no){

        const isConfirmed = confirm('你确定要删除这个项目吗?');

        if (!isConfirmed)
            return;


        $.ajax({
            url:"stu/Delete?no="+no,
            type: "get",

            dataType: "json",
            success:function(res){

                if(res.code==-1)
                {
                    alert(res.msg);
                }
                else   if(res.code==1)
                {
                    alert("ok");
                    window.location.href = 'StuList1';
                }

            },
            error:function (error)
            {
                console.log(error);
                alert("failure");
            }


        });

    }



</script>
</body>
</html>

login.html

<!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 href="css/style.min.css" rel="stylesheet">
    <style>
        body {
            display: -webkit-box;
            display: flex;
            -webkit-box-pack: center;
            justify-content: center;
            -webkit-box-align: center;
            align-items: center;
            height: 100%;
        }
        .login-box {
            display: table;
            table-layout: fixed;
            overflow: hidden;
            max-width: 700px;
        }
        .login-left {
            display: table-cell;
            position: relative;
            margin-bottom: 0;
            border-width: 0;
            padding: 45px;
        }
        .login-left .form-group:last-child {
            margin-bottom: 0px;
        }
        .login-right {
            display: table-cell;
            position: relative;
            margin-bottom: 0;
            border-width: 0;
            padding: 45px;
            width: 50%;
            max-width: 50%;
            background: #67b26f!important;
            background: -moz-linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
            background: -webkit-linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
            background: linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
            filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#67b26f', endColorstr='#4ca2cd', GradientType=1 )!important;
        }
        .login-box .has-feedback.feedback-left .form-control {
            padding-left: 38px;
            padding-right: 12px;
        }
        .login-box .has-feedback.feedback-left .form-control-feedback {
            left: 0;
            right: auto;
            width: 38px;
            height: 38px;
            line-height: 38px;
            z-index: 4;
            color: #dcdcdc;
        }
        .login-box .has-feedback.feedback-left.row .form-control-feedback {
            left: 15px;
        }
        @media (max-width: 576px) {
            .login-right {
                display: none;
            }
        }
    </style>
</head>

<body style="background-image: url(images/login-bg-2.jpg); background-size: cover;">
<div class="bg-translucent p-10">
    <div class="login-box bg-white clearfix">
        <div class="login-left">
            <form>
                <div class="form-group has-feedback feedback-left">
                    <input type="text" placeholder="请输入您的用户名" class="form-control" name="username" id="username" />
                    <span class="mdi mdi-account form-control-feedback" aria-hidden="true"></span>
                </div>
                <div class="form-group has-feedback feedback-left">
                    <input type="password" placeholder="请输入密码" class="form-control" id="password" name="password" />
                    <span class="mdi mdi-lock form-control-feedback" aria-hidden="true"></span>
                </div>
                <div class="form-group has-feedback feedback-left row">
                    <div class="col-xs-7">
                        <input type="text" name="captcha" id="captcha" class="form-control" placeholder="验证码">
                        <span class="mdi mdi-check-all form-control-feedback" aria-hidden="true"></span>
                    </div>
                    <div class="col-xs-5">
                        <img src="captcha" class="pull-right" id="captchaImg" style="height: 40px" onclick="refreshCaptcha()" >
                    </div>
                </div>
                <div class="form-group">
                    <label class="lyear-checkbox checkbox-primary m-t-10">
                        <input type="checkbox"><span>5天内自动登录</span>
                    </label>
                </div>
                <div class="form-group">
                    <button class="btn btn-block btn-primary" type="button" onclick="mylogin()">立即登录</button>
                </div>
            </form>
        </div>
        <div class="login-right">
            <p><img src="images/logo.png" class="m-b-md m-t-xs" alt="logo"></p>
            <p class="text-white m-tb-15">Light Year Admin 是一个基于Bootstrap v3.3.7的后台管理系统的HTML模板。</p>
            <p class="text-white">Copyright © 2020 <a href="http://lyear.itshubao.com">IT书包</a>. All right reserved</p>
        </div>
    </div>
</div>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>

<script src="js/bootstrap-notify.min.js"></script>
<script type="text/javascript" src="js/lightyear.js"></script>


<script type="text/javascript">

    function mylogin() {
        var username = $('#username').val();
        var password = $('#password').val();
        var verifyCode = $('#captcha').val();

        lightyear.loading('show');

        $.ajax({
            url:"DoLogin",
            type: "post",
            data:{
                username:username, password:password, verifyCode:verifyCode
            },
            dataType: "json",
            success:function(res){
                lightyear.loading('hide');
                if(res.code==-1)
                {
                    lightyear.notify(res.msg, 'danger', 100);
                    //alert(res.msg);
                    refreshCaptcha();
                    $('#captcha').val('');
                }
                else   if(res.code==1)
                {
                    window.location.href = 'Index';
                }

            },
            error:function (error)
            {
                lightyear.loading('hide');
                console.log(error);
                alert("failure");
            }


        });

    }




    function refreshCaptcha() {
        // Get the current timestamp and append it to the captcha image URL
        var captchaImg = document.getElementById('captchaImg');


        // 更新图片的src属性,可以通过添加时间戳避免浏览器缓存旧的验证码图片
        captchaImg.src = 'captcha?time=' + new Date().getTime();
    }
</script>
</body>
</html>

stu_list2.html

<!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>bootstrap-table - 光年(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 href="css/animate.css" rel="stylesheet">
    <link href="css/style.min.css" rel="stylesheet">
    <link href="js/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
</head>

<body>
<div class="container-fluid p-t-15">

    <div class="row">
        <div class="col-lg-12">
            <div class="card">
                <div class="card-header"><h4>bootstrap-table简单示例</h4></div>
                <div class="card-body">

                    <div id="toolbar" class="toolbar-btn-action">


                        <button id="btn_add" type="button" class="btn btn-primary m-r-5">
                            <span class="mdi mdi-plus" aria-hidden="true"></span>新增
                        </button>
                        <button id="btn_edit" type="button" class="btn btn-success m-r-5">
                            <span class="mdi mdi-check" aria-hidden="true"></span>启用
                        </button>

                        <button id="btn_delete" type="button" class="btn btn-danger">
                            <span class="mdi mdi-window-close" aria-hidden="true"></span>删除
                        </button>


                    </div>
                    <table id="tb_departments"></table>

                </div>
            </div>
        </div>


    </div>

</div>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/perfect-scrollbar.min.js"></script>
<script type="text/javascript" src="js/bootstrap-table/bootstrap-table.min.js"></script>
<script type="text/javascript" src="js/bootstrap-table/bootstrap-table-zh-CN.min.js"></script>

<
<script type="text/javascript" src="js/main.min.js"></script>
<script type="text/javascript">
    $('#tb_departments').bootstrapTable({
        classes: 'table table-bordered table-hover table-striped',
        contentType: 'application/x-www-form-urlencoded', // 明确指定内容类型
        url: 'GetStuListJson',
        method: 'post',
        dataType : 'json',        // 因为本示例中是跨域的调用,所以涉及到ajax都采用jsonp,
        uniqueId: 'no',
        idField: 'no',             // 每行的唯一标识字段
        toolbar: '#toolbar',       // 工具按钮容器
        //clickToSelect: true,     // 是否启用点击选中行
        showColumns: true,         // 是否显示所有的列
        showRefresh: true,         // 是否显示刷新按钮
        search: true,                      // 是否显示表格搜索,此搜索是客户端搜索
        queryParams: function(params) {
            var temp = {
                search: '' // 查询条件
            };
            return temp;
        },                                   // 传递参数
        columns: [{
            field: 'no',
            title: '学号',
            sortable: true    // 是否排序
        }, {
            field: 'name',
            title: '姓名'
        }, {
            field: 'gender',
            title: '性别',
            formatter:function (value, row, index) {
                if(value=="1")
                    return "男";
                else return  "女";
            }
        }, {
            field: 'birthday',
            title: '生日'
        },{
            field: 'stuClass.clsName',
            title: '班级'
        },
            {
                field: 'operate',
                title: '操作',
                formatter: btnGroup,  // 自定义方法
                events: {
                    'click .edit-btn': function (event, value, row, index) {
                        // editUser(row.no);
                    },
                    'click .del-btn': function (event, value, row, index) {
                        //delUser(row.no);
                    }
                }
            }],

        onLoadSuccess: function(data){
            $("[data-toggle='tooltip']").tooltip();
        }
    });

    // 操作按钮
    function btnGroup ()
    {
        let html =
            '<a href="#!" class="btn btn-xs btn-default m-r-5 edit-btn" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>' +
            '<a href="#!" class="btn btn-xs btn-default m-r-5 show-btn" title="查看" data-toggle="tooltip"><i class="mdi mdi-eye"></i></a>' +
            '<a href="#!" class="btn btn-xs btn-default del-btn" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>';
        return html;
    }

    // 操作方法 - 编辑
    function editUser()
    {
        alert('编辑信息跳转');
    }
    // 操作方法 - 删除
    function delUser(no)
    {
        $.ajax({
            url:"StudentDelete",
            type: "post",
            data:{
                no:no
            },
            dataType: "json",
            success:function(res){

                if(res.code==-1)
                {
                    alert(res.msg);
                }
                else   if(res.code==1)
                {
                    // 假设你的表格ID是 `#myTable`
                    $('#tb_departments').bootstrapTable('refresh');
                }

            },
            error:function (error)
            {
                console.log(error);
                alert("failure");
            }


        });
    }
    // 操作方法 - 查看
    function showUser()
    {
        alert('查看详细');
    }


    //$('#tb_departments').bootstrapTable('refresh');
</script>

</body>
</html>

web03.iml

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="web" name="Web">
      <configuration>
        <descriptors>
          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
        </descriptors>
        <webroots>
          <root url="file://$MODULE_DIR$/web" relative="/" />
        </webroots>
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" scope="PROVIDED" name="Tomcat 8.5.75" level="application_server_libraries" />
    <orderEntry type="module-library">
      <library>
        <CLASSES>
          <root url="file://$MODULE_DIR$/web/WEB-INF/lib" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
        <jarDirectory url="file://$MODULE_DIR$/web/WEB-INF/lib" recursive="false" />
      </library>
    </orderEntry>
    <orderEntry type="module-library">
      <library>
        <CLASSES />
        <JAVADOC />
        <SOURCES>
          <root url="file://$MODULE_DIR$/../../web03/src" />
        </SOURCES>
      </library>
    </orderEntry>
  </component>
</module>

二、运行结果展示

不正确的时候的弹窗 

 

 

 

之后跳到添加的页面可以进行删除  会弹出这样的图标来 比较常见的写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莓事哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值