IDEA学习记录25--论坛实战(朴实版)

IDEA学习记录25--论坛实战(朴实版),第1张

IDEA学习记录25--论坛实战(朴实版) 一、:软件开发流程

需求分析设计

UI设计架构设计 开发

前端开发后端开发 测试

功能测试性能测试安全测试 上线

预发布环境灰度全量量 多次迭代更更新 二、:ER图设计


1、:根据ER图建立数据库

category

reply

topic

user

三、:项目结构搭建

三层结构:Servlet-Service-Dao层开发

包结构创建实体类开发工具类开发

连接池开发 开发Controller

通用Servlet 开发Service开发Dao层使用PostMan测试

1、project


先跟老师的课设置一样的:


Name: archetypeCatalog Value:internal




点fix

这里我改了一下:否则经常出现没法自动跳转到servlet的情况,原因还没找到。

之后apply—ok

可以在index.jsp里面写的东西看看,点右上角小箭头运行一下看看d出的网页是不是也OK。

2、配置pom.xml、建立对应的package:

添加对应maven依赖包:


    javax.servlet
    javax.servlet-api
    3.1.0
    provided
  

    
      mysql
      mysql-connector-java
      8.0.17
    

    
    
      javax.servlet.jsp
      jsp-api
      2.2
      provided
    

    
    
      commons-dbutils
      commons-dbutils
      1.7
    

    
    
      org.apache.commons
      commons-dbcp2
      2.7.0
    

    
    
      commons-beanutils
      commons-beanutils
      1.9.4
    


3、实体类:
对应的属性、get方法、set方法、ToString方法
4、工具类:

建立配置文件:

mysql8:

driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/forum?userUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
username = root
password = 123456

initialSize = 10
maxActive = 30

而database.properties默认不会被maven打包,所以要配置pom.xml:
将资源文件打包到target文件夹中:
target:

    
    
      
        src/main/java
        
          ***.xml
        
        true
      
    

5、封装通用baseServlet和分类列表接口开发

封装通用baseServlet

前端发起请求进入basedServlet的service:
发起请求到categoryServlet的pattern(urlPatterns = {"/category"})
–>进入basedServlet(extends baseServlet)
–>拿到前端传过来的方法(method,如list方法)
–>则可在basedServlet的service里面写了(if(method!=null)……)
–>使用反射方法(通过方法找到这个方法所在的类,再调用它)

后学在对应的servlet里面(userServlet等)即可不用重写doGet和doPost了。

即:
子类的servlet被访问,会调用service方法。
子类没有重写,name就会调用父类service方法。
好处:没有重写,节省代码。
所以后续编写的每一个servlet都要继承basedServlet。

分类列表接口
接口实现:CategoryServiceImplCategoryDao


Servlet-Service-Dao层开发:高内聚,低耦合

为什么要用servlet、service、serviceimpl、dao这么多来写,直接在servlet里面调用dao不行吗?
也可以,但是当程序复杂之后,无数servlet与无数dao交交叉叉,来来去去,之间形成了一种网状的结构,复杂且繁琐。如果使用service与serviceimpl,便可以有效分层。

举个栗子:A(servlet)从B(银行,serviceimpl)借200元,办理手续(直接调用)就行,耦合度低。
否则,A(servlet)从C(dao_1)借了100,又从D(dao_2)借了150,又借给C(dao_3)50元……它们之前的联系就太复杂了,耦合性太高。


6、看看效果

在跳转的url输入:
http://localhost:8080/category?method=list

可得按权重由大到小(降序)排序的列表。

四、主题列表开发(支持分页)

1、分页

分页接口:

核心:当前第几页、每页显示多少条、总条数
数据数据库查询使用 select * from table limit m,n
m——是指记录的起始位置,从0开始,表示第1条记录。
n——是指从第m+1条开始,取n条。
select * from tablename limit 2,4 (即取出第3条至第6条, 共4条记录

PageDTO 分页信息
第几页,每页显示多少条,总共几页……
(DTO 数据传输对象)

由于都要用到分页功能,可以使用泛型(编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型)

属性、get、set、ToString、构造函数(计算)

TopicServlet
拿到最基本的分页信息。此时就可以用service调用了

TopicService

TopicServiceImpl

TopicDao

2、分页结果

url输入:http://localhost:8080/topic?method=list&c_id=2(默认取第一页数据)

本页的两条记录:

url:http://localhost:8080/topic?method=list&c_id=2&page=2 取第二页的相关数据

五、主题详情(支持分页) 开发

1、

ReplyDaoTopicServletTopicServiceTopicServiceImplTopicDao

2、debug
http://localhost:8080/topic?method=findDetailById&topic_id=1&page=2

六、注册登录

1、用户注册接口

在user表中为phone字段添加索引(UNINE)使其值唯一。

密码加密 web工具类 MD5

Servlet-Service-Dao层开发

https://baike.baidu.com/item/MD5/212708?fr=aladdin
CommonUtil:

public static String MD5(String data) {
try {
java.security.MessageDigest md =
MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) |
0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
} catch (Exception exception) {
}
return null;
}


按照需要来看是否进行双重MD5加密。

2、 POSTMan测试
x-www-form-urlencoded格式
就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对, &分隔。
当form的action为get时,浏览器器⽤用x-www-form-urlencoded的编码⽅方式,将表单数据编码为
(name1=value1&name2=value2…),然后把这个字符串串append到url后⾯面,⽤用?分隔,跳转
到这个新的url。当form的action为post时,浏览器器将form数据封装到http body中,然后发送
到server

七、发布回复

1、发布主题帖子
Servlet-Service-Dao层开发
先登录才能发布

2、盖楼回复
Servlet-Service-Dao层开发

3、帖子阅读量
把session和topic绑定,一个session访问同个topic只算一次阅读。
在查看详情里判断是否阅读过。TopicServlet【findDetailById()】–>TopicService【addOnePV】–>TopicServiceImpl【addOnePV】–>TopicDao【updatePV】

八、页面接口联调

1、 前端相关资源准备和文件创建

bootstrap(前端框架 https://www.bootcss.com/) + jsp
导入框架对应的js和css即可使用:
1)新建文件夹

2)考入3个依赖

3)创建每个页面时加入页面基础





pom文件添加依赖


taglibs
standard
1.1.2


javax.servlet
jstl
1.2

jsp页面添加jstl表达式依赖包

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

修改web.xml版本


2、大致结构

3、主题列表
展示对应的主题列表

index.jsp

http://localhost:8080/topic?method=list&c_id=2

目前还没有对应的登录用户,所以看不见名称、头像等。
……



servlet里面设置的默认从第一页开始,每页2条记录。

4、主题详情
http://localhost:8080/topic?method=findDetailById&topic_id=1


5、注册页面
http://localhost:8080/user?method=register
或从其它页面跳转


6、登录-退出

7、发布主题
如果要写很多内容,建议用“大数据类型”

此处还是用varchar发剪短内容
……

8、回复盖楼

九、开发者论坛项目实战之项目部署和总结

1、首页自动跳转配置
home首页 打开浏览器自动跳转到这里。

2、部署外置tomcat

打包:

先检查在pom.xml文件里:

在终端里打包:

得到打包好的war包:

将war包部署到tomcat里:

但此时要在url里加入项目名称才能访问到


把原本的那两个文件删掉:

重新启动tomcat:

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5718336.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-18
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存