期末测验 编程题 登录Demo系统
测验目标
- 熟练掌握JSP网页设计
- 熟练掌握Servlet程序设计
- 熟练掌握Filter程序设计
- 熟练掌握DB访问技术(Dao,Service,Servlet)
分值(满分50分)
- 完成项目功能需求(14分)
- 数据库实现(2分--1个截图)
- 项目搭建(6分--1个截图、2个xml文件)
- 界面实现(8分--2个jsp代码、2个截图)
- Java代码(20分--7个java文件)
1 项目概述
1.1 需求分析
项目功能需求(14分):
- ①默认项目/ch16_xx/进入登录界面,如图1所示。
- ②登录界面输入:管理员-123456或 个人姓名-个人学号进入主界面index.jsp,如图2所示。
- ③进入主界面index.jsp点击相应的链接打开相应的资源,如图3所示。。
- ④登录界面输入错误的用户名和或密码,重新进入登录界面并指出错误,如图4所示。。
- ⑤登出后或未登录,浏览器地址栏输入:http://ip地址:8080/ch16_xx/index.jsp 进入登录界面,如图5所示。
- ⑥登录2分钟因会话超时,浏览器地址栏输入:http://ip地址:8080/ch16_xx/index.jsp 进入登录界面,如图5所示。
- ⑦登录2分钟内,浏览器地址栏输入:http://ip地址:8080/ch16_xx/index.jsp 直接进入主界面。
设计、提交要求
- ① 系统版本要求 Tomcat 9、servlet 4、MySql 8、html5;
- ② 数据库中数据表字段用汉字命名,名、表名后加下划线和姓名拼音缩写;
- ③ Java ee项目中包名为cn.xxx.开始,其中xxx姓名拼音首字母缩写(小写);
- ④ Java ee项目中java源代码(除DataSourceUtils.java外)、页面的jsp(除index.jsp外)文件名后加下划线和姓名拼音字母首缩写;
- ⑤ Java ee项目要单独部署到阿里云中,数据库部署到云端的mysql数据库,项目及在线md文档要求在2024.06.20 23:00之前部署个人云端,并保证在正常运行15天;
- ⑥ 项目要求在2024.06.20 23:00之前将开发md文档(填上完整的代码)及图片(高亮要求的截图)、源代码包、IP及密码.doc打包成xxxxxxxxx-XXX《登录Demo系统》作业.zip(其中:xxxxxxxxx学号,XXX中文姓名)向122234434@qq.com邮箱提交存档。
2 数据库设计
数据库名: 登录Demo_du 数据表名: 用户表_du
建表语句
-- 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包
包名 | 说明 |
---|---|
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文件,
web/WEB-INF/web.xml(2分)
... 部分提示<welcome-file-list><welcome-file> <session-config><session-timeout>
...
3.3 界面设计
web/login_du.jsp(2分)
... 部分提示
<input type="text" class="form-control" name="姓名" placeholder="用户名" value="${uname}">
<div style="color: red">${failMsg }</div>
...
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);
}