作业题
使用前端、数据库、JavaWeb 等技术并采用 MVC 设计模式实现学生信息管理系统,要求使用管理员账号密码登录后进行学员信息增加、学员信息修改、学员信息删除、学员信息查找、学员信息显示功能。
其中学生信息有:
学号、姓名、性别、出生日期、邮箱、备注
要求:
a.前端页面、数据库表、后台业务等自行设计和实现,根据功能点和后期维护及可扩展程度给分。
b.尽可能使用已学过的流行技术,如:数据库连接池、分页显示等
使用 EL+JSTL 表达式、过滤器和监听器对上一阶段的作业进行技术升级,使用 Cookie 实现一周内免登录,再增加班级管理功能:创建班级、修改班级信息、删除班级(前提:保证班级内没有关联学生)、查询班级, 此时需要为学生表增加字段:所属班级编号。
其中班级信息有:
班级名称、年级、班主任名称、班级口号 、班级人数
要求:
a.将项目部署到 Linux 系统中并通过本地浏览器能正常访问。
作业地址:第四阶段 JavaWEB核心
知识点
看项目代码,有疑惑、易出错的部分已在下方总结。
MVC设计模式
MVC是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了 代码的可维护性。
M:主要用于封装业务数据的JavaBean(Bean) 和 业务逻辑的JavaBean(Service)及访问数据库的 DAO对象
V:主要负责数据收集 和 数据展现,通常由JSP文件完成
C:主要负责流程控制 和 页面跳转,通常由Servlet完成
第一阶段作业思路
工厂方法模式
Service 和 Service + ServiceImpl的选择
在service层,可以使用service接口+serviceImple实现类,也可以使用service类,但考虑到“接口时实现松耦合的关键”,所以更加推荐使用service接口+serviceImple实现类的方式来写service层代码。
核心是“松耦合”。
jsp引入标签库
<%--实体类--%>
<%@page import="entity.Student" %>
<%--taglib指定引入jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
jsp引入框架文件
<link href="./css/bootstrap.min.css" rel="stylesheet">
<script src="./js/jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="./js/bootstrap.min.js" type="text/javascript"></script>
模态框的使用
< caption> 标签
Java.util.date 与 java.sql.date区别和转换
Java.util.date 与 java.sql.date区别和转换
涉及中文输入输出的Servlet.java文件中要设置utf-8
request.setCharacterEncoding("utf-8"); // 很重要!否则数据库会乱码!
response.setContentType("text/html; charset=utf-8");
Servlet.java文件中通过输出流向前端页面展示处理结果
// 通过输出流向前端页面展示处理结果 重新请求一次数据
PrintWriter writer = response.getWriter();
// 获取模块名称
String contextPath = this.getServletContext().getContextPath();
// 拼接请求路径
String hrefPath = contextPath + "/studentPageQueryServlet";
if (0 != res) {
writer.println("<script>location.href='" + hrefPath + "';</script>");
} else {
writer.println("<script>alert('操作失败!');location.href='" + hrefPath + "';</script>");
}
form要包含所有提交信息
登录按钮写在form内部,否则无法触发提交。
<form action="adminLoginServlet" method="post">
<div class="modal-body">
<input type="text" class="form-control" placeholder="用户名" name="userName"/>
<input type="password" class="form-control" placeholder="密码" name="password"/>
<span style="color: red"><%= request.getAttribute("error") == null ? "" : request.getAttribute("error")%></span>
</div>
<div class="modal-footer">
<button class="btn btn-primary form-control">登录</button>
</div>
</form>
刷新页面
let modulePathName = window.document.location.pathname;
window.location.href=
正则表达式全局匹配
/^\d{0,2}$/g.test(codeLike)
forward()转发和sendRedirect()重定向的区别
- Request.getRequestDispatcher(path).forward(request, response);
- 服务器内部的转发,在整个过程中使用的是同一个Request
- response.sendRedirect(path);
- 浏览器根据新的地址再次发送一个请求,浏览器发送两次请求,比
forward()
方法多了一次请求因此其效率要低一些
- 浏览器根据新的地址再次发送一个请求,浏览器发送两次请求,比
【Java面试题】sendRedirect()重定向和forward()转发有什么区别?
使用cookie实现一周内免登录
用户名信息先放到session再放到cookie。
登陆时要使用过滤器进行过滤验证。
- 使用@WebFilter注解,Filter就不用在web.xml配置。
部署项目遇到的问题
VMware启动虚拟机电脑蓝屏
回到快照,重新安装。
安装成功虚拟机之后拍摄快照保存状态,配置完JDK拍摄一次,安装完Tomcat拍摄一次……,即使重装也不需要从0开始。
Tomcat连接出错
开启8080端口(暂时开通)
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
SQLyog连接不上CentOS7(错误码:2003)
防火墙问题 —— 3306 端口号未开放
① firewall-cmd --zone=public --add-port=3306/tcp --permanent 开放3306端口号
② firewall-cmd --reload 重启 firewalld
③ firewall-cmd --query-port=3306/tcp 检查 3306 端口号是否已经开启,yes 开启,no 则未
SQLyog在CentOS7连接中按原sql语句建表、填数据
执行程序前,先在Linux中给MySQL建表、填数据。
SQLyog和CentOS7连接成功后,即可在SQLyog中执行SQL语句。
linux下实时查看tomcat运行日志
定位错误位置。
cd /usr/tomcat/logs/
tail -f catalina.out
java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)
IDEA中 druid.properties 文件中的MySQL密码更新成Linux下的。
Linux下MySQL密码格式有要求,和在Windows下设置的密码不同(个人原因)。