美文网首页
第三章(nk)

第三章(nk)

作者: 全麦土司 | 来源:发表于2020-02-03 13:37 被阅读0次

一、过滤敏感词

image.png

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

    1. 定义前缀树
      根据敏感词构建前缀树,使用这个构建的前缀树来检测待测的字符串是不是敏感的字符串。


      image.png
    1. 在util包中定义了一个过滤类
      定义前缀树:


      image.png
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

二、发布帖子

image.png

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

处理json引入一些包:


image.png
  • 添加一些处理json的工具方法:
    json格式的返回结果是字符串:
    code:编码
    msg:提示信息
    map:业务数据


    image.png
image.png

测试:


image.png

结果:


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


    image.png
image.png

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


image.png
image.png

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

  • 接下来开始进行帖子的发布
  • dao层


    image.png
  • mapper


    image.png

-进行测试

  • 业务层
    在业务层,需要进行敏感词过滤,标签处理,比如说js标签,这些标签可能会对结果造成一定的影响。spring的工具就有这个功能,可以进行敏感词过滤。
    springmvc提供的工具HtmlUtils.htmlEscape()。会将标签进行转义。


    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

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

  • 处理模板


    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

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


  • 演示spring如何进行这两种事务管理
    写在AlphaService中:
    需求:增加一个用户和一个帖子,将这两个功能写在同一个事务中。


    image.png

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


image.png

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

  • 测试


    image.png

  • 编程式事务管理


    image.png

    调用回调函数的时候回对方法进行事物的管理。


    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
  • 对于增加评论的功能,我们需要使用事务,因为我们需要连带着更新帖子的评论数量。
    两个dml操作,因此,我们需要使用事务。
  • 数据层方法增进:


    image.png
image.png
  • 更新帖子数量,在discuss_post中进行更新。


    image.png

    这个信息虽然冗余了,但是方便查找。

image.png
image.png

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


image.png
  • 增加评论的业务的方法来了~~这个方法是重点:
    这个方法内部包含了两次的DML操作,我们对它进行事务管理。
image.png

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


image.png image.png

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

  • 最后处理模板:


    image.png

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


image.png

下面是回复给某个人:


image.png

验证之后发现完全可以。

8、私信列表

image.png

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

image.png
  • mapper文件


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

进行测试:

image.png
  • 接下来开始开发业务组件:


    image.png
  • 接下来是表现层,他有两个功能,一个是展示私信列表,另一个是点开之后,展示聊天列表。


    image.png
    image.png

    页面分别是letter和letter-detail。


  • 处理表现层


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


image.png
image.png image.png

返回操作:


image.png

9、发送私信

image.png
  • 数据访问层:


    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.那个加载页面是重新向浏览器发出请求了吗??

相关文章

网友评论

      本文标题:第三章(nk)

      本文链接:https://www.haomeiwen.com/subject/zhffxhtx.html