第三章(nk)

2020-02-03  本文已影响0人  全麦土司

一、过滤敏感词

image.png

使用replace方法进行替换效率比较低。
前缀树使用空间换取时间,但是效率有很大的提高。

image.png

我们在下面加了一个注解,这是比较合理的,也就是在应用启动之后,树就已经完全构造完成了。


image.png

写在try中创建一个 对象,会在编译的时候自动加上finally。

在下面的部分,将字节流转换成了字符流,使用了转换流InputStreamReader,接着又转换成了缓冲流,为了提高读取效率。


image.png

构建树:


image.png

进行检索:


image.png
image.png

利用指针3进行循环更快一点,因为他会先到终点。

image.png
image.png
image.png

测试如下:


image.png

二、发布帖子

image.png

当前网页不刷新,但是仍然访问服务器并且得到返回结果。并且返回结果还不是网页。但是能将结果反映在网页上。
那个验证码是吗???

处理json引入一些包:


image.png image.png

测试:


image.png

结果:


image.png
浏览器将其转换成js对象可以得到每一个key对应的结果。 image.png

jquery发送异步请求的格式是固定的。就是上面的格式。
测试:


image.png
image.png

在这个过程中,页面的内容和路径都没有进行刷新。但是访问了服务器,也得到了一些结果。

-进行测试


浏览器会提交给我们很多数据,因此是post请求
403表示没有权限:
这里直接加上注解@LoginRequired不就行了吗?


image.png

$.post的三个参数:

  1. 访问路径
  2. 发送参数
  3. 回调函数


    image.png
    image.png

没有登陆的时候,将我要发布按钮进行隐藏。
测试:


image.png image.png

三、帖子详情

在首页的帖子列表页面,点击帖子展示帖子的详情。


image.png image.png

业务层:


image.png

通常根据id进行查询的时候都会将id拼到路径中。

@PathVariable(“discussPostId”)int id,int后面的这个变量名称是可以随意进行设置的。

image.png

这个方法目前是不完整的,后续还会添加帖子的回复等。

utext可以显示出其原本表示的含义。


image.png

5、事务管理

image.png

添加评论会用到事务管理的功能。

image.png image.png image.png image.png

我们今后的互联网项目主要关注的是中间两种,还要根据安全的要求来选择究竟使用哪一个。

数据库是如何保障事务的机制:


image.png

spring有一个专门的模块叫做springdataaccess用来进行事务的管理:
提供一整套API进行管理,数据库可以是关系型数据库或者是NoSql数据库,比如Reies,或者是MangoDB。


image.png

编程式事务和声明式事务都应该去学习,声明的毕竟简单,但是假如我们有一个方法,包含很多步骤,但是只有中间的一个小步骤需要进行事务管理,那么,使用声明的方法进行进行管理需要管理整个方法,不合理。


事务的传播机制 :
业务方法A()可能会调用业务方法B(),以谁的业务方法为准?


image.png

事务的传播机制,还是不明白。



6、显示评论

image.png

套路就是先开发数据访问层,然后是业务层,最后是表现层。


comment类中有一个字段是entity_type,这表示我们针对什么进行的评论,我们是针对用户,还是评论。entity_id表示用户的id或者是帖子的id等信息。target_id指向的是某个人。
status 0:正常的,1:删除禁用的。

image.png

评论需要进行分页查询。

根据实体进行查询,判断属于课程的评论还是人的评论或者是评论的评论。


image.png image.png image.png image.png
image.png image.png

但是目前还不够完整,还需要进行target的说明,帖子的回复是不需要指明target_id的。

image.png image.png image.png image.png
image.png image.png

分页的逻辑居然可以复用:寻思一下


image.png

目前都只是显示评论,还没有讲添加评论呢吧~~

7、添加评论

image.png image.png image.png
image.png

数据访问层完事儿了,接着是业务层


image.png image.png

接下来就是表现层:
在controller中处理表现层的请求,新增加一个controller。


image.png image.png

(我有一个小小的疑问,帖子的访问路径,是/discuss/detail/discussPostId吗??忘了呢~~)

下面是自己补充的表单(回复评论):


image.png

下面是回复给某个人:


image.png

验证之后发现完全可以。

8、私信列表

image.png

和某个人之间的多次对话是一个会话。
111->112等价于112->111,因此按照顺序进行排序比较合理。

image.png image.png image.png image.png image.png

进行测试:

image.png

选中一个会话,然后查看会话包含的消息。


image.png
image.png image.png

返回操作:


image.png

9、发送私信

image.png image.png image.png image.png image.png

集合中未读的消息的id。


image.png

补充内容:


image.png

10、统一异常处理

image.png

对于出现的异常我们都向上抛出,因此对于服务器的三层架构,我们只需要统一处理表现层就好了。

错误页面的文件名称一定得是error,并且需要在template文件夹下面。
在下面添加一个错误:


image.png

错误页面也得进行模板的配置。


image.png
以上是springBoot对项目自动进行的处理。
但是不太符合我们的预期,服务端报错按理讲应该记录日志,方便我们进行排查。

下面是依靠spring来实现的。
写一个新的请求路径,在发生错误的时候可以统一进行重定向到这个页面。


image.png

以下这个注解只去扫描带有controller注解的类。
这个其实就是切面了啦,没有什么神秘的。
但是要区分浏览器向服务器请求的究竟是什么,是网页还是json数据。普通请求还是异步请求。

plain说明返回的是普通字符串,需要手动进行转换。


image.png
image.png image.png

11、统一记录日志

image.png

拦截器只是针对控制器尽心拦截,但是我们的日志可以是针对所有的方法,因此不能使用拦截器。
很明显使用面向切面编程即可,千万不能将系统需求和业务需求混为一谈。


image.png image.png

目标对象上可以有很多地方都能织入切面,构造器,成员方法等~~。

image.png

我们的userService没有实现接口,因此需要使用cglib。


image.png image.png

前置通知:


image.png

一些小疑问:

  1. 验证码刷新算不算是异步请求,起码算是异步请求吧,页面也没有刷新。
  2. 重新加载当前页面,刷新页面是访问服务器吗?
  3. 事务的传播机制没明白,很懵逼。
    4.回调函数表示由某个对象自动调用吗?
    就像ajax中的function,或者
    transactionalTemplate。
  4. 假如给某一个用户的回复比较多的时候该怎么办,它会自动折叠吗?
    6.那个加载页面是重新向浏览器发出请求了吗??
上一篇下一篇

猜你喜欢

热点阅读