以前挖的坑,早晚要往里掉。基础太薄弱,要恶补。在此程序前,我还对Servlet没有一个清晰的概念;一周时间写好此程序之后,对Servlet的理解清晰许多。

    这周一直在恶补Spring,今天正好完成了Spring的每日任务,于是抽空来写一下博客,希望这篇随笔可以帮到各位新手们。

    此文章省略了bean,这个很简单,有需要的可以自行创建。

  一、 简单介绍

    这是一个非常简单的一个程序,功能并不完整,只实现了学生方面的登录和选课操作,但是代码干净、整洁。

    主要模块:1. 登录方面写入了MD5密码加密模块;

         2. 选课方面查询、选中、取消选中操作;

         3. 拦截器。

  二、整体预览

    1. Web项目预览

     其中applicationContext.xml是Druid配置文件。虽然Druid是配好的,但是写着写着莫名用得JDBC。

     

    2. lib文件夹->jar包

     

    3. pages文件夹->jsp页面

     

      4. src文件夹->.java

    

  三、 JSP代码

    1. 登录——login.jsp

<body style="text-align: center;"><br><br><h3>学生登录</h3><form action="LoginServlet" method="post">学号:<input type="text" name="numText"><br><br>密码:<input type="password" name="passowrdText"><br><br><input type="submit" value="登录" name="submit"></form></body>

login.jsp

    2. 学生选课主页面——studentIndex.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%String path=request.getContextPath();
String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>学生选课</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><link rel="stylesheet" type="text/css" href="pages/css/studentIndex.css"><script type="text/javascript" src="jQuery/jquery-3.2.1.js"></script><script type="text/javascript">//选择课程
$(document).ready(function() {$("input[name='select']").click(function(){var node= $(this);var remainNum= $(this).parent().parent().children("td").eq(1).html();if (!(remainNum == "0")) {$.ajax({url:"http://localhost:8080/StudentSelect/RemainAddServlet",    //请求的url地址dataType:"json",    //返回格式为jsonasync:true,    //请求是否异步,默认为异步,这也是ajax重要特性data:{"id":$(this).attr("id")},    //参数值type:"POST",    //请求方式
beforeSend:function(){//请求前的处理
},success:function(req){//请求成功时处理//node.parent().parent().remove();node.parent().parent().children("td").eq(1).html(parseInt(remainNum)-parseInt(1));alert("已选中!");document.getElementById("stuInfoIframe").contentWindow.location.reload(true);},complete:function(){//请求完成的处理//alert("请求完成!");
},error:function(){//请求出错处理alert("重复选择!");}});}else{alert("此课程人数已满!");}});});</script></head><body><h3>学生选课界面</h3><form action="SearchServlet" method="post">查找:<input type="text" name="search" value=<%=request.getParameter("search") == null?"":request.getParameter("search")%> ><input type="submit" value="搜索" name="ok" /></form><br><br><table class="courseTable"><tr><td>课程名称</td><td>剩余量</td><td>总数量</td><td>任课教师</td><td>课程地点</td><td>课程时间</td><td>课程时长</td><td>操作</td></tr><c:forEach items="${courseList }" var="courseList"><tr><td>${courseList.courseName }</td><td>${courseList.courseRemain }</td><td>${courseList.courseTotal }</td><td>${courseList.courseTeacher }</td><td>${courseList.coursePlace }</td><td>${courseList.courseTime }</td><td>${courseList.courseTimelength }</td><td><input type="button" value="选中" name="select" id="${courseList.courseId }"/></td></tr></c:forEach></table><br><br><hr><br><br><frameset><iframe style="width: 80%;" id="stuInfoIframe" src="StudentInfoServlet"></iframe></frameset></body>
</html>

studentIndex.jsp

    3. 学生选中的课程信息显示页面——studentInfo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%String path=request.getContextPath();
String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>学生课程</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><link rel="stylesheet" type="text/css" href="pages/css/studentIndex.css"><script type="text/javascript" src="jQuery/jquery-3.2.1.js"></script><script type="text/javascript">//学生课程
$(document).ready(function() {$.ajax({url:"http://localhost:8080/StudentSelect/StudentInfoServlet",    //请求的url地址//dataType:"text",//返回格式async:true,//请求是否异步,默认为异步,这也是ajax重要特性
data:{},//参数值,发送个服务端的数据type:"GET",   //请求方式
beforeSend:function(){//请求前的处理
},success:function(req){//请求成功时处理//alert("学生课程显示成功!");
},complete:function(){//请求完成的处理//alert("请求完成!");
},error:function(){//请求出错处理//alert("学生课程显示失败!");
}});});//取消课程
$(document).ready(function() {$("input[name='cancel']").click(function(){var node= $(this);var nodeId= $(this).attr("id");var remainNum= $("#"+nodeId, window.parent.document).parent().parent().children("td").eq(1).html();$.ajax({url:"http://localhost:8080/StudentSelect/CancelServlet",    //请求的url地址dataType:"json",   //返回格式为jsonasync:true,//请求是否异步,默认为异步,这也是ajax重要特性data:{"id":$(this).attr("id")},    //参数值type:"POST",   //请求方式
beforeSend:function(){//请求前的处理
},success:function(req){//请求成功时处理/*var iframe = window.parent;var div =iframe.document.getElementById(nodeId);alert(div.length);*/node.parent().parent().remove();$("#"+nodeId, window.parent.document).parent().parent().children("td").eq(1).html(parseInt(remainNum)+parseInt("1"));alert("取消成功!");//window.location.reload();
},complete:function(){//请求完成的处理//alert("请求完成!");
},error:function(){//请求出错处理alert("取消失败!");}});});});</script></head><body><table class="courseTable"><tr><td>课程名称</td><td>任课教师</td><td>课程地点</td><td>课程时间</td><td>课程时长</td><td>操作</td></tr><c:forEach items="${studentCourseList }" var="studentCourseList"><tr><td>${studentCourseList.courseName }</td><td>${studentCourseList.courseTeacher }</td><td>${studentCourseList.coursePlace }</td><td>${studentCourseList.courseTime }</td><td>${studentCourseList.courseTimelength }</td><td><input type="button" value="取消" name="cancel" id="${studentCourseList.courseId }" /></td></tr></c:forEach></table></body>
</html>

studentInfo.jsp

  四、 Servlet代码

     1. 登录功能的Servlet——LoginServlet.java

     帐号见数据库(下文有显示)

     密码为123    

packagecom.studentselect.servlet;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.security.NoSuchAlgorithmException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;importcom.studentselect.util.MD5Util;public class LoginServlet extendsHttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}protected voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {try{ Class.forName("com.mysql.jdbc.Driver"); String url= "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8"; String username= "root"; String password= "zhao1110"; Connection conn=(Connection) DriverManager.getConnection(url, username, password); Statement statement=(Statement) conn.createStatement();//根据学号查询//获取学号req.setCharacterEncoding("UTF-8");String keyNum= req.getParameter("numText");//String keyNum = new String(req.getParameter("numText").getBytes("iso-8859-1"), "utf-8");if(keyNum == null) {keyNum= "";}String sql1= "select * from student where student_num='" + keyNum + "'"; ResultSet resultSet=statement.executeQuery(sql1);//获取密码req.setCharacterEncoding("UTF-8");String keyPassword= req.getParameter("passowrdText");//String keyPassword = new String(req.getParameter("passowrdText").getBytes("iso-8859-1"), "utf-8");if(keyPassword == null) {keyPassword= "";}//密码加密MD5Util md5 = newMD5Util();  String newString= "";try{newString=md5.EncoderByMd5(keyPassword);}catch(NoSuchAlgorithmException e) {e.printStackTrace();}catch(UnsupportedEncodingException e) {e.printStackTrace();}//比对密码String passwordString = "";while(resultSet.next()) {passwordString= resultSet.getString("student_password");}if(passwordString.equals(newString)) {//将学号存入sessionHttpSession session =req.getSession();session.setAttribute("numSession", keyNum);resp.sendRedirect("/StudentSelect/FindServlet");}else{resp.setContentType("text/html;charset=UTF-8");resp.getWriter().write("<script language='javascript'>alert('学号或密码错误!')</script>");resp.setHeader("refresh", "0; url=/StudentSelect");}resultSet.close(); statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); }}
}

LoginServlet.java

      2. 主页显示信息的Servlet——FindServlet.java

packagecom.studentselect.servlet;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;importcom.studentselect.bean.Course;public class FindServlet extendsHttpServlet{private static final long serialVersionUID = 1L; @Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}public voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {try{//加载数据库驱动,注册到驱动管理器Class.forName("com.mysql.jdbc.Driver");//数据库连接字符串String url = "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8";//数据库用户名String username = "root";//数据库密码String password = "zhao1110";//创建Connection连接Connection conn =(Connection) DriverManager.getConnection(url, username, password);//SQL语句String sql = "select * from course";//获取StatementStatement statement =(Statement) conn.createStatement(); ResultSet resultSet=statement.executeQuery(sql); List<Course> courseList = new ArrayList<Course>();while(resultSet.next()) { Course course= newCourse();course.setCourseId(resultSet.getInt("course_Id"));course.setCourseName(resultSet.getString("course_Name"));course.setCourseRemain(resultSet.getInt("course_Remain"));course.setCourseTotal(resultSet.getInt("course_Total"));course.setCourseTeacher(resultSet.getString("course_Teacher"));course.setCoursePlace(resultSet.getString("course_Place"));course.setCourseTime(resultSet.getString("course_Time"));course.setCourseTimelength(resultSet.getString("course_Timelength"));courseList.add(course);} req.setAttribute("courseList", courseList);//后台显示数据/*JSONArray jsonArray = JSONArray.fromObject(courseList);System.out.println(jsonArray.toString());*/resultSet.close(); statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } req.getRequestDispatcher("pages/studentIndex.jsp").forward(req, resp);}
}

FindServlet.java

     3. 查询功能的Servlet——SearchServlet.java

packagecom.studentselect.servlet;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;importcom.studentselect.bean.Course;public class SearchServlet extendsHttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}protected voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {req.setCharacterEncoding("UTF-8");String keyString= req.getParameter("search");if(keyString == null) {keyString= "";}try{ Class.forName("com.mysql.jdbc.Driver"); String url= "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8"; String username= "root"; String password= "zhao1110";Connection conn=(Connection) DriverManager.getConnection(url, username, password); Statement statement=(Statement) conn.createStatement(); String sql= "select * from course where course_name like '%" + keyString + "%' or course_remain like '%" + keyString + "%' "+ "or course_total like '%" + keyString + "%' or course_teacher like '%" + keyString + "%'"+ " or course_place like '%" + keyString + "%' or course_time like '%" + keyString + "%'"+ " or course_timelength like '%" + keyString + "%'"; ResultSet resultSet=statement.executeQuery(sql); List<Course> courseList = new ArrayList<Course>();while(resultSet.next()) { Course course= newCourse();course.setCourseId(resultSet.getInt("course_Id"));course.setCourseName(resultSet.getString("course_Name"));course.setCourseRemain(resultSet.getInt("course_Remain"));course.setCourseTotal(resultSet.getInt("course_Total"));course.setCourseTeacher(resultSet.getString("course_Teacher"));course.setCoursePlace(resultSet.getString("course_Place"));course.setCourseTime(resultSet.getString("course_Time"));course.setCourseTimelength(resultSet.getString("course_Timelength"));courseList.add(course); } req.setAttribute("courseList", courseList);//后台显示数据/*JSONArray jsonArray = JSONArray.fromObject(courseList);System.out.println(jsonArray.toString());*/resultSet.close(); statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } req.getRequestDispatcher("pages/studentIndex.jsp?search='"+keyString+"'").forward(req, resp);}
}

SearchServlet.java

   4. 选中课程时触发的Servlet——RemainAddServlet.java

packagecom.studentselect.servlet;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;public class RemainAddServlet extendsHttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}protected voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {try{ Class.forName("com.mysql.jdbc.Driver"); String url= "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8"; String username= "root"; String password= "zhao1110";Connection conn=(Connection) DriverManager.getConnection(url, username, password); Statement statement=(Statement) conn.createStatement();//String keyString = new String(req.getParameter("id").getBytes("iso-8859-1"), "utf-8");
req.setCharacterEncoding("UTF-8");String keyString= req.getParameter("id");if(keyString == null) {keyString= "";resp.sendRedirect("FindServlet");return;}//添加课程String numSession = (String) req.getSession().getAttribute("numSession");String sql1= "select student_selected_course from student where student_num = '" + numSession + "'";ResultSet resultSet=statement.executeQuery(sql1);String courseString= "";while(resultSet.next()) {courseString= resultSet.getString("student_selected_course");}//检查课程选择是否重复String[] courseStrings = courseString.split(",");for (int i=0; i<courseStrings.length; i++) {if(courseStrings[i].equals(keyString)) {return;}}courseString= courseString + keyString + ",";//课程余量-1String sql = "update course set course_remain=course_remain-1 where course_id = '"+ keyString + "'";statement.executeUpdate(sql);//修改课程数据String sql2 = "update student set student_selected_course='" + courseString + "' where student_num = '" + numSession + "'";statement.executeUpdate(sql2);statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); }resp.getWriter().print("{\"data\":\"返回json数据!\"}"); }
}

RemainAddServlet.java

     5. 取消选中的课程时触发的Servlet——CancelServlet.java

packagecom.studentselect.servlet;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;public class CancelServlet extendsHttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}protected voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {try{ Class.forName("com.mysql.jdbc.Driver"); String url= "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8"; String username= "root"; String password= "zhao1110";Connection conn=(Connection) DriverManager.getConnection(url, username, password); Statement statement=(Statement) conn.createStatement();//String keyString = new String(req.getParameter("id").getBytes("iso-8859-1"), "utf-8");req.setCharacterEncoding("UTF-8");String keyString= req.getParameter("id");if(keyString == null) {keyString= "";resp.sendRedirect("FindServlet");return;}String numSession= (String) req.getSession().getAttribute("numSession");String sql1= "select student_selected_course from student where student_num = '" + numSession + "'";ResultSet resultSet=statement.executeQuery(sql1);//取出课程字符串String courseString = "";while(resultSet.next()) {courseString= resultSet.getString("student_selected_course");}//找到课程idInteger spot =courseString.indexOf(keyString);courseString= courseString.substring(0, spot) + courseString.substring(spot+2);//更新课程数据String sql2 = "update student set student_selected_course='" + courseString + "' where student_num = '" + numSession + "'";statement.executeUpdate(sql2);//课程余量+1String sql3 = "update course set course_remain=course_remain+1 where course_id = '"+ keyString + "'";statement.executeUpdate(sql3);statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); }resp.getWriter().print("{\"data\":\"返回json数据!\"}");}
}

CancelServlet.java

     6. 学生选中的课程信息显示Servlet——StudentInfoServlet.java

packagecom.studentselect.servlet;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.Statement;importcom.studentselect.bean.Course;importcom.studentselect.bean.Student;public class StudentInfoServlet extendsHttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {process(req, resp);}protected voidprocess(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {try{ Class.forName("com.mysql.jdbc.Driver"); String url= "jdbc:mysql://localhost:3306/studentselect?useUnicode=true&characterEncoding=utf-8"; String username= "root"; String password= "zhao1110"; Connection conn=(Connection) DriverManager.getConnection(url, username, password); Statement statement=(Statement) conn.createStatement(); String numSession= (String) req.getSession().getAttribute("numSession");String sql1= "select * from student where student_num = '" + numSession + "'";ResultSet resultSet=statement.executeQuery(sql1);//判断参数是否为空/*req.setCharacterEncoding("UTF-8");String keyString = req.getParameter("id");if(keyString == null) {keyString = "";resp.sendRedirect("FindServlet");return;}*/List<Student> courseStudentList = new ArrayList<Student>();while(resultSet.next()) { Student student= newStudent();student.setStudentSelectedCourse(resultSet.getString("student_selected_course"));courseStudentList.add(student); } String courseStudentString= courseStudentList.get(0).getStudentSelectedCourse();String[] array= courseStudentString.split(",");List<Course> studentCourseList = new ArrayList<Course>();for(String s:array) {String sql2= "select * from course where course_id = '" + s + "'";resultSet=statement.executeQuery(sql2);while(resultSet.next()) {Course course= newCourse();course.setCourseId(resultSet.getInt("course_Id"));course.setCourseName(resultSet.getString("course_Name"));course.setCourseTeacher(resultSet.getString("course_Teacher"));course.setCoursePlace(resultSet.getString("course_Place"));course.setCourseTime(resultSet.getString("course_Time"));course.setCourseTimelength(resultSet.getString("course_Timelength"));studentCourseList.add(course);}}req.setAttribute("studentCourseList", studentCourseList);//后台显示数据/*JSONArray jsonArray2 = JSONArray.fromObject(studentCourseList);System.out.println(jsonArray2.toString());*///返回json数据/*PrintWriter out = resp.getWriter();out.print(jsonArray2.toString());*/resultSet.close(); statement.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } resp.setCharacterEncoding("UTF-8");req.getRequestDispatcher("pages/studentInfo.jsp").forward(req, resp);}
}

StudentInfoServlet.java

     7. MD5密码加密——MD5Util.java

packagecom.studentselect.util;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importcom.yangcheboshi.util.weibo.http.BASE64Encoder;public classMD5Util {/**利用MD5进行加密*/publicString EncoderByMd5(String string)throwsNoSuchAlgorithmException, UnsupportedEncodingException {//确定计算方法MessageDigest md5 = MessageDigest.getInstance("MD5");BASE64Encoder base64en= newBASE64Encoder();//加密后的字符串@SuppressWarnings("static-access")String newString= base64en.encode(md5.digest(string.getBytes("utf-8")));returnnewString;}//判断用户密码是否正确public booleancheckpassword(String newpassword,String initialpassword)throwsNoSuchAlgorithmException, UnsupportedEncodingException {if(EncoderByMd5(newpassword).equals(initialpassword))return true;elsereturn false;}
}

MD5Util.java

  五、 filter拦截器代码

     1. 登录拦截——LoginFilter.java

packagecom.studentselect.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;public class LoginFilter implementsFilter{@Overridepublic void init(FilterConfig arg0) throwsServletException {System.out.println("------login过滤器初始化------");}@Overridepublic voiddestroy() {System.out.println("------login过滤器销毁------");}@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,FilterChain chain)throwsIOException, ServletException {//对request和response进行一些预处理request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");HttpServletRequest req=(HttpServletRequest)request;Object numSession= req.getSession().getAttribute("numSession");String url=req.getRequestURI();if (numSession != null || (url.endsWith("pages/login.jsp") || url.endsWith("LoginServlet"))) {chain.doFilter(request, response);//让目标资源执行,放行return;}else{req.getRequestDispatcher("/").forward(request, response);}}
}

LoginFilter.java

     2. JSP页面拦截——JSPFilter.java

packagecom.studentselect.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;public class JSPFilter implementsFilter {@Overridepublic void init(FilterConfig arg0) throwsServletException {System.out.println("------.jsp过滤器初始化------");}@Overridepublic voiddestroy() {System.out.println("------.jsp过滤器销毁------");}@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,FilterChain chain)throwsIOException, ServletException {//对request和response进行一些预处理request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");HttpServletRequest req=(HttpServletRequest)request;String url=req.getRequestURI();if (!(url.endsWith(".jsp"))) {chain.doFilter(request, response);//让目标资源执行,放行return;}else{req.getRequestDispatcher("/").forward(request, response);}}
}

JSPFilter

  六、 web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1"><display-name>StudentSelect</display-name><welcome-file-list><welcome-file>pages/login.jsp</welcome-file><welcome-file>pages/default.jsp</welcome-file></welcome-file-list><!--配置过滤器--><filter><filter-name>LoginFilter</filter-name><filter-class>com.studentselect.filter.LoginFilter</filter-class></filter><!--映射过滤器--><filter-mapping><filter-name>LoginFilter</filter-name><!--/*表示拦截所有的请求--><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>JSPFilter</filter-name><filter-class>com.studentselect.filter.JSPFilter</filter-class></filter><filter-mapping><filter-name>JSPFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--课程信息--><servlet><!--声明Servlet对象--><servlet-name>FindServlet</servlet-name><!--上面一句指定Servlet对象的名称--><servlet-class>com.studentselect.servlet.FindServlet</servlet-class><!--上面一句指定Servlet对象的完整位置,包含包名和类名--></servlet><servlet-mapping><!--映射Servlet--><servlet-name>FindServlet</servlet-name><!--<servlet-name>与上面<Servlet>标签的<servlet-name>元素相对应,不可以随便起名--><url-pattern>/FindServlet</url-pattern><!--上面一句话用于映射访问URL--></servlet-mapping><!--学生课程--><servlet><servlet-name>StudentInfoServlet</servlet-name><servlet-class>com.studentselect.servlet.StudentInfoServlet</servlet-class></servlet><servlet-mapping><servlet-name>StudentInfoServlet</servlet-name><url-pattern>/StudentInfoServlet</url-pattern></servlet-mapping><!--搜索课程--><servlet><servlet-name>SearchServlet</servlet-name><servlet-class>com.studentselect.servlet.SearchServlet</servlet-class></servlet><servlet-mapping><servlet-name>SearchServlet</servlet-name><url-pattern>/SearchServlet</url-pattern></servlet-mapping><!--课程余量、添加课程--><servlet><servlet-name>RemainAddServlet</servlet-name><servlet-class>com.studentselect.servlet.RemainAddServlet</servlet-class></servlet><servlet-mapping><servlet-name>RemainAddServlet</servlet-name><url-pattern>/RemainAddServlet</url-pattern></servlet-mapping><!--学生取消课程--><servlet><servlet-name>CancelServlet</servlet-name><servlet-class>com.studentselect.servlet.CancelServlet</servlet-class></servlet><servlet-mapping><servlet-name>CancelServlet</servlet-name><url-pattern>/CancelServlet</url-pattern></servlet-mapping><!--学生登录--><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.studentselect.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><!--连接池 启用Web监控统计功能   start--><filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value></init-param></filter><filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置 Druid 监控信息显示页面-->  <servlet>  <servlet-name>DruidStatView</servlet-name>  <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  <init-param>  <!--允许清空统计数据-->  <param-name>resetEnable</param-name>  <param-value>true</param-value>  </init-param>  <init-param>  <!--用户名-->  <param-name>loginUsername</param-name>  <param-value>overfly</param-value>  </init-param>  <init-param>  <!--密码-->  <param-name>loginPassword</param-name>  <param-value>zhao1110</param-value>  </init-param>  </servlet>  <servlet-mapping>  <servlet-name>DruidStatView</servlet-name>  <url-pattern>/druid/*</url-pattern>  </servlet-mapping><!--连接池 启用Web监控统计功能   end-->
</web-app>

Web.xml

  七、 表结构

  

  八、 程序运行图

  九、简单说说

     1. filter拦截器我是用来拦截未登录就访问内容和地址栏URL直接访问Servlet,我将用户的登录信息存在Session中,用来判断用户是否已经登录。

     2. 密码加密是用户将密码输入提交后,MD5Util对密码进行加密操作,转换成一系列字符编码,然后用转换后的字符编码与数据库进行比对。

      虽然MD5是不可逆的,但是我认为依旧不安全,但是能在一定程度上简单防止它人盗取数据库获取用户信息这种黑客行为。

转载于:https://www.cnblogs.com/overfly/p/8573821.html

简单的学生选课系统——基于Servlet+Ajax相关推荐

  1. c语言添加删除课程的思路,基于C语言实现学生选课系统

    基于C语言实现学生选课系统 发布时间:2020-09-03 11:41:13 来源:脚本之家 阅读:100 作者:xiaocaidayong 鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一 ...

  2. 基于php语言的 选课系统,基于C语言实现学生选课系统

    鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...

  3. 基于C语言的学生选课系统

    鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...

  4. 基于java的学生选课系统_基于Java的学生选课系统.doc

    课程设计 (Java程序设计) 题 目 基于Java的学生选课系统 基于Java的学生选课系统 摘要:课程管理系统是一个学校中不可缺少的部分.课程管理系统应该能够为用户提供充足的信息和快捷的查询手段. ...

  5. 大学生数据库课程设计之学生选课系统(一个超级简单的系统)

    大学数据库课程设计–一个简单的学生选课系统 一.系统简介 一个超级简单的学生选课系统,使用Windows窗体设计界面,使用C#语言实现各种功能,数据库使用的是SQL.由于时间原因,做的非常仓促,系统中 ...

  6. java选课系统代码mysql_Java swing mysql实现的学生选课系统项目源码附带视频运行教程...

    大家好,今天给大家演示一下由Java swing实现的一款简单的学生选课系统,数据库采用的是mysql,实现了简单的选课功能,后面的课程中我们会出Java web版的学生选课系统,今天先看Java s ...

  7. 基于JAVA+Servlet+JSP+MYSQL的学生选课系统

    项目功能: <学生选课系统>,本系统有三种角色,分别为管理员.老师.学生.每种角色可以登录系统,操作的功能也不一样.总体功能模块如下: 个人信息管理 学生信息管理 课程排名 学生成绩分析 ...

  8. 基于JavaWeb的学生选课系统

    随着社会的发展和进步,教育领域也在不断探索新的培养方法和途径.选课作为学生在大学期间必须要面对的一项重要任务,其管理方式也在不断改善和完善.基于JavaWeb技术的学生选课系统就是这样一种不断发展的先 ...

  9. JAVA 控制台式简单学生选课系统

    学校要求做个小作业,查了好多资料都找不到能参考的,只好自己写了一套,供给需要的同学进行参考. 仅供参考 编写一个基于命令行的选课系统,系统包含一个主菜单 //1.录入课程信息(可以反复多次录入多个课程 ...

  10. jsp servlet mysql实现的java学生选课系统源码附带高清视频指导运行教程及论文

    今天给大家演示一下一款由jsp servlet mysql实现的学生选课系统,系统分为教师和学生两个角色,教师登录后可管理学生信息.课程信息.选课信息,设置必修学分的下限和上限等功能,学生登录后可选课 ...

最新文章

  1. 通过mongodb客户端samus代码研究解决问题
  2. 腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词随你用
  3. 【渝粤教育】国家开放大学2018年秋季 1320T关系营销 参考试题
  4. matlab车辆测距,一种基于单目视觉的车辆测距方法
  5. 服务器出生点配置文件,服务器设置出生点
  6. mysql命令_MySql常用命令
  7. ABP架构学习系列二:ABP中配置的注册和初始化
  8. IP子网编址和无类域路由CIDR
  9. Dictionary Union and Sort by value
  10. 保留正常工作的环境,等自己的搞好后再替换
  11. SI4463模块使用心得(无线协议)
  12. 腾讯云发布容器安全白皮书
  13. PHP 将XML转成数组(微信回调接收方法)
  14. 树莓派CM4的6路串口测试
  15. php源码加密 zend_zend_guard对PHP代码进行加密教程
  16. 数组unshift方法及重构
  17. h5活动是什么意思_浅谈什么是H5页面,怎么制作h5页面
  18. 我的数字IC学习路线
  19. 设置webhook_数据采集教程_智能模式_如何设置Webhook功能_后羿采集器
  20. 手机如何改android版本号,安卓手机build.prop每行的意思,如果想改版本信息型号等...

热门文章

  1. 基于多进程架构的嵌入式软件框架研究与实现
  2. 转(解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法)...
  3. 巴菲特-芒格-彼得林奇的经典观点梳理
  4. 期货量化交易matlab,【策略分享】Matlab量化交易策略源码分享
  5. html5流媒体多浏览器,PearPlayer流媒体播放器 v2.5.6(开源HTML5流媒体播放框架)
  6. 使用Swiss-Prot根据同源基因进行注释
  7. Sixth season seventeenth episode,Ross‘s self defense concept,Unage!!!?????
  8. 运维分级发布_故障分级和处罚规范-运维必备规章制度
  9. 工作流程管理的重要性
  10. linux挖矿检测,详谈挖矿木马的检测和解决方案