ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-29 16:32:14  阅读:142  来源: 互联网

标签:25 http service -- IDEA topic url servlet method


一、:软件开发流程

  • 需求分析
  • 设计
    • UI设计
    • 架构设计
  • 开发
    • 前端开发
    • 后端开发
  • 测试
    • 功能测试
    • 性能测试
    • 安全测试
  • 上线
    • 预发布环境
    • 灰度
    • 全量量
  • 多次迭代更更新

二、:ER图设计

在这里插入图片描述
1、:根据ER图建立数据库

  • category
    在这里插入图片描述

  • reply
    在这里插入图片描述

  • topic
    在这里插入图片描述

  • user
    在这里插入图片描述

三、:项目结构搭建

  • 包结构创建
  • 实体类开发
  • 工具类开发
    • 连接池开发
  • 开发Controller
    • 通用Servlet
  • 开发Service
  • 开发Dao层
  • 使用PostMan测试

1、project

在这里插入图片描述
先跟老师的课设置一样的:
在这里插入图片描述

在这里插入图片描述
Name: archetypeCatalog Value:internal
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点fix
在这里插入图片描述
这里我改了一下:否则经常出现没法自动跳转到servlet的情况,原因还没找到。
在这里插入图片描述
之后apply—ok

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

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

  • 添加对应maven依赖包:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.17</version>
    </dependency>

    <!-- JSP -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-dbutils/commonsdbutils -->
    <dependency>
      <groupId>commons-dbutils</groupId>
      <artifactId>commons-dbutils</artifactId>
      <version>1.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commonsdbcp2 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>2.7.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-beanutils/commonsbeanutils -->
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.4</version>
    </dependency>

在这里插入图片描述
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:
在这里插入图片描述
在这里插入图片描述

    <!--专门用于打包配置文件到类路径-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>

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。

  • 分类列表接口
    在这里插入图片描述
  • 接口实现:CategoryServiceImpl
  • CategoryDao

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、

  • ReplyDao
  • TopicServlet
  • TopicService
  • TopicServiceImpl
  • TopicDao

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)创建每个页面时加入页面基础
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="${pageContext.request.contextPath}/static/bootstrap.min.css">
<script src="${pageContext.request.contextPath}/static/bootstrap.min.js">
</script>
<script src="${pageContext.request.contextPath}/static/jquery.min.js">
</script>
  • pom文件添加依赖
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency><!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
  • jsp页面添加jstl表达式依赖包
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  • 修改web.xml版本
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

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:
    在这里插入图片描述

标签:25,http,service,--,IDEA,topic,url,servlet,method
来源: https://blog.csdn.net/AMWICD/article/details/122642968

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有