zoukankan      html  css  js  c++  java
  • 毕业论文(一)

    1.设置工作空间编码,在Window -> preferences 然后搜索encoding 把所有编码都改成UTF-8。

    2.选择导入的外部jar要到你的tomcat安装目录下的bin目录下选择servlet-api.jar和jsp-api.jar

    3.从客户端的浏览器中的网页里向服务端发起请求有几种方式?

    1_通过表单发起请求

    2_通过链接发起请求

    3_通过Ajax发起请求

    4_通过JavaScript发起请求  location.href=””;

    <html>

    <html>
    <head>
    <meta charset="UTF-8">
    <title>向服务端发起请求</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
    </head>
    <body>
    <h1>版本</h1>
    <hr/>
        <form method="post" action="${pageContext.request.contextPath}/StuServlet?method=addStu">
            输入姓名:<input type="text" name="stuName"/><button>提交</button>
        </form>
    <hr/>
        <a href="${pageContext.request.contextPath}/StuServlet?method=delStu&stuId=s001">刪除學生</a>
    <hr/>
        <button id="btn01">利用AJAX向服務器端發起請求</button>
    <hr/>
        <button id="btn02">利用JAVAScript向服務器端發起請求</button>
    </body>
     <script>
     $(function(){
        $("#btn01").click(function() {
            $.post("/TestBaseServlet/StuServlet",{"method":"updateStu","stuId":"s001"},function(data){
                console.log(data);
            });    
        });
     $("#btn02").click(function(){
         location.href="/TestBaseServlet/StuServlet?method=findStu";
     });
    });
     </script>
    </html>
    
    

    抽取工具类BaseServlet

    版本(一)
    1
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 String md = request.getParameter("method"); 3 //定义一个path变量,存储当前功能执行完毕之后一个转发的路径 4 String path=null; 5 if(null!=md) { 6 if("addStu".equals(md)) { 7 path=addStu(request, response); 8 }else if("delStu".equals(md)) { 9 path=delStu(request, response); 10 }else if("updateStu".equals(md)) { 11 path=updateStu(request, response); 12 }else if("findStu".equals(md)) { 13 path=findStu(request, response); 14 }if(null!=path) { 15 request.getRequestDispatcher(path).forward(request, response); 16 } 17 } 18 } 19 protected String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 20 System.out.println("執行服務端添加學生功能"); 21 return "/success.jsp"; 22 } 23 protected String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 24 System.out.println("執行服務端删除學生功能"); 25 return "/success.jsp"; 26 } 27 protected String updateStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 System.out.println("執行服務端更新學生功能"); 29 response.getWriter().println("updateStuOK"); 30 return null; 31 } 32 protected String findStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 System.out.println("執行服務端查找學生功能"); 34 return "/success.jsp"; 35 }
    版本(二)
    1
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 String md = request.getParameter("method"); 4 // 定义一个path变量,存储当前功能执行完毕之后一个转发的路径 5 String path = null; 6 if (null != md) { 7 //查看当前的模块中是否有对应的方法,方法的名称和md中的内容保持一致,方法的参数HttpSetvletRequest,HttpSetvletResponse 8 Class clazz = this.getClass(); 9 try { 10 Method method = clazz.getMethod(md, HttpServletRequest.class,HttpServletResponse.class); 11 if(null!=method) { 12 //找到了,执行方法 13 path = (String) method.invoke(this, request,response); 14 } 15 //进行统一的转发 16 if (null != path) { 17 request.getRequestDispatcher(path).forward(request, response); 18 } 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 } 23 } 24 25 public String addStu(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 System.out.println("執行服務端添加學生功能"); 28 return "/success.jsp"; 29 } 30 31 public String delStu(HttpServletRequest request, HttpServletResponse response) 32 throws ServletException, IOException { 33 System.out.println("執行服務端删除學生功能"); 34 return "/success.jsp"; 35 } 36 37 public String updateStu(HttpServletRequest request, HttpServletResponse response) 38 throws ServletException, IOException { 39 System.out.println("執行服務端更新學生功能"); 40 response.getWriter().println("updateStuOK"); 41 return null; 42 } 43 44 public String findStu(HttpServletRequest request, HttpServletResponse response) 45 throws ServletException, IOException { 46 System.out.println("執行服務端查找學生功能"); 47 return "/success.jsp"; 48 }
     版本(三)BaseServlet
    1
    package org.wl.web.servlet; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class BaseServlet extends HttpServlet { 11 12 @Override 13 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 this.doPost(req, resp); 15 } 16 17 @Override 18 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 19 20 // localhost:8080/store/productServlet?method=addProduct 21 String method = req.getParameter("method"); 22 23 if (null == method || "".equals(method) || method.trim().equals("")) { 24 method = "execute"; 25 } 26 27 // 注意:此处的this代表的是子类的对象 28 // System.out.println(this); 29 // 子类对象字节码对象 30 Class clazz = this.getClass(); 31 32 try { 33 // 查找子类对象对应的字节码中的名称为method的方法.这个方法的参数类型是:HttpServletRequest.class,HttpServletResponse.class 34 Method md = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class); 35 if (null != md) { 36 String jspPath = (String) md.invoke(this, req, resp); 37 if (null != jspPath) { 38 req.getRequestDispatcher(jspPath).forward(req, resp); 39 } 40 } 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 } 45 46 // 默认方法 47 public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { 48 return null; 49 } 50 }
    public class StuServlet03 extends BaseServlet{
        private static final long serialVersionUID = 1L;
        public String addStu(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("執行服務端添加學生功能");
            return "/success.jsp";
        }
    
        public String delStu(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("執行服務端删除學生功能");
            return "/success.jsp";
        }
    
        public String updateStu(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("執行服務端更新學生功能");
            response.getWriter().println("updateStuOK");
            return null;
        }
    
        public String findStu(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("執行服務端查找學生功能");
            return "/success.jsp";
        }
    }

    数据库

    教学资料 t_doc(docId,docName,原始上传文件的名称,真实的文件名称,上传时间)

    教学视频t_vedio

    (vedioId,视频名称,视频简介,视频真实的名称,视频上传时的文件名称,上传时间)

    试题t_exam ( examId,试题名称,试题真实名称,试题上传时的名称,上传时间)

    师表t_tea(teaId,teaName,teaSex,teaAge,teaLoginName,loginPwd)

    管理员表t_admin(adminId,loginName,loginPwd)

    学生t_stu(stuId , 学号,密码)

    师生交流 t_message(msgId,提问的内容,提问时间,回复内容,回复时间,stuId)

    注意1t_message表下的列stuId是外键列,参照了t_stu表中的主键列stuId

    注意2:详细的建表语句参见资料下的db.sql

    CREATE TABLE `t_admin` (
      `userId` INT(11) NOT NULL AUTO_INCREMENT, #管理员的编号
      `userName` VARCHAR(66) DEFAULT NULL, #管理员的登录名
      `userPw` VARCHAR(55) DEFAULT NULL,  #管理员的密码
      PRIMARY KEY  (`userId`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO `t_admin` VALUES ('1', '001', '123');
    INSERT INTO `t_admin` VALUES ('2', '002', '123');
    INSERT INTO `t_admin` VALUES ('3', '003', '123');
    
    DROP TABLE IF EXISTS `t_doc`;
    CREATE TABLE `t_doc` (
      `id` INT(11) NOT NULL AUTO_INCREMENT, #资料编号
      `name` VARCHAR(66) DEFAULT NULL,  #资料描述
      `attachment` VARCHAR(50) DEFAULT NULL, #资料在目录中的真实名称
      `attachmentOldName` VARCHAR(55) DEFAULT NULL,#资料的原始名称
      `uploadTime` VARCHAR(50) DEFAULT NULL, #是否删除
      `del` VARCHAR(50) DEFAULT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术1', '111111111111.doc', 'day01_课堂笔记1.docx', '2016-05-19', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术2', '111111111112.doc', 'day01_课堂笔记2.docx', '2016-05-20', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术3', '111111111113.doc', 'day01_课堂笔记3.docx', '2016-05-21', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术4', '111111111114.doc', 'day01_课堂笔记4.docx', '2016-05-22', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术5', '111111111115.doc', 'day01_课堂笔记5.docx', '2016-05-23', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术6', '111111111116.doc', 'day01_课堂笔记6.docx', '2016-05-24', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术7', '111111111117.doc', 'day01_课堂笔记7.docx', '2016-05-25', 'no');
    INSERT INTO `t_doc` VALUES (NULL, 'Servlet-技术8', '111111111118.doc', 'day01_课堂笔记8.docx', '2016-05-26', 'no');
    
    DROP TABLE IF EXISTS `t_vedio`;
    CREATE TABLE `t_vedio` (
      `vedioId` INT(11) NOT NULL AUTO_INCREMENT,  #视频编号
      `vedioName` VARCHAR(66) DEFAULT NULL, #视频简介
      `vedioPro` VARCHAR(2000) DEFAULT NULL, #视频描述
      `vedioAttachment` VARCHAR(55) DEFAULT NULL,  #视频在目录下的真实名称
      `attachmentOldName` VARCHAR(2000) DEFAULT NULL, #视频原始名称
      `uploadTime` VARCHAR(50) DEFAULT NULL, #视频的上传时间
      `del` VARCHAR(50) DEFAULT NULL,  #视频是否删除
      PRIMARY KEY  (`vedioId`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    insert  into `t_vedio`(`vedioId`,`vedioName`,`vedioPro`,`vedioAttachment`,`attachmentOldName`,`uploadTime`,`del`) values (1,'jdk8新特性01','黑马培训XX老师JDK8新特性1','11111111111111111111.mp4','黑马程序员_XXJDK8新特性1.avi','2016-05-19','no'),(2,'jdk8新特性02','黑马培训XX老师JDK8新特性2','11111111111111111111.mp4','黑马程序员_XXJDK8新特性2.avi','2016-05-20','no'),(3,'jdk8新特性03','黑马培训XX老师JDK8新特性3','11111111111111111111.mp4','黑马程序员_XXJDK8新特性3.avi','2016-05-21','no'),(4,'jdk8新特性04','黑马培训XX老师JDK8新特性4','11111111111111111111.mp4','黑马程序员_XXJDK8新特性4.avi','2016-05-22','no'),(5,'jdk8新特性05','黑马培训XX老师JDK8新特性5','11111111111111111111.mp4','黑马程序员_XXJDK8新特性5.avi','2016-05-23','no'),(6,'jdk8新特性06','黑马培训XX老师JDK8新特性6','11111111111111111111.mp4','黑马程序员_XXJDK8新特性6.avi','2016-05-24','no'),(7,'jdk8新特性07','黑马培训XX老师JDK8新特性7','11111111111111111111.mp4','黑马程序员_XXJDK8新特性1.avi','2016-05-25','no'),(8,'jdk8新特性07','黑马培训XX老师JDK8新特性8','11111111111111111111.mp4','黑马程序员_XXJDK8新特性8.avi','2016-05-25','no'),(9,'jdk8新特性07','黑马培训XX老师JDK8新特性9','11111111111111111111.mp4','黑马程序员_XXJDK8新特性9.avi','2016-05-25','no'),(10,'jdk8新特性07','黑马培训XX老师JDK8新特性10','11111111111111111111.mp4','黑马程序员_XXJDK8新特性10.avi','2016-05-25','no'),(11,'jdk8新特性07','黑马培训XX老师JDK8新特性11','11111111111111111111.mp4','黑马程序员_XXJDK8新特性11.avi','2016-05-25','no'),(12,'jdk8新特性07','黑马培训XX老师JDK8新特性12','11111111111111111111.mp4','黑马程序员_XXJDK8新特性12.avi','2016-05-25','no'),(13,'jdk8新特性07','黑马培训XX老师JDK8新特性13','11111111111111111111.mp4','黑马程序员_XXJDK8新特性13.avi','2016-05-25','no'),(14,'jdk8新特性07','黑马培训XX老师JDK8新特性14','11111111111111111111.mp4','黑马程序员_XXJDK8新特性14.avi','2016-05-25','no'),(15,'jdk8新特性07','黑马培训XX老师JDK8新特性15','11111111111111111111.mp4','黑马程序员_XXJDK8新特性15.avi','2016-05-25','no'),(16,'jdk8新特性07','黑马培训XX老师JDK8新特性16','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(17,'jdk8新特性07','黑马培训XX老师JDK8新特性17','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(18,'jdk8新特性07','黑马培训XX老师JDK8新特性18','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(19,'jdk8新特性07','黑马培训XX老师JDK8新特性19','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(20,'jdk8新特性07','黑马培训XX老师JDK8新特性20','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(21,'jdk8新特性07','黑马培训XX老师JDK8新特性21','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no'),(22,'jdk8新特性07','黑马培训XX老师JDK8新特性22','11111111111111111111.mp4','黑马程序员_XXJDK8新特性16.avi','2016-05-25','no');
    
    DROP TABLE IF EXISTS `t_exam`;
    CREATE TABLE `t_exam` (
      `examId` INT(11) NOT NULL AUTO_INCREMENT, #试题编号
      `examName` VARCHAR(66) DEFAULT NULL, #试题名称
      `attachment` VARCHAR(55) DEFAULT NULL,  #试题在目录下的真实名称
      `attachmentOldName` VARCHAR(50) DEFAULT NULL,#试题的原始名称
      `uploadTime` VARCHAR(50) DEFAULT NULL, #试题的上传时间
      `del` VARCHAR(50) DEFAULT NULL,  #是否删除
      PRIMARY KEY  (`examId`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试1', '1111111111111.doc', 'java基础测试题1.doc', '2016-05-19', 'no');
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试2', '1111111111112.doc', 'java基础测试题2.doc', '2016-05-20', 'no');
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试3', '1111111111113.doc', 'java基础测试题3.doc', '2016-05-21', 'no');
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试4', '1111111111114.doc', 'java基础测试题4.doc', '2016-05-22', 'no');
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试5', '1111111111115.doc', 'java基础测试题5.doc', '2016-05-23', 'no');
    INSERT INTO `t_exam` VALUES (NULL, 'java基础测试6', '1111111111116.doc', 'java基础测试题6.doc', '2016-05-24', 'no');
    
    
    DROP TABLE IF EXISTS `t_stu`;
    CREATE TABLE `t_stu` (
      `stuId` INT(11) NOT NULL AUTO_INCREMENT, #学生编号
      `stuNum` VARCHAR(66) DEFAULT NULL, #学生学号
      `stuRealname` VARCHAR(50) DEFAULT NULL, #学生真实姓名
      `stuSex` VARCHAR(50) DEFAULT NULL, #学生性别
      `stuAge` VARCHAR(55) DEFAULT NULL, #学生年龄 
      `loginPw` VARCHAR(50) DEFAULT NULL, #学生登录密码
      `status` VARCHAR(50) DEFAULT NULL,  #学生是否毕业 y:已经毕业 n:未毕业  
      `del` VARCHAR(50) DEFAULT NULL,  #学生是否删除
      PRIMARY KEY  (`stuId`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    
    INSERT INTO t_stu VALUES (NULL,'2016001','tom','','21','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','mary','','21','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','lucy','','22','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','jack','','22','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','lily','','23','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','smith','','23','123456','y','no');
    INSERT INTO t_stu VALUES (NULL,'2016001','piter','','21','123456','y','no');
    SELECT * FROM t_stu;
    
    DROP TABLE IF EXISTS `t_message`;
    CREATE TABLE `t_message` (
      `messageId` INT(11) NOT NULL AUTO_INCREMENT, #留言编号
      `content` VARCHAR(2000) DEFAULT NULL, #留言内容
      `leveWordTime` VARCHAR(55) DEFAULT NULL, #留言时间
      `stuId` INT(11) DEFAULT NULL, #留言学生的编号
      `replay` VARCHAR(2000) DEFAULT NULL,  #回复内容
      `replayTime` VARCHAR(50) DEFAULT NULL, #回复时间
      PRIMARY KEY  (`messageId`)  
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
     ALTER TABLE t_message ADD CONSTRAINT FK_ID FOREIGN KEY(stuId) REFERENCES t_stu(stuId);
    
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式1','2016-04-27','1','继承thread,实现Runnable接口,实现callback11','2016-04-27');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式2','2016-04-26','2','继承thread,实现Runnable接口,实现callback22','2016-04-28');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式3','2016-04-25','1','继承thread,实现Runnable接口,实现callback33','2016-04-29');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式4','2016-04-24','2','继承thread,实现Runnable接口,实现callback44','2016-05-30');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式5','2016-04-23','1','继承thread,实现Runnable接口,实现callback55','2016-05-01');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式6','2016-04-22','2','继承thread,实现Runnable接口,实现callback66','2016-05-02');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式7','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-03');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式8','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-03');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式9','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-02');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式10','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-01');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式11','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-03');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式12','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-04');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式13','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-05');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式14','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-06');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式15','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-07');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式16','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-05');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式17','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-06');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式18','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-07');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式19','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-04');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式20','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-06');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式21','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-08');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式22','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-08');
    INSERT INTO `t_message` VALUES (NULL, 'Javase中创建线程的方式23','2016-04-21','1','继承thread,实现Runnable接口,实现callback77','2016-05-09');

     开发环境搭建

    1_新建立项目

     

    2_导入JAR

     mysql驱动包: 负责连接MYSQL数据库

    jstl: JSP页面中引入JSP标签库

    fileupload: 上传的时候使用

    dbutils: 操作数据仓库使用,JDBC的封装

    c3p0:连接池工具

    beanutils: 封装数据

    3_建立各个包

    BaseServlet: 让所有的Servlet都继承BaseServlet

    EncodingFitler:解决乱码问题过滤器

    <filter>
    
       <filter-name>EncodingFilter</filter-name>
    
       <filter-class>com.byndjf.web.filter.EncodingFilter</filter-class>
    
      </filter>
    
      <filter-mapping>
    
       <filter-name>EncodingFilter</filter-name>
    
       <url-pattern>/*</url-pattern>
    
      </filter-mapping>

    5_导入HTML页面

      实际开发页面HTML__>导入预先编写好的JSP页面

    6_配置项目首页

    <welcome-file-list>
    
         <!-- 配置系统首页 -->
    
        <welcome-file>/site/index.jsp</welcome-file>
    
    </welcome-file-list>

    7_异步校验用户名是否存在(重点)

    注意:

    *_分析思路

    *_实现功能的流程

    *_出错情况下如何排除错误

    *_分析功能思路

    *_步骤实现:

    1_准备工作

     确定SQL语句编写

       

     SELECT *  FROM t_stu WHERE stuNum='2016001'

     确定页面效果: 

    <span style="color:red">用户名已经存在</span>

    2_页面加载完毕之后,为输入学号文本框绑定失去焦点事件,向服务端发起ajax请求

    $(function(){
          //页面加载完毕
          
          //获取id为username的文本框,为其绑定失去焦点事件
          $("#username").blur(function(){
              //获取到用户输入的学号信息,如果为空提示请录入学号
              var um=$("#username").val();
              var username=$.trim(um);
              if(null!=username&&""!=username){
                //向服务端发起ajax请求,将用户录入的学号信息发送到服务端
                $.post("/ndjf_system/StuServlet",{"method":"validateUserExist","username":username},function(data){
                    //打印服务端响应回客户端的数据
                    console.log(data);
                    if(data=="yes"){
                        $("#stuNumMsg").html("");                
                    }
                                
                    if(data=="no"){
                        $("#stuNumMsg").html("不存在此户名,请录入合适用户名");
                    }
                });
                
                
              }else{
                  //如果为空提示请录入学号
                  alert("请输入学号");
              }
              
          });
          
          
          //获取id为btnLogin登录按钮,为其绑定点击事件 
          $("#btnLogin").click(function(){
              //校验用户名和密码不能为空
              //获取用户名
              var username=$("#username").val();
              //获取密码
              var password=$("#userPw").val();
              //截取字符串
              var um=$.trim(username);
              var up=$.trim(password);
              if(null==um||""==um){
                  alert("请输入合法的学号");
                  return false;
              }
              
              if(null==up||""==up){
                  alert("请输入合法的密码");
                  return false;
              }
              
              //利用JS实现登录
              document.getElementById("fm").submit();
              
          });
          
        });
    
        function logout(){
            //用户确认提示
            if(confirm("确定要退出吗?")){
                location.href="/ndjf_system/StuServlet?method=stuLogout";
            }
        }

    3_实现服务端Servlet

      导入C3P0数据文件,修改好配置信息

      创建服务端会用到当前模块下的各种给StuServlet,StuService,StuDao,Student

      获取到页面提交到服务端的数据学号

      调用业务层功能:验证用户是否已经存在,返回学生对象

      根据返回的学生是否为空判断仓库中是否有已经存在的账户

    4_实现服务端Service

    public Student validateUserExist(String um) throws SQLException {
            // 调用DAO层功能
            StuDao stuDao = new StuDao();
            return stuDao.validateUserExist(um);
    
        }
    
        public Student stuLogin(String um, String up) throws SQLException {
            // 调用DAO层功能
            StuDao stuDao = new StuDao();
            return stuDao.stuLogin(um,up);
        }

    5_实现服务端Dao

    public Student validateUserExist(String um) throws SQLException {
            String sql="SELECT *  FROM t_stu WHERE stuNum=?";
            QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
            return qr.query(sql, new BeanHandler<Student>(Student.class),um);
            
        }
    
        public Student stuLogin(String um, String up) throws SQLException {
            String sql="select * from t_stu where stuNum= ? and loginPw = ?";
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            return qr.query(sql, new BeanHandler<Student>(Student.class),um,up);
        }

    6_页面部分剩余的AJAX部分

     

    8_用户登录

    1_原理分析

     

    2_步骤实现

    *_页面端代码

      页面端JS数据校验,如果没有录入学号或者密码或者录入空号或密码,不允许登录

      设置表单中的action属性值,学号和密码输入框的name属性

    *_实现服务端代码

    StuServlet

     

    StuService.java

     

    StuDao.java

     

    Index.jsp___>userLogin.jsp

    代码详见userLogin.jsp

    3_总结

     实现流程,分析思路 

    9_用户退出

    *_原理分析

     

    *_步骤实现

    1_实现页面端代码

     

    2_实现服务端代码

     

  • 相关阅读:
    nginx源码分析:module机制
    Linux源码分析之:malloc、free
    shell格式化字符串
    shell执行字符串中的命令
    docker安装并运行mongo
    docker安装并运行kibana
    docker安装并运行elasticsearch
    docker安装并运行rabbitmq
    docker安装并运行ngnix
    docker安装并运行redis
  • 原文地址:https://www.cnblogs.com/-wanglei/p/10300900.html
Copyright © 2011-2022 走看看