手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

【作业题】用到的知识 部署项目遇到的问题

时间:2021/5/4 2:37:34|来源:|点击: 次

作业题

使用前端、数据库、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层代码。

核心是“松耦合”。

service和serviceImpl的选择

jsp引入标签库

JavaWEB

<%--实体类--%>
<%@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>

模态框的使用

Bootstrap 模态框(Modal)插件

< caption> 标签

Java.util.date 与 java.sql.date区别和转换

Java.util.date 与 java.sql.date区别和转换

util.Date与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=

JavaScript Window Location

正则表达式全局匹配

/^\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下设置的密码不同(个人原因)。

Copyright © 2002-2019 某某自媒体运营 版权所有