基于javaweb+mysql的jsp+servlet小说阅读管理系统(java+jsp+bootstrap+servlet+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的JSP+Servlet小说阅读管理系统(java+jsp+bootstrap+servlet+mysql)
项目介绍
项目主要包括管理员与用户两种角色; 管理员角色包含以下功能:管理员登录,主页面,分类查看,修改个人信息,上传小说,查看小说,删除小说,评论顶收藏小说等功能。 用户角色包含以下功能:用户注册,用户登录,查看销售,查看小说,发布小说,搜索小说,查看个人信息等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:否
技术栈
- 后端:servlet 2. 前端:JSP+css+javascript+bootstrap+jQuery
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中util/DBUtil.java配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/jsp_xiaoshuo_site
}else{
boolean isAgain=false;
for(Integer i:hot){
if(i==post_id){
isAgain=true;
break;
}else {
continue;
}
}
if(isAgain){
out.print("again");
return;
}
PostDao pd=new PostDao();
Post p=pd.getPost(post_id);
p.setHot(p.getHot()+1);
pd.update(p);
hot.add(post_id);
out.print("ok");
return;
}
}
}
}
/**
*
* 此类用于处理基本资料的更改
*
*
*/
@SuppressWarnings("serial")
public class ChangeFiledServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
public class PublishPostServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
String type=req.getParameter("type");
String title=req.getParameter("title");
String content=req.getParameter("content");
if(type==null||title==null||content==null){
return;
}
HttpSession session=req.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
out.print("<script type='text/javascript'>"+""
+ "alert('发小说成功!');"
+ "window.location='/jsp_xiaoshuo_site/index.jsp';"
+ "</script>");
out.close();
return;
}
ServletContext sc=getServletContext();
String path=sc.getRealPath("/WEB-INF/tie");
String fileid=UUID.randomUUID().toString();
PrintWriter outContent=new PrintWriter(new File(path+"/"+fileid),"utf-8");
outContent.print(content);
outContent.flush();
outContent.close();
PostDao pd=new PostDao();
Post p=new Post();
p.setUser_id(user.getUser_id());
p.setSrc("/"+fileid);
p.setTitle(title);
p.setType(type);
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String formatDate=sdf.format(now);
p.setPost_time(formatDate);
pd.insert(p);
List<Post> ps=pd.getPosts(user.getUser_id());
int post_id=getMaxIdPost(ps);
/**
*
*
* 发小说
*
*/
@SuppressWarnings("serial")
public class PublishPostServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
String type=req.getParameter("type");
String title=req.getParameter("title");
String content=req.getParameter("content");
if(type==null||title==null||content==null){
return;
}
HttpSession session=req.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
out.print("<script type='text/javascript'>"+""
+ "alert('发小说成功!');"
+ "window.location='/jsp_xiaoshuo_site/index.jsp';"
+ "</script>");
out.close();
return;
}
ServletContext sc=getServletContext();
String path=sc.getRealPath("/WEB-INF/tie");
String fileid=UUID.randomUUID().toString();
PrintWriter outContent=new PrintWriter(new File(path+"/"+fileid),"utf-8");
outContent.print(content);
outContent.flush();
outContent.close();
PostDao pd=new PostDao();
Post p=new Post();
p.setUser_id(user.getUser_id());
p.setSrc("/"+fileid);
p.setTitle(title);
p.setType(type);
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String formatDate=sdf.format(now);
@SuppressWarnings("serial")
public class ChangeFiledServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/plain;charset=utf-8");
PrintWriter out=resp.getWriter();
String type=req.getParameter("type");
String value=req.getParameter("value");
UserDao ud=new UserDao();
HttpSession session=req.getSession();
if(type==null&&value==null)return;
if(type.equals("changeusername")){
User user=ud.getUser(value);
if(user==null){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setUser_name(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else{
out.print("{\"state\":2}"); //用户已存在
}
}else if(type.equals("changenickname")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setNickname(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("setsex")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setSex(value);
ud.update(us);
}else{
continue;
}
}
}
if(isAgain){
out.print("again");
return;
}
Collection c=new Collection();
c.setPost_id(pid);
c.setUser_id(user.getUser_id());
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String time=sdf.format(now);
c.setTime(time);
cld.insert(c);
out.print("ok");
return;
}else if(type.equals("hot")){
String pid=req.getParameter("pid");
int post_id=Integer.parseInt(pid);
List<Integer> hot=(List<Integer>)session.getAttribute("hot");
if(hot==null){
PostDao pd=new PostDao();
Post p=pd.getPost(post_id);
p.setHot(p.getHot()+1);
pd.update(p);
hot=new ArrayList<Integer>();
hot.add(post_id);
session.setAttribute("hot", hot);
out.print("ok");
return;
}else if(hot.size()==0){
PostDao pd=new PostDao();
Post p=pd.getPost(post_id);
p.setHot(p.getHot()+1);
pd.update(p);
hot.add(post_id);
out.print("ok");
}else{
boolean isAgain=false;
for(Integer i:hot){
if(i==post_id){
isAgain=true;
break;
}else {
continue;
}
}
if(isAgain){
out.print("again");
return;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
config=filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String pass=config.getInitParameter("pass");
HttpServletRequest req=(HttpServletRequest)request;
String[] path=pass.split(";");
String uri=req.getRequestURI();
if(uri.contains(".jsp")){
for(int i=0;i<path.length;i++){
if(uri.contains(path[i])){
chain.doFilter(request, response);
return;
}
}
HttpSession session =req.getSession();
if(session.getAttribute("user")!=null){
chain.doFilter(request, response);
}else{
((HttpServletResponse)response).sendRedirect("/jsp_xiaoshuo_site/index.jsp");
}
}else{
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
}else {
UserDao userDao = new UserDao();
userDao.delete(id);
PostDao postDao = new PostDao();
List<Post> list = postDao.getPosts(Integer.parseInt(id));
for(Post post:list) {
postDao.delPost(post.getPost_id());
}
out.print("删除成功!");
}
}
@SuppressWarnings("unused")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
/**
*
* 登录
*
*
*
*/
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain;charset=utf-8");
for (int i = 0; i < 30; i++) {
g.drawLine(0, rand.nextInt(width), rand.nextInt(width), rand.nextInt(height));
}
Color c = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(c);
g.drawString(str.toString(), 0, 32);
HttpSession session = req.getSession();
session.setAttribute("vercode", str.toString());
ImageIO.write(bufferImg, "jpeg", out);
}
}
public class CoreFilter implements Filter{
private FilterConfig config=null;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
config=filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String pass=config.getInitParameter("pass");
HttpServletRequest req=(HttpServletRequest)request;
String[] path=pass.split(";");
String uri=req.getRequestURI();
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("image/jpeg");
OutputStream out = resp.getOutputStream();
final char[] e = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
int height = 32;
int width = 100;
BufferedImage bufferImg = new BufferedImage
(100, 32, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufferImg.createGraphics();
Random rand = new Random();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
Font f = new Font("Fixedsys", Font.PLAIN, 32);
g.setFont(f);
g.setColor(Color.white);
g.drawRect(0, 0, width - 1, height - 1);
StringBuffer str = new StringBuffer();
for (int i = 0; i < 4; i++) {
str.append(e[rand.nextInt(36)]);
}
g.setColor(Color.black);
for (int i = 0; i < 30; i++) {
g.drawLine(0, rand.nextInt(width), rand.nextInt(width), rand.nextInt(height));
}
Color c = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(c);
g.drawString(str.toString(), 0, 32);
HttpSession session = req.getSession();
session.setAttribute("vercode", str.toString());
ImageIO.write(bufferImg, "jpeg", out);
}
}
CommentDao cd=new CommentDao();
Comment c=cd.getCommentById(comment_id);
c.setAgree(c.getAgree()+1);
cd.update(c);
agree.add(comment_id);
out.print(c.getAgree());
return;
}
}else if(type.equals("collection")){
int pid=Integer.parseInt(req.getParameter("pid"));
CollectionDao cld=new CollectionDao();
List<Collection> cs=cld.getCollectionByUserId(user.getUser_id());
boolean isAgain=false;
if(cs.size()!=0){
for(Collection c:cs){
if(c.getPost_id()==pid){
isAgain=true;
break;
}else{
continue;
}
}
}
if(isAgain){
out.print("again");
return;
}
Collection c=new Collection();
c.setPost_id(pid);
c.setUser_id(user.getUser_id());
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String time=sdf.format(now);
c.setTime(time);
cld.insert(c);
out.print("ok");
return;
}else if(type.equals("hot")){
String pid=req.getParameter("pid");
int post_id=Integer.parseInt(pid);
List<Integer> hot=(List<Integer>)session.getAttribute("hot");
if(hot==null){
PostDao pd=new PostDao();
Post p=pd.getPost(post_id);
p.setHot(p.getHot()+1);
pd.update(p);
hot=new ArrayList<Integer>();
hot.add(post_id);
session.setAttribute("hot", hot);
out.print("ok");
return;
}else if(hot.size()==0){
PostDao pd=new PostDao();
session.setAttribute("user", currentUser);
resp.sendRedirect("/jsp_xiaoshuo_site/jsp/main.jsp");
out.close();
}
}
}
}
/**
*
* 此类用于用户修改头像 或者上传头像
*
*/
@SuppressWarnings("serial")
public class ChangeIconServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* UserDao ud=new UserDao();
User user=ud.getUser("tyqinjava");
user.setUser_icon("/face/1.png");
ud.update(user);*/
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/plain;charset=utf-8");
PrintWriter out=resp.getWriter();
String changeIcon=req.getParameter("changeIcon");
String iconName=req.getParameter("iconname");
HttpSession session=req.getSession();
UserDao ud=new UserDao();
if(changeIcon!=null&&iconName!=null){ //更改头像逻辑
User user=(User)session.getAttribute("user"); //session不同步问题先不讨论
if(user==null){
}
/**
*
*
* 此类用于处理用户点赞,收藏,顶贴
*
*/
@SuppressWarnings("serial")
public class HandleServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@SuppressWarnings("unchecked")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/plain;charset=utf-8");
PrintWriter out=resp.getWriter();
String type=req.getParameter("type");
HttpSession session=req.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
out.print("session");
return;
}
if(type.equals("agree")){
for(Comment c:coms){
User u=ud.getUser(c.getUser_id());
JSONObject json=new JSONObject();
json.put("cid", c.getComment_id());
json.put("uid", u.getUser_id());
json.put("nickname", u.getNickname());
json.put("uicon", u.getUser_icon());
json.put("time", c.getTime());
json.put("agree", c.getAgree());
json.put("content", c.getContent());
jsonArray.put(json);
}
out.print(jsonArray.toString());
return;
}
CommentDao cd=new CommentDao();
List<Comment> coms=cd.getRangeOfCommentByDesc(start, end, pid);
if(coms.size()==0){
out.print("[]");
return;
}
JSONArray jsonArray=new JSONArray();
UserDao ud=new UserDao();
for(Comment c:coms){
User u=ud.getUser(c.getUser_id());
JSONObject json=new JSONObject();
json.put("cid", c.getComment_id());
json.put("uid", u.getUser_id());
json.put("nickname", u.getNickname());
json.put("uicon", u.getUser_icon());
json.put("time", c.getTime());
json.put("agree", c.getAgree());
json.put("content", c.getContent());
jsonArray.put(json);
}
out.print(jsonArray.toString());
}
}
/**
*
@SuppressWarnings("serial")
public class ChangeFiledServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/plain;charset=utf-8");
PrintWriter out=resp.getWriter();
String type=req.getParameter("type");
String value=req.getParameter("value");
UserDao ud=new UserDao();
HttpSession session=req.getSession();
if(type==null&&value==null)return;
if(type.equals("changeusername")){
User user=ud.getUser(value);
if(user==null){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setUser_name(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else{
out.print("{\"state\":2}"); //用户已存在
}
}else if(type.equals("changenickname")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setNickname(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("setsex")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
out.print("{\"state\":0}");//成功
}else{
out.print("{\"state\":2}");//密码输入错误
}
}
}
}
}
//获取评论
@SuppressWarnings("serial")
public class GetCommentServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@SuppressWarnings("unused")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/plain;charset=utf-8");
PrintWriter out=resp.getWriter();
String strStart=req.getParameter("start");
String strEnd=req.getParameter("end");
String strPid=req.getParameter("pid");
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setNickname(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("setsex")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setSex(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("setbirthday")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setBirthday(value);
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("changeemail")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
us.setEmail(value);;
ud.update(us);
out.print("{\"state\":0}");//成功
}
}else if(type.equals("changepassword")){
User us=(User)session.getAttribute("user");
if(us==null){
out.print("{\"state\":1}"); //session 过期
}else{
String[] v=value.split(",");
String old=v[0];
String New=v[1];
if(us.getPassword().equals(old)){
us.setPassword(New);
ud.update(us);
out.print("{\"state\":0}");//成功
}else{
out.print("{\"state\":2}");//密码输入错误
}
cd.update(c);
agree.add(comment_id);
out.print(c.getAgree());
}else{
boolean isAgain=false;
for(Integer i:agree){
if(i==comment_id){
isAgain=true;
break;
}else {
continue;
}
}
if(isAgain){
out.print("agree");
return;
}
CommentDao cd=new CommentDao();
Comment c=cd.getCommentById(comment_id);
c.setAgree(c.getAgree()+1);
cd.update(c);
agree.add(comment_id);
out.print(c.getAgree());
return;
}
}else if(type.equals("collection")){
int pid=Integer.parseInt(req.getParameter("pid"));
CollectionDao cld=new CollectionDao();
List<Collection> cs=cld.getCollectionByUserId(user.getUser_id());
boolean isAgain=false;
if(cs.size()!=0){
for(Collection c:cs){
if(c.getPost_id()==pid){
isAgain=true;
break;
}else{
continue;
}
}
}
if(isAgain){
out.print("again");
return;
}
Collection c=new Collection();
c.setPost_id(pid);
c.setUser_id(user.getUser_id());
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String time=sdf.format(now);
c.setTime(time);
cld.insert(c);
out.print("ok");