笔记|基于JavaWeb的简单博客系统


目录

  • 项目简介
  • 项目技术介绍
  • 项目页面展示
  • 项目搭建
  • 功能实现
    • 1.用户注册功能
    • 2.用户登录功能
    • 3.个人文章列表功能
    • 4.添加文章功能
    • 5.修改文章功能
    • 6.删除文章功能
    • 7.所有人的文章列表功能
    • 8.文章访问量统计
    • 9.文章点赞功能

项目简介 项目大体是上博客系统,我们外化成了用来发布就业招聘信息的学校论坛。项目实现的功能如下:用户注册、用户登录、我的文章列表、添加我的文章、修改我的文章、删除我的文章、所有人文章列表、查看文章详情内容、文章访问量统计、文章点赞功能
项目技术介绍 前端:html写简单网页功能,css美化网页,JavaScript实现页面的动态效果和接口的调用
后端:Servlet,java
数据库:mysql
项目管理工具:maven
项目部署工具:tomcat、服务器
项目页面展示 用户登录界面

所有文章列表界面(论坛首页)

查看文章详情界面(下方有访问量统计、点赞功能)

我的文章列表界面(有添加,删除,修改功能)

添加文章界面

修改文章界面

删除文章界面

项目搭建 1.根据功能分析,创建数据库表
用户表和文章表
用户表:id,用户名,密码,创建时间,修改时间,状态
文章表:id,创建时间,修改时间,标题,正文,用户id,状态,阅读量
(用用户表的id和文章表的用户id将两张表联系起来)
sql脚本
drop database if exists java17; create database java17; use java17; drop table if exists userinfo; create table userinfo( id int primary key auto_increment, username varchar(100) not null, password varchar (32) not null, create_time datetime default now(), update_time datetime default now(), `state` int default 1 ); drop table if exists articleinfo; create table articleinfo( id int primary key auto_increment, title varchar(100) not null, content text not null, create_time datetime default now(), update_time datetime default now(), uid int not null, rcount int not null default 1, `state` int default 1 );

2.项目创建
创建一个webapp的maven项目;然后在maven仓库里搜索,添加Servlet引用;最后配置Servlet的配置文件web.xml
3.Servlet开发方式说明
  • xml配置方式:web.xml配置,然后创建Servlet后端类
  • 注解开发:将web.xml配置文件中metadata–complete改为false;然后创建Servlet类,添加@WebServlet("/路由地址)
4.项目文件夹说明
笔记|基于JavaWeb的简单博客系统
文章图片

前端页面在webapp目录下;
后端页面:
dao:数据持久层,和数据库进行交互
models:创建对象,和数据库表的属性保持一致
service:业务逻辑层,给前端直接提供接口的业务层
utils:封装的公共方法
功能实现 1.用户注册功能 用html,css构建简单的前端页面,根据JSON格式来进行前后端交互,所以说我们后端给前端返回的格式也必须是JSON格式
怎么简单返回一个JSON格式的数据?
使用Jaskson操作类(在maven仓库中搜索,然后添加),创建Jackson对象:ObjectMapper mapper=new ObjectMapper();
jQuery.getJSON("reg",{"username":username.val(),"password":password.val()}, function (data) { if(data!=null && data.state==200){ alert("注册成功"); location.href="https://www.it610.com/article/log.html"; }else{ alert("注册失败"+data.msg); } });

然后进行路由配置(或者使用注解方式)
> -name>reg -class>service.RegServlet -mapping> -name>reg /reg

最后根据前端代码,完成后端逻辑代码的编写
后端代码分为三步:
  • 接收前端参数
  • 进行数据库操作
  • 给前端返回数据(返回JSON格式的数据)
public class RegServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username=request.getParameter("username"); String password=request.getParameter("password"); int state=-1; String msg=""; if(username==null || password==null){ msg="参数不正确"; }else{ UserInfo userInfo=new UserInfo(); userInfo.setUsername(username); userInfo.setPassword(password); UserInfoDao userInfoDao=new UserInfoDao(); try { boolean ret=userInfoDao.selectname(userInfo); if(ret){ msg="用户已存在"; }else{ int res=userInfoDao.add(userInfo); if(res>0){ state=200; } } } catch (SQLException throwables) { throwables.printStackTrace(); }} HashMap,Object> map=new HashMap<>(); map.put("state",state); map.put("msg",msg); WriteUtils.writeMap(response,map); } }

数据库操作就是写JDBC
public int add(UserInfo userInfo) throws SQLException { int ret=0; if(userInfo.getUsername()!=null && userInfo.getPassword()!=null){ Connection connection= DBUtils.getConnect(); String sql="insert into userinfo(username,password) values(?,?)"; PreparedStatement statement=connection.prepareStatement(sql); statement.setString(1,userInfo.getUsername()); statement.setString(2,userInfo.getPassword()); ret=statement.executeUpdate(); DBUtils.close(connection,statement,null); } return ret; }

2.用户登录功能 登录功能和注册功能非常类似,但是需要使用session,保存用户登录信息,主要是保存用户id
HttpSession session=request.getSession(); session.setAttribute("userinfo",userInfo);

3.个人文章列表功能 展示用户自己的所有文章,即需要从session中获得用户id,也就是获得artilceinfo的uid来查找
//权限验证 HttpSession session=request.getSession(false); if(session==null || session.getAttribute("userinfo")==null){ msg="用户未登录"; state=100; }else{ //数据库查询 UserInfo userInfo=(UserInfo) session.getAttribute("userinfo"); int uid=userInfo.getId(); ArticleInfoDao articleInfoDao=new ArticleInfoDao(); try { list=articleInfoDao.getArticleList(uid); state=200; } catch (SQLException throwables) { throwables.printStackTrace(); } }

4.添加文章功能 添加文章,只能是用户自己添加,所以也需要获取session信息,得到用户id,然后在文章表里添加内容
5.修改文章功能 修改文章分为两部分:一是要先展示文章的详情内容,二是修改内容的接口
展示文章详情内容:根据文章id在数据库查询
修改文章内容接口:所有和用户自己有关的操作,都需要判断session信息,来验证用户是否登录,然后根据文章id修改内容
6.删除文章功能 非常简单,根据文章id来删除就可以了
7.所有人的文章列表功能 笔记|基于JavaWeb的简单博客系统
文章图片

不需要验证信息,但是前端是写了有分页功能的,所有后端数据库操作要使用limit
String sql="select a.*,u.username from articleinfo a left join userinfo u on a.uid=u.id limit ?,?"; PreparedStatement statement=connection.prepareStatement(sql); statement.setInt(1,(cpage-1)*psize); statement.setInt(2,psize);

8.文章访问量统计 笔记|基于JavaWeb的简单博客系统
文章图片

直接根据前端传递的文章id进行访问量加一操作
9.文章点赞功能 【笔记|基于JavaWeb的简单博客系统】和访问量功能相同

    推荐阅读