javaweb综合项目:----CRUD(Servlet||JSP)

展示所有:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;

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.util.List;

/**
 * @program: javaweb-demo
 * @description:
 * @author: GuoTong
 * @create: 2020-09-16 17:23
 **/
@WebServlet(urlPatterns = {"/user"},loadOnStartup = 1)
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        //查询数据
        List<User> users = new UserService().findAll();

        //将数据转发到list.jsp
        req.setAttribute("userlist",users);
        req.getRequestDispatcher("/list.jsp").forward(req,resp);

    }
}
复制代码

添加请求处理:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;
import org.apache.commons.beanutils.BeanUtils;


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.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @program: javaweb-demo
 * @description:
 * @author: GuoTong
 * @create: 2020-09-17 08:59
 **/
@WebServlet(urlPatterns = {"/add"}, loadOnStartup = 1)
public class AddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");


        /*
        原生: User user = new User();
        user.setName(req.getParameter("name"));
        user.setGender(req.getParameter("sex"));
        user.setAge(Integer.parseInt(req.getParameter("age")));
        user.setAddress(req.getParameter("address"));
        user.setQq(req.getParameter("qq"));
        user.setEmail(req.getParameter("email"));//email*/

        /*自动封装:import org.apache.commons.beanutils.BeanUtils;*/
        //方法可以将一个map转成一个对象:BeanUtils.populate();
        //参数以需要封装数据的对象,参数二数据map
        //接收参数,封装对象
        User user = new User();
        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
        for (Map.Entry<String, String[]> entry : entries) {
            System.out.println(entry.getKey() + ":" + Arrays.toString(entry.getValue()));
        }
        try {

            // 自动装配,参数key一定要一致。。属性名
            BeanUtils.populate(user, parameterMap);
            System.out.println(user);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        UserService userService = new UserService();

        userService.addUser(user);
        resp.sendRedirect(req.getContextPath() + "/user");

    }
}
复制代码

删除请求处理:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;
import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;

/**
 * @program: javaweb-demo
 * @description:
 * @author: GuoTong
 * @create: 2020-09-17 08:59
 **/
@WebServlet(urlPatterns = {"/delete"}, loadOnStartup = 1)
public class DeleteServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        //获取参数 id
        int id = Integer.parseInt(req.getParameter("id"));
        //调用业务层处理
        UserService userService = new UserService();
        userService.deleteById(id);

      //重定向到首页
        resp.sendRedirect(req.getContextPath()+"/index.jsp");

    }
}
复制代码

更新操作处理1,根据id查询用户回显:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;

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.util.List;

/**
 * @program: javaweb-demo
 * @description:
 * @author: GuoTong
 * @create: 2020-09-17 10:10
 **/
@WebServlet(urlPatterns = {"/update"},loadOnStartup = 1)
public class UpdateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

      //修改数据
        int id = Integer.parseInt(req.getParameter("id"));
        //查询用户
        UserService userService = new UserService();
       User user = userService.findById(id);
       if (user!=null){
       req.setAttribute("user",user);

        req.getRequestDispatcher("/update.jsp").forward(req,resp);
       }else {
           resp.sendRedirect(req.getContextPath()+"/list.jsp");
       }
    }
}
复制代码

更新操作处理2,修改数据:

复制代码
package com.gton.curd.web;

        import com.gton.curd.entity.User;
        import com.gton.curd.service.UserService;
        import org.apache.commons.beanutils.BeanUtils;

        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.lang.reflect.InvocationTargetException;
        import java.util.List;
        import java.util.Map;

@WebServlet(urlPatterns = {"/updateExcute"},loadOnStartup = 1)
public class UpdateExcuteServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        Map<String, String[]> parameterMap = req.getParameterMap();
        User user = new User();
        try {
            BeanUtils.populate(user,parameterMap);
            UserService userService = new UserService();
            userService.saveUpdate(user);

            resp.sendRedirect(req.getContextPath()+"/index.jsp");

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }


    }
}
复制代码

模糊匹配姓名:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;
import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @program: javaweb-demo
 * @description:
 * @author: GuoTong
 * @create: 2020-09-17 08:59
 **/
@WebServlet(urlPatterns = {"/serch"}, loadOnStartup = 1)
public class SerchServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        String name = req.getParameter("name");
        UserService service = new UserService();
        List<User> users= service.serch(name);
        req.setAttribute("userlist",users);

        req.getRequestDispatcher("/list.jsp").forward(req,resp);


    }
}
复制代码

登录页面处理:

复制代码
package com.gton.curd.web;

import com.gton.curd.entity.User;
import com.gton.curd.service.UserService;
import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.Set;

/**
 * @program: javaweb-demo
 * @description: 用户登录处理
 * @author: GuoTong
 * @create: 2020-09-17 15:59
 **/
@WebServlet(urlPatterns = "/myLogin",loadOnStartup = 1)
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //由于过滤器处理编码,这里不用单独写
        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
        for (Map.Entry<String, String[]> entry : entries) {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        User loginUser = new User();
        try {
            //工具类封装数据
            BeanUtils.populate(loginUser,parameterMap);
            System.out.println(loginUser);
            //业务层调用
            UserService service = new UserService();
            User user = service.loginUser(loginUser);
            System.out.println(user);
            //如果user 不为空||null
            if (user!=null){
                //将对象存入session中,跳转到首页
                req.getSession().setAttribute("UserName",user);
                resp.sendRedirect(req.getContextPath()+"/index.jsp");
            }else{
                //如果说用户为空,登录不成功,携带错误信息---->登录页面
                req.setAttribute("errorMsg","用户名或者密码错误");
                req.getRequestDispatcher("/login.jsp").forward(req,resp);
            }

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
复制代码

JSP:展示全部页面,

复制代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
</head>
<body>
<%
    String path = request.getContextPath();
    session.setAttribute("path",path);
%>
<div class="container">
    <h3 style="text-align: center">用户信息列表</h3>
    <form action="${path}/serch" method="post">
        <input type="text" placeholder="搜索名字" name="name">
        <input type="submit"  value="提交">
    </form>
    <table border="1" class="table table-bordered table-hover">
        <tr class="success">
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>籍贯</th>
            <th>QQ</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
       <c:forEach items="${userlist}" var="user" varStatus="statu">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.gender}</td>
            <td>${user.age}</td>
            <td>${user.address}</td>
            <td>${user.qq}</td>
            <td>zs@${user.email}.com</td>
            <td><a class="btn btn-default btn-sm" href="${path}/update?id=${user.id}">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="javascript:;" onclick="deleteUser(${user.id})">删除</a></td>
        </tr>
       </c:forEach>
        <tr>
            <td colspan="8" align="center"><a class="btn btn-primary" href="add.jsp">添加联系人</a></td>
        </tr>
    </table>
</div>
<script>
    function deleteUser(id) {
        //向后端发送请求:弹窗
         var isDel = confirm("您确定要删除吗?");
         if (isDel){
             window.location.href="${path}"+"/delete?id="+id;
         }


    }
</script>
</body>
</html>
复制代码

添加页面的JSP:

复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>添加用户</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
</head>
<body>
<%
String path = request.getContextPath();
pageContext.setAttribute("path",path);
%>
<div class="container" style="width: 400px;">
    <center><h3>添加联系人页面</h3></center>
    <form action="${path}/add" method="post">
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
        </div>

        <div class="form-group">
            <label>性别:</label>
            <input type="radio" name="gender" value="男" checked="checked"/><input type="radio" name="gender" value="女"/></div>

        <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
        </div>

        <div class="form-group">
            <label for="jiguan">籍贯:</label>
            <select name="address" class="form-control" id="jiguan">
                <option value="广东">广东</option>
                <option value="广西">广西</option>
                <option value="湖南">湖南</option>
            </select>
        </div>

        <div class="form-group">
            <label for="qq">QQ:</label>
            <input id="qq" type="text" class="form-control" name="qq" placeholder="请输入QQ号码"/>
        </div>

        <div class="form-group">
            <label for="email">Email:</label>
            <input id="email" type="text" class="form-control" name="email" placeholder="请输入邮箱地址"/>
        </div>

        <div class="form-group" style="text-align: center">
            <input class="btn btn-primary" type="submit" value="提交" />
            <input class="btn btn-default" type="reset" value="重置" />
            <input class="btn btn-default" type="button" value="返回" />
        </div>
    </form>
</div>
</body>
</html>
复制代码

修改操作的JSP页面:

复制代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
    <head>
<%--        <base href="<%=basePath%>"/>--%>
        <!-- 指定字符集 -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>修改用户</title>

        <link href="css/bootstrap.min.css" rel="stylesheet">
        <script src="js/jquery-2.1.0.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        
    </head>

    <body>
    <%
        String path = request.getContextPath();
        session.setAttribute("path",path);
    %>
        <div class="container" style="width: 400px;">
        <h3 style="text-align: center;">修改联系人</h3>
        <form action="${path}/updateExcute" method="post">
            <div class="form-group">
                <input type="hidden" value="${user.id}" class="form-control" id="id" name="id"/>
            </div>


            <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" value="${user.name}" class="form-control" id="name" name="name"  readonly="readonly" placeholder="请输入姓名" />
          </div>

          <div class="form-group">
            <label>性别:</label>
              <input type="radio"  ${user.gender.equals("男")?"checked":""} name="gender" value="男"  /><input type="radio"  ${user.gender.equals("女")?"checked":""} name="gender" value="女"  /></div>

          <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" value="${user.age}" class="form-control" id="age"  name="age" placeholder="请输入年龄" />
          </div>

          <div class="form-group">
            <label for="address">籍贯:</label>
             <select id="address" name="address" class="form-control" >
                 <option value="广东" <c:if test="${'广东' eq user.address}">selected</c:if> >广东</option>
                <option value="广西" <c:if test="${'广西' eq user.address}">selected</c:if>>广西</option>
                <option value="湖南" <c:if test="${'湖南' eq user.address}">selected</c:if>>湖南</option>
            </select>
          </div>

          <div class="form-group">
            <label for="qq">QQ:</label>
            <input id="qq" value="${user.qq}" type="text" class="form-control" name="qq" placeholder="请输入QQ号码"/>
          </div>

          <div class="form-group">
            <label for="email">Email:</label>
            <input id="email" value="${user.email}" type="text" class="form-control" name="email" placeholder="请输入邮箱地址"/>
          </div>

             <div class="form-group" style="text-align: center">
                <input class="btn btn-primary" type="submit" value="提交" />
                <input class="btn btn-default" type="reset" value="重置" />
                <input class="btn btn-default" type="button" value="返回"/>
             </div>
        </form>
        </div>
    </body>
</html>
复制代码

登录页面的LOgin页面JSP:

复制代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="${pageContext.request.contextPath}/css/bootstrap.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="${pageContext.request.contextPath}/js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="${pageContext.request.contextPath}/js/bootstrap.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
</head>
<body>
<h2 style="text-align: center;margin-top: 50px">用户登录界面</h2>
<div style="padding: 20px ;width: 500px;margin: 150px auto;border: 2px solid blue;border-radius: 10px">
    <form action="${pageContext.request.contextPath}/myLogin" method="post" class="form-horizontal">
        <div class="form-group">
            <label for="exampleInputEmail1">用户名</label>
            <input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="输入账号">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">密码</label>
            <input type="password" name="email" class="form-control" id="exampleInputPassword1" placeholder="输入密码">
        </div>
        <button type="submit" class="btn btn-default">登录</button>
    </form>
    <c:if test="${not empty requestScope.errorMsg}">
    <h3 style="text-align: center;margin-top: 50px;color: red">${requestScope.errorMsg}</h3>
    </c:if>
</div>

</body>
</html>
复制代码

主页,INdex,JSP;

复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/9/16
  Time: 16:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
<jsp:forward page="/user"></jsp:forward>
  </body>
</html>
复制代码

 

posted on   白嫖老郭  阅读(103)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示