基于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的简单博客系统_第1张图片

前端页面在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="log.html";
                            }else{
                                alert("注册失败"+data.msg);
                            }
                              });

然后进行路由配置(或者使用注解方式)

<!-- 注册 -->
  <servlet>
    <servlet-name>reg</servlet-name>
    <servlet-class>service.RegServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>reg</servlet-name>
    <url-pattern>/reg</url-pattern>
  </servlet-mapping>

最后根据前端代码,完成后端逻辑代码的编写
后端代码分为三步:

  • 接收前端参数
  • 进行数据库操作
  • 给前端返回数据(返回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<String,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的简单博客系统_第2张图片

不需要验证信息,但是前端是写了有分页功能的,所有后端数据库操作要使用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.文章访问量统计

在这里插入图片描述
直接根据前端传递的文章id进行访问量加一操作

9.文章点赞功能

和访问量功能相同

你可能感兴趣的:(笔记,java,mysql,web,项目)