JavaWeb项目总结


目录

一、项目

1、博客系统
 使用了前后端分离的理念。基于MySql、Servlet、Ajax等技术实现。该系统是一个面向用户的博客系统,主要采用Java语言开发完成服务器单体开发业务功能和前端开发功能。通过Ajax在后台与服务器进行少量数据交换,使网页实现异步更新。采用Mysql8作为存储数据的数据库。实现了笔者的登录、注销以及博客内容的增删查改。

2、听书系统
 听书系统主要的技术与流程与博客系统类似。不同的是增加了录音并保存、用户密码的加密存储功能。

3、疫苗预约信息后台管理系统
 与前面的区别是使用了SpringBoot的框架简化开发、采用JDBC封装技术Mybatis作为数据持久层技术、使用Swagger自动生成接口文档,在线调试,采用shiro JAVA安全框架,执行身份验证、授权、密码和会话管理。功能上主要实现了管理员的登录、注销、对于各类信息的增删改查。

二、主要功能模块的实现逻辑

1、登录功能
(1)创建实体类User,和user表进行映射
(2)创建Controller、Service、Mapper、结果类(服务端响应的所有结果最终都会包装成此种啊类型返回给前端页面)
(3)在Controller中创建登录方法:
   1.将页面提交的密码password进行md5加密处理。
   2.根据页面提交的用户名username查询数据库。
   3.如果没有查询到则返回登录失败结果。
   4.密码比对,如果不一致则返回登录失败结果。
   5.查看用户状态,如果过用户状态为已禁用,则发返回账户禁用结果。
   6.登录成功,将用户存入Session并返回登录成功结果,并重定向至首页。

2.注册功能
(1)页面发送Ajax post请求,将注册页面中输入的数据以JSON的形式提交到服务端。
(2)服务端Controller接收页面提交的数据并调用Service 将用户设置的username、password等进行保存。
(3)Service调用Mapper操作数据库,保存用户注册信息。
(4)如果用户关键名称重复了,在Controller的方法中加入try-catch进行异常捕获。并返回注册失败的结果。

3.注销功能
(1)页面发送Ajax get 请求。
(2)服务端接收到注销的请求,通过request获取当前登录用户的sessionId,然后根绝sessionId删除当前登录用户的session信息,最后重定向到登录页面。

4.分页查询功能
(1)页面发送Ajax get请求,将分页查询参数(page,pageSize,name)提交到服务端。
(2)服务端Controller接收页面提交的数据并调用Service查询数据。
(3)Service调用Mapper操作数据库,查询分页数据。
(4)Controller将查询的分页数据响应给前端页面。
(5)Ajax通过responseText拿到响应结果,查询页面组件进行页面的异步更新。最终渲染展示到页面上。

5.文件上传
(1)文件上传时,对页面的form表单的要求:
   采用post的提交方式:method=“post”
   采用multipart格式上传文件:enctype=“multipart/form-data”
   使用input的file控件上传:<input type="file>
(2)Servlet中通过request.getPart获取文件对象。而spring框架在spring-web包中对文件上传进行了封装,大大简化了服务端代码,只需要在Controller的方法中声明一个MultipartFile类型的参数即可接收上传文件。
(3)为了防止发生文件覆盖的情况随机设置文件名,动态截取原始文件类型拼接生成文件名,并将文件转存在服务器指定位置。

5.文件下载
文件下载有两种形式:下载完直接显示在浏览器页面上、下载完保存在浏览器指定磁盘目录中。
1.下载完直接显示在浏览器页面上:
 (1)页面发送Ajax向服务端发送请求。
 (2)服务端通过输入流读取文件内容。设置response的响应头为相应类型,并获取输出流写回浏览器。
2.下载完保存在浏览器指定磁盘目录中:
 (1)前端页面设置超连接,并设置href属性指向后端Controller中某个方法,传送文件名。
 (2)服务端获取到文件名称,通过输入流读取文件内容。
 (3)设置response的响应头类型以及打开方式。
 (4)将数据写到response输出流

三、有关问题总结

1、Shiro如何实现用户登录的安全?
(1)通过SecurityUnils.getSubject(),获取当前Subject(用户)。
(2)调用Subject的isAuthenticated()测试当前用户是否已经被认证(即是否已经登录)。
(3)如果未被认证,则把用户名和面封装成UsernamePasswordToken对象。
(4)调用Subject的login()方法执行登录。
(5)从数据库中获取对应记录,返回给Shiro.
(6)由Shiro实现密码比对。
 MD5:通过唯一盐值加密,达到即使俩人的密码相同,加密后的密码也不相同的目的。

2、JDBC如何防止SQL注入?
SQL注入: Web应用程序对用户输入数据的合法性没有判断或者过滤的不严,攻击者可以在Web应用程序定义好的查询语句的结尾撒花姑娘添加额外的SQL语句,以此实现欺骗数据库服务器执行非授权的任意查询,从而得到未授权的数据信息。
避免SQL注入: 使SQL语句在用户输入数据前就已经编译成完整的SQL语句,再进行填充数据。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值