1.介绍
本系统是基于javaweb+servlet+jsp实现的一个简单的额新闻发布系统,主要分为两个板块,用户管理和新闻管理,用户的增删改查和新闻的增删改查。主要分为两个用户,普通用户只能浏览新闻,管理员可以管理用户和新闻
2.数据库设计
1.用户表
CREATE TABLE `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`password` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`gender` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别',
`profession` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职业',
`favor` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '爱好',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
`join_date` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '注册日期',
`last_login_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '最近登陆时间',
`role` varchar(20) COMMENT '权限',
`status` varchar(20) COMMENT '状态',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
2.新闻表
CREATE TABLE `news` (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
`author` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '作者/来源',
`state` varchar(10) NULL DEFAULT 1 COMMENT '状态。0-下架,1-上架。',
`category` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新闻类别',
`cover_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新闻封面图片url',
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '新闻正文',
`view_count` int(10) NULL DEFAULT NULL COMMENT '点击次数',
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '发布日期',
`updateTime` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
PRIMARY KEY (`news_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
3.部分系统代码
1.主界面
2.登录界面和登录servlet
package servlet;
import dao.newsDao;
import dao.userDao;
import user.News;
import user.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
@WebServlet("/login.do")
public class loginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
userDao userdao=new userDao();
newsDao newsdao=new newsDao();
System.out.println("login");
User user = userdao.findByUsername(username,password);
if(user!=null)
{
HttpSession session = request.getSession();
System.out.println("找到这个人!");
session.setAttribute("username", username);
String role=user.getRole();
String getm="管理员";
System.out.println(role);
System.out.println("11111");
if(getm.equals(role))
{
System.out.println("登录的是管理员");
response.sendRedirect(request.getContextPath()+"/login/loginSuccessManger.jsp");
}
else {
List<News> news=newsdao.queryNewsList();
request.setAttribute("newsList",news);
// 重定向到登录成功页面
response.sendRedirect( request.getContextPath()+"/login/loginSuccess.jsp");
}
}
else{
System.out.println("22222");
// 重定向到登录失败页面
response.sendRedirect( "login/loginFill.jsp");
}
}
}
3.注册界面和注册servlet
package servlet;
import dao.userDao;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@WebServlet("/register.do")
public class registerServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");//读取中文信息时不会出错。
String username = req.getParameter("username");
String password = req.getParameter("password");
String gender = req.getParameter("gender");
String profession = req.getParameter("profession");
String favor = req.getParameter("favor");
String description=req.getParameter("description");
String role = "一般用户";
String status = "可用";
System.out.println("registerServlet");
userDao userdao=new userDao();
if(userdao.insertUser(username,password,gender,profession,favor,description,role,status))
{
// 重定向到登录成功页面
response.sendRedirect( "admin/login.jsp");
}
else {
// 重定向到登录失败页面
response.sendRedirect( "login/loginFill.jsp");
}
}
}
4.监听器
如果没有登录,是不能访问用户列表等界面的
package filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/login/*")
public class loginFillter extends HttpFilter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化....");
}
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
if(request.getSession().getAttribute("username")!=null)
{
chain.doFilter(request,response);
}
else{
response.sendError(403);
//response.sendRedirect( "admin/login.jsp");
}
}
@Override
public void destroy() {
System.out.println("过滤器被销毁了....");
}
}