期末测验 编程题 登录Demo系统


测验目标

分值(满分50分)

1 项目概述

1.1 需求分析

项目功能需求(14分)

图1 默认项目/ch16_xx/进入登录界面
图2 登录界面输入
图3 主界面及其相应的子资源
图4 登录界面输入错误
图5 主界面未登录进入登录界面
图6 主界面单击【用户注销】调用logout(servlet)转向login_xx.jsp进入登录界面
图7 登录2分钟内,浏览器地址栏输入index.jsp 直接进入主界面

设计、提交要求

2 数据库设计

数据库名: 登录Demo_du 数据表名: 用户表_du

图8 数据库实现(2分)----高亮要求提交截图

建表语句

-- 1. 用户
DROP TABLE IF EXISTS `用户表_du`;
CREATE TABLE `用户表_du` (
  `用户名` varchar(45) NOT NULL PRIMARY KEY,
  `密码` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `用户表_du` VALUES 
('管理员','123456'),
('杜老师','山西省晋中市');

3 项目实现

3.1 确定项目开发环境

Tomcat9.0 MySQL 8.0 JDK8

3.2 创建数据库表

见上述数据库部分

3.3 创建项目、包名、引入JAR包

图9 项目包名、文件名(2分)
包名 说明
cn.du.utils 工具类:数据源工具、单价计算器工具
cn.du.model JavaBean类
cn.du.dao 数据访问
cn.du.service 服务层
cn.du.servlet web servlet层
cn.du.filter 过滤器

jar包 在web/WEB-INF创建lib文件夹,并粘贴下列5个jar文件,

图10 jar包

项目中jar_bootstarp文件下载

web/WEB-INF/web.xml(2分)


... 部分提示<welcome-file-list><welcome-file>  <session-config><session-timeout>

...

3.3 界面设计

图11 BootStrap登录界面(2分)

web/login_du.jsp(2分)


... 部分提示
<input type="text" class="form-control" name="姓名" placeholder="用户名" value="${uname}">
<div style="color: red">${failMsg }</div>
...
图12 BootStrap首页界面(2分)

web/index.jsp(2分)


... 部分提示
<p>用户名:${sessionScope.user.用户名} | <a href="logout">用户注销</a></p>...

3.4 配置c3p0-config.xml文件

src\c3p0-config.xml(2分)



3.5 DBUtils工具类

cn.du.utils.DataSourceUtils(2分)



3.6 model

cn/du/model/User_du.java(2分)


   // 提示
   private String 用户名;
   private String 密码;

3.7 dao

cn/du/dao/UserDao_du.java(2分)


   // 提示
  public User_du selectByUsernamePassword(String username,String password) throws SQLException {
    String sql = "select * from 用户表_du where 用户名=? and 密码=?";

3.8 service

cn/du/service/UserService_du.java(2分)


   // 提示
     public User_du login(String ue, String password) {
            user = uDao.selectByUsernamePassword(ue, password);

3.8 servlet

cn/du/servlet/LoginServlet_du.java(4分)


   // 提示
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");

cn/du/servlet/LogoutServlet_du.java(2分)


   // 提示
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().removeAttribute("user");
        request.getSession().invalidate();
        request.getRequestDispatcher("/login_du.jsp").forward(request, response);
    }

3.9 编写登录过滤器

cn.du.filter.LoginFilter_du.java(6分)

登录过滤器:登录用户可访问/* 所有资源,用户没有登录仅可访问 跳转到首页


        // 提示
        // 由于设置Filter过滤全部请求,可以排除不需要过滤的url:后缀为login,login_du.jsp, js, css, map, png
        String requestURI = request.getRequestURI();
        if (requestURI.endsWith("login")) {
            chain.doFilter(req, resp);
            return;
        }


        User_du u = (User_du) request.getSession().getAttribute("user");
        // 判断用户是否登录,进行页面的处理
        if (u == null) {
            // 未登录用户,转向到登录页面
            request.getRequestDispatcher("/login_du.jsp").forward(request, response);
            return;
        } else {
            // 已登录用户,允许访问
            chain.doFilter(request, response);
        }

返回