博客系统

核心:1.前后端代码的交互

           2.前端代码

           3.后端代码

数据库:写一个文件(里面装有创建的数据库里面的内容)创建数据库(java_blog_system){创建博客blog(blogId,blog_title,content,userId,postTime),创建用户表user(userId,userName,password)}

         创建一个Dao包 里面有:

1.创建一个user类:里面有用户的属性(userId,userName,password)

2.创建一个blog类,里面有博客的属性(blogId,blog_title,content,userId,postTime)

3.创建一个UrlDao类,里面有创建数据库源,连接,和关闭一些资源(ResuleSet,Connection,statement)的方法

4.创建一个BlogDao类,里面是博客的添加,查询和删除

5.创建一个UserDao类,里面有查询用户(通过名字和Id)

一.登陆页面

    用户在页面上写出用户名和密码后,前端把数据传入到后端,向后端发出请求,后端拿到数据后进行登陆验证

前后端交互:

方法:post Url:login

Content-Type:form表单

后端:接收到用户名和密码

req.setCharacterEncoding("utf8");
String username= req.getParameter("username");
String password= req.getParameter("password");

1.验证用户名和密码是否为空

if(username==null||password==null||"".equals(username)||"".equals(password)){
    resp.setContentType("text/html;charset=utf8");
    resp.getWriter().write("用户名错误");
    return;
}

2.验证用户名是否为空(实例化一个UserDao,到实例化后的UserDao里面找接收到的用户名,若用户因为空,这说明用户名错误或密码错误)

UserDao userDao=new UserDao();
User user= null;
try {
    user = userDao.getUserByName(username);
} catch (SQLException e) {
    throw new RuntimeException(e);
}
if(user==null){
     resp.setContentType("text/html;charset=utf8");
     resp.getWriter().write("用户名错误或者密码错误");
     return;
 }

3.验证密码是否正确(用接收到的密码和实例化的UserDao的密码做比较)

if(!password.equals(user.getPassword())){
    resp.setContentType("text/html;charset=utf8");
    resp.getWriter().write("用户名错误或者密码错误");
    return;
}

4.验证是否有会话(若有会话就查询,若没有就创建会话)

HttpSession session= req.getSession(true);
 if(session==null){
     //未登陆
     resp.setStatus(403);
     resp.sendRedirect("login.html");
 }
 session.setAttribute("username",username);

5.跳转到列表页

resp.sendRedirect("blog_list.html");

二.强制登录

前后端交互:

方法:Get  Url:login

后端:

获取会话是否为空,若为空则就返回,否则就查询

若果会话不为空,就查询会话里面的username,看是否和也面输入的是否相同 

注意:验证是否已登陆

 思路:查看会话是否为空,若会话为空,则就说明未登陆直接返回,若会话不为空,就查询会话,看会话里面的值是否为空,为空就未登陆并直接返回

HttpSession session=req.getSession(false);
if(session==null){
    resp.setContentType("text/html;charset=utf8");
    resp.getWriter().write("用户未登陆");
    return;
}
User user=(User)session.getAttribute("user");
if(user==null){
    resp.setContentType("text/html;charset=utf8");
    resp.getWriter().write("用户未登陆");
    return;
}

三.查询博客列表页(blog_list.html)

    前端向后端发出请求,后端从数据库拿到数据,到前端响应出来

    前后端的交互:

    方法:Get  Url:blog

       Content-Type:application/json

       后端:写Get方法

      首先实例化一个BlogDao类,拿到他的userId,如果userId为空则为情况一,如果userId不为空则为情况二

BlogDao blogDao = new BlogDao();
String blogId=req.getParameter("userId");

 情况一:获取所有的列表

List<Blog> blogs = null;
try {
    blogs = blogDao.getBlogs();
} catch (SQLException e) {
    throw new RuntimeException(e);
}
String response = objectMapper.writeValueAsString(blogs);
resp.setContentType("application/json;charset=utf8");
resp.getWriter().write(response);

情况二:获取指定Id的博客
Blog blog=new Blog(); try { blog=blogDao.getBlog(Integer.parseInt(blogId)); } catch (SQLException e) { throw new RuntimeException(e); } String response= objectMapper.writeValueAsString(blog); resp.setContentType("application/json;charset=utf8"); resp.getWriter().write(response);

三. 博客列表页(用户的信息)和博客详情页(作者)

如果有blogId=null 则就是博客列表页,若blogId不为空就是博客详情页

String blogId= req.getParameter("blogId");

博客列表页:首先验证用户是否登陆了,如果用户未登陆了,就返回(返回一个实例化的空User)

   否则就获取会话中的用户信息,写到服务器中,最后再返回到页面上

博客详情页:实例化一个BlogDao类,到里面查找当前blogId的blog,若没有找到就返回一个实例化空User,否则实例化UserDao类,并查找blog里面的userId,看是否有user,若user为空,就实例化一个空User返回,否则就把接受到的user信息写到服务器上并返回到页面上

博客列表页:                              

方法:Get   Url:user       

后端:

HttpSession session= req.getSession(false);
if(session==null){
User user=new User();
String response= objectMapper.writeValueAsString(user);
resp.setContentType("application/json;charset=utf8");
resp.getWriter().write(response);
return;
}
    User user=new User();
    user=(User)session.getAttribute("user");
    if(user==null){
        user=new User()
        String response= objectMapper.writeValueAsString(user);
        resp.setContentType("application/json;charset=utf8");
        resp.getWriter().write(response);
        return;
    }
String response= objectMapper.writeValueAsString(user);
resp.setContentType("application/json;charset=utf8");
resp.getWriter().write(response);

博客详情页:

              方法:Post   Url:user   blogId=?

BlogDao blogDao = new BlogDao();
Blog blog;
try {
    blog = blogDao.getBlog(Integer.parseInt(blogId));
} catch (SQLException e) {
    throw new RuntimeException(e);
}
if (blog == null){
    User user=new User();
    String response= objectMapper.writeValueAsString(user);
    resp.setContentType("application/json;charset=utf8");
    resp.getWriter().write(response);
    return;
}
UserDao userDao=new UserDao();
User user= null;
try {
    user = userDao.getUserById(blog.getUserId());
} catch (SQLException e) {
    throw new RuntimeException(e);
}
if(user==null){
     user=new User();
    String response= objectMapper.writeValueAsString(user);
    resp.setContentType("application/json;charset=utf8");
    resp.getWriter().write(response);
    return;
}
String response= objectMapper.writeValueAsString(user);
resp.setContentType("application/json;charset=utf8");
resp.getWriter().write(response);

 四.编辑页面(发布博客的地方)

思路: 首先先验证是否已登陆,若未登陆就返回,否则就从前端代码中获取标题和正文

如果标题和正文都为空,就返回  否则就实例化一个BlogDao类,调用insert方法来写一篇博客

      前后端交互:

  方法:post  Url: blog

   后端:

req.setCharacterEncoding("utf8");
String title=req.getParameter("title");
String content= req.getParameter("content");
if(title==null||content==null||"".equals(title)||"".equals(content)){
    resp.setContentType("text/html");
    resp.getWriter().write("用户还没有发不此篇博客");
    return;
}
//构造blog,插入标题和正文
Blog blog=new Blog();
blog.setTitle(title);
blog.setContent(content);
blog.setUserId(user.getUserId());
BlogDao blogDao=new BlogDao();
try {
    blogDao.insert(blog);
} catch (SQLException e) {
    throw new RuntimeException(e);
}
resp.sendRedirect("blog_list.html");

五.退出登陆

  思路:首先检验是否已登陆,若未登陆则就跳转到登陆页面,若登陆就调用

session.removeAttribute()函数来删除登陆的用户
session.removeAttribute("user");
resp.getWriter().write("该用户已退出登陆");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值