目录
- 项目简介
- 项目技术介绍
- 项目页面展示
- 项目搭建
- 功能实现
-
- 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("/路由地址)
文章图片
前端页面在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.所有人的文章列表功能
文章图片
不需要验证信息,但是前端是写了有分页功能的,所有后端数据库操作要使用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.文章点赞功能 【笔记|基于JavaWeb的简单博客系统】和访问量功能相同
推荐阅读
- 笔记|JavaWeb项目【实现基础博客系统】
- MySQL|MySQL核心考案 | 系统性学习 | 精编第一次 | 无知的我费曼笔记(图文排版无水印)
- Python中的Web爬虫和NLP
- 使用R和PhantomJS进行Web爬取
- create-react-app 构建的项目使用代理 proxy
- create-react-app项目配置
- mysql|SQL综合题 员工单位综合题
- R中的Web爬虫(rvest教程)
- 算法|三维重建——相机几何参数标定