59简单学生管理系统【功能实现((完善注册、登录、详情页)、记住我 、安全退出、修改密码、修改学生信息、修改老师信息)】、JSP

news2024/11/15 17:22:02

功能实现

什么是JSP

html+java

5.完善注册、登录、详情页

html页面改用jsp

使用:<%java代码%>,展示用<%=“行了”%>

注册

完善注册

修改RegisterServlet

改用转发方式跳转

原因:注意重定向是两次请求,存在第一次请求中的数据会在它发送第二次请求时消失,就不能在页面获取展示出来

        }else{//不允许注册

//            //利用重定向跳转到注册页面
//            response.sendRedirect("register.html");
            //将提示信息存在请求里
            request.setAttribute("msg","注册失败 -- 账号已存在");
            //利用转发跳转到注册页面
            request.getRequestDispatcher("register.jsp").forward(request,response);
        }
register.jsp

原有基础加两段代码

对于改用jsp后,就可解决在页面提示:展示提示信息

        <%String msg = (String) request.getAttribute("msg");%>
        <%=(msg !=null)?msg:""%>
登录

完善登录

修改LoginServlet

添加将数据存储到Session中

登录成功,将数据存储到Session中,方便详情页获取展示,跳转详情页就用重定向

登录失败,对于提示信息和跳转的处理同注册

        if(sysCode.equalsIgnoreCase(userCode)){//验证码正确

            if(user != null){//登录成功

                //将数据存储到Session中
                HttpSession session = request.getSession();
                session.setAttribute("username",user.getUsername());
                session.setAttribute("name",user.getName());
                session.setAttribute("role",role);

                response.sendRedirect("index.jsp");

            }else{//登录失败 -- 账号或密码错误

//                response.sendRedirect("login.html");
                request.setAttribute("msg","登录失败 -- 账号或密码错误");
                request.getRequestDispatcher("login.jsp").forward(request,response);
            }

        }else{//登录失败 - 验证码错误
            
//            response.sendRedirect("login.html");
            //将提示信息存在请求里
            request.setAttribute("msg","登录失败 -- 验证码错误");
            //利用转发跳转到注册页面
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }
    }
}
login.jsp

原有基础加两段代码

  <%
    String msg = (String) request.getAttribute("msg");
  %>
  <%=(msg!=null)?msg:""%>
详情页

完善登录03角色跳转

index.jsp

获取存在session中的数据进行学生或者老师信息展示,添加一些后续功能的入口

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        String username = (String) session.getAttribute("username");
        String name = (String) session.getAttribute("name");
        String role = (String) session.getAttribute("role");
    %>

    <button >安全退出</button>
    <h1>详情页面</h1>
    <h1>欢迎<%=name%><%=("student".equals(role))?"学员":""%><%=("teacher".equals(role))?"老师":""%>进入到学生管理系统</h1>

    <a href="#">修改密码</a>


    <%if("student".equals(role)){%>
        <a href="#">修改信息</a>
    <%}%>

    <%if("teacher".equals(role)){%>
        <a href="#">修改信息</a>
        <a href="#">查看所有学生</a>
    <%}%>

    </script>
</body>
</html>

6.记住我

实现:存Session、存Cookie

记住我

修改LoginServlet

添加存凭证

1.当第一次登录时,点击了“记住我”,就会存凭证【username、name、role合起来是一个凭证】存在Cookie中

2.再次登录就会判断,是否有凭证

​ 有,直接跳详情页面,不过在跳转前会将凭证存在session中【因为详情页展示需要session的数据】

​ 没有,就不管,就用户直接输入登录

              if(user != null){//登录成功

                //判断是否记住我
                if(rememberMe != null){

                    //将凭证添加到Cookie中
                    response.addCookie(CookieUtils.createCookie("username",user.getUsername(),60*60*24*5));
                    response.addCookie(CookieUtils.createCookie("name",user.getName(),60*60*24*5));
                    response.addCookie(CookieUtils.createCookie("role",role,60*60*24*5));

                }

                //将数据存储到Session中
                HttpSession session = request.getSession();
                session.setAttribute("username",user.getUsername());
                session.setAttribute("name",user.getName());
                session.setAttribute("role",role);

                response.sendRedirect("index.jsp");

            }else{//登录失败 -- 账号或密码错误

            }

修改login.jsp

添加凭证判断跳转

获取请求中存在session中的数据,进行凭证判断,有就直接跳转详情,没有就用户直接输入登录

<body>

  <%
    Cookie[] cookies = request.getCookies();

    if(cookies != null){
      int count = 0;
      for (Cookie cookie : cookies) {
        String name = cookie.getName();
          //解码类解码
        String value = URLDecoder.decode(cookie.getValue(),"UTF-8");

        if("username".equals(name)){
          session.setAttribute("username",value);
          count++;
        }
        if("name".equals(name)){
          session.setAttribute("name",value);
          count++;
        }
        if("role".equals(name)){
          session.setAttribute("role",value);
          count++;
        }
      }
      if(count == 3){
        response.sendRedirect("index.jsp");
      }
    }


  %>
    
</body>
新增工具类CookieUtils
public class CookieUtils {

    public static Cookie createCookie(String name,String value,int time){

        Cookie cookie = null;
        try {
            //注意:数据有中文必须设置编码格式
            cookie = new Cookie(name, URLEncoder.encode(value,"UTF-8"));
            //设置过期时间
            cookie.setMaxAge(time);
            return cookie;
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
}

7.安全退出

实现:删Session、删Cookie

安全退出

SafeExitServlet
@WebServlet("/SafeExitServlet")
public class SafeExitServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //删除Cookie里的数据
        response.addCookie(CookieUtils.createCookie("username","",0));
        response.addCookie(CookieUtils.createCookie("name","",0));
        response.addCookie(CookieUtils.createCookie("role","",0));

        //删除Session里的数据
        HttpSession session = request.getSession();
        session.removeAttribute("username");
        session.removeAttribute("name");
        session.removeAttribute("role");

        //跳转
        response.sendRedirect("welcome.html");
    }
}
修改index.jsp
<button οnclick="safeExit()">安全退出</button>

    <script type="text/javascript">
        function safeExit(){
            window.location = "SafeExitServlet";
        }
        
    </script>

8.修改密码

修改密码
修改密码06

注意:在写代码时考虑代码冗余,应先考虑代码的可读性

新增ResetPasswordServlet
  1. 设置请求、响应编码格式
  2. 获取请求中的数据
  3. 通过username、password查询数据库中的用户对象
  4. 通过用户对象进行判断

​ 用户存在,判断角色修改密码,注意要做安全退出【不然在有记住我的情况下,第二次登录直接进来】

​ 用户不存在,设置提示修改密码失败信息,又转发方式跳转回到修改密码页面

@WebServlet("/ResetPasswordServlet")
public class ResetPasswordServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求、响应编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取请求中的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String newPassword = request.getParameter("newPassword");
        String role = request.getParameter("role");
        //方案1
//        String username = (String) request.getSession().getAttribute("username");
//        String role = (String) request.getSession().getAttribute("role");
		
        //通过username、password查询数据库中的用户对象
        User user = null;
        try {
            if("student".equals(role)){
                user = DBUtils.commonQueryObj(Student.class, "select * from student where username=? and password=?", username, password);
            }else if("teacher".equals(role)){
                user = DBUtils.commonQueryObj(Teacher.class, "select * from teacher where username=? and password=?", username, password);
            }

            //通过用户对象进行判断
            if(user != null){
                if("student".equals(role)){
                    DBUtils.commonUpdate("update student set password=? where username=?",newPassword,username);
                }else if("teacher".equals(role)){
                    DBUtils.commonUpdate("update teacher set password=? where username=?",newPassword,username);
                }

                //修改密码成功后,做安全退出的功能
                request.getRequestDispatcher("SafeExitServlet").forward(request,response);

            }else{
                request.setAttribute("msg","修改密码失败 -- 原密码不正确");
                request.getRequestDispatcher("resetPassword.jsp").forward(request,response);
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }


    }
}
修改index.jsp
<a href="resetPassword.jsp">修改密码</a>
新增resetPassword.jsp

需要展示页面就要先获取session中的username

要用户输入就原密码和新密码【对于为什么要原密码,就是在用户电脑在登录情况下被别人直接改密码】

注意1:对于ResetPasswordServlet查询用户对象,是需要username和role,怎么获取?

​ 方案1:ResetPasswordServlet直接通过session获取【session里面存的有】

//        String username = (String) request.getSession().getAttribute("username");
//        String role = (String) request.getSession().getAttribute("role");

​ 方案2:在这个表单直接请求传过去,ResetPasswordServlet就可以在请求中取

方案2更好,方案一不但太麻烦,而且对于数据一处取可读性更高

注意2:方案2也有两种传法【get、post】,get会在地址栏显示,不好

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <%
        String username = (String) session.getAttribute("username");
        String role = (String) session.getAttribute("role");

        String msg = (String) request.getAttribute("msg");
    %>
    <%=(msg!=null)?msg:""%>
    
 //ResetPasswordServlet?username=<%=username%>&role=<%=role%>也能传,但是会在浏览器地址栏显示
    <form action="ResetPasswordServlet" method="post">

        <!--隐藏域-->
        <input type="hidden" name="username" value="<%=username%>"/>
        <input type="hidden" name="role" value="<%=role%>"/>

        账号:<%=username%><br/>
        原密码:<input type="password" name="password"/><br/>
        新密码:<input type="password" name="newPassword"/><br/>

        <input type="submit" value="修改"/>
        <input type="button" value="返回" οnclick="goIndex()"/>
    </form>

    <script type="text/javascript">
        function goIndex(){
            window.location = "index.jsp";
        }
    </script>
</body>
</html>

9.修改学生信息

修改学生信息

新增StuInitModifyServlet

初始化修改学生数据

  1. 设置请求、响应编码格式
  2. 获取请求中的数据
  3. 从数据库中获取学生对象
  4. 将学生对象存在请求中,转发方式到学生修改信息页面stuInfo.jsp
@WebServlet("/StuInitModifyServlet")
public class StuInitModifyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求、响应编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取请求中的数据
        String username = request.getParameter("username");

        //从数据库中获取学生对象
        Student student = null;
        try {
            student = DBUtils.commonQueryObj(Student.class, "select * from student where username=?", username);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        request.setAttribute("student",student);
        request.getRequestDispatcher("stuInfo.jsp").forward(request,response);
    }
}
新增StuModifyServlet
  • 设置请求、响应编码格式
  • 获取请求中的数据
  • 更新数据库里的学生数据
  • 更新Session里的数据【原因:可能改名字,如果不改还是原来的名字就会在使用时出错】
  • 更新Cookie里的数据【可存可不存,还是存一下,Cookie只有记住我才会有数据,name涉及凭证】
  • 重定向方式跳转到详情页面index.jsp
@WebServlet("/StuModifyServlet")
public class StuModifyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求、响应编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取请求中的数据
        String username = request.getParameter("username");
        String name = request.getParameter("name");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        String[] hobbies = request.getParameterValues("hobbies");

        //更新数据库里的学生数据
        try {
            DBUtils.commonUpdate("update student set name=?,sex=?,age=?,hobbies=? where username=?",name,sex,age, StringUtils.handleArray(hobbies),username);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //更新Session里的数据
        request.getSession().setAttribute("name",name);
        //更新Cookie里的数据
        response.addCookie(CookieUtils.createCookie("name",name,60*60*24*5));

        response.sendRedirect("index.jsp");
    }
}
新增stuInfo.jsp

对于没有直接进行学生信息处理【因为没有修改学生的年龄,性别,爱好信息】,需要先到StuInitModifyServlet获取到学生对象,再获取其中信息,用来修改页面展示和表单发送StuModifyServlet中的修改

注意:对性别和爱好的选择处理

<%@ page import="com.qf.pojo.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <%
        Student student = (Student) request.getAttribute("student");
    %>

    <h1>学生修改信息页面</h1>

    <form action="StuModifyServlet" method="post">

        <input type="hidden" name="username" value="<%=student.getUsername()%>"/>

        账号:<%=student.getUsername()%><br/>
        姓名:<input type="text" name="name" value="<%=student.getName()%>"/><br/>
        年龄:<input type="text" name="age" value="<%=student.getAge()%>"/><br/>
        性别:
        <input type="radio" name="sex" value="man" <%=(student.getSex().equals("man"))?"checked='checked'":""%>/>男
        <input type="radio" name="sex" value="woman" <%=(student.getSex().equals("woman"))?"checked='checked'":""%>/>女
        <br/>
        爱好:
        <input type="checkbox" name="hobbies" value="football" <%=(student.getHobbies().contains("football"))?"checked='checked'":""%>/>足球
        <input type="checkbox" name="hobbies" value="basketball" <%=(student.getHobbies().contains("basketball"))?"checked='checked'":""%>/>篮球
        <input type="checkbox" name="hobbies" value="shop" <%=(student.getHobbies().contains("shop"))?"checked='checked'":""%>/>购物
        <br/>

        <input type="submit" value="修改"/>
        <input type="button" value="返回" οnclick="goIndex()"/>
    </form>

    <script type="text/javascript">
        function goIndex(){
            window.location = "index.jsp";
        }
    </script>
</body>
</html>

修改index.jsp

在跳转的同传username的原因【使StuInitModifyServlet可以拿到账号到数据库查询到改账号的学生信息】

   <%if("student".equals(role)){%>
        <a href="StuInitModifyServlet?username=<%=username%>">修改信息</a>
    <%}%>

10.修改老师信息

修改老师信息

新增TeaInitModifyServlet

初始化修改老师数据

  1. 设置请求、响应编码格式
  2. 获取请求中的数据
  3. 从数据库中获取老师对象
  4. 将老师对象和课程集合对象存在请求中,转发方式到老师修改信息页面teaInfo.jsp
@WebServlet("/TeaInitModifyServlet")
public class TeaInitModifyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求、响应编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取请求中的数据
        String username = request.getParameter("username");

        //从数据库中获取相应的数据
        Teacher teacher = null;
        List<Course> courses = null;
        try {
            teacher = DBUtils.commonQueryObj(Teacher.class,"select * from teacher where username=?",username);
            courses = DBUtils.commonQueryList(Course.class,"select * from course");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //存入请求对象中
        request.setAttribute("teacher",teacher);
        request.setAttribute("courses",courses);

        //跳转页面
        request.getRequestDispatcher("teaInfo.jsp").forward(request,response);
    }
}
新增TeaModifyServlet
  • 设置请求、响应编码格式
  • 获取请求中的数据
  • 更新数据库里的老师数据
  • 更新Session里的数据【原因:可能改名字,如果不改还是原来的名字就会在使用时出错】
  • 更新Cookie里的数据【可存可不存,还是存一下,Cookie只有记住我才会有数据,name涉及凭证】
  • 重定向方式跳转到详情页面index.jsp
@WebServlet("/TeaModifyServlet")
public class TeaModifyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求、响应编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取请求中的数据
        String username = request.getParameter("username");
        String name = request.getParameter("name");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        String courseId = request.getParameter("courseId");

        //更新数据库里的学生数据
        try {
            DBUtils.commonUpdate("update teacher set name=?,sex=?,age=?,courseId=? where username=?",name,sex,age, courseId,username);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //更新Session里的数据
        request.getSession().setAttribute("name",name);
        //更新Cookie里的数据
        response.addCookie(CookieUtils.createCookie("name",name,60*60*24*5));

        response.sendRedirect("index.jsp");
    }
}
teaInfo.jsp

对于没有直接进行老师信息处理【因为没有修改老师的年龄,性别信息】,需要先到TeaInitModifyServlet获取到老师对象,再获取其中信息,用来修改页面展示和表单发送TeaModifyServlet中的修改

注意:对性别和学科选择的处理

对于学科考虑到会新增的情况,不能写死,通过获取学科集合再遍历的方式进行选择展示

<%@ page import="com.qf.pojo.Teacher" %>
<%@ page import="java.util.List" %>
<%@ page import="com.qf.pojo.Course" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Teacher teacher = (Teacher) request.getAttribute("teacher");
        List<Course> courses = (List<Course>) request.getAttribute("courses");
    %>

    <h1>老师修改信息页面</h1>

    <form action="TeaModifyServlet" method="post">

        <input type="hidden" name="username" value="<%=teacher.getUsername()%>"/>

        账号:<%=teacher.getUsername()%><br/>
        姓名:<input type="text" name="name" value="<%=teacher.getName()%>"/><br/>
        年龄:<input type="text" name="age" value="<%=teacher.getAge()%>"/><br/>
        性别:
        <input type="radio" name="sex" value="man" <%=(teacher.getSex().equals("man"))?"checked='checked'":""%>/>男
        <input type="radio" name="sex" value="woman" <%=(teacher.getSex().equals("woman"))?"checked='checked'":""%>/>女
        <br/>
        学科:
            <select name="courseId">
                <% for(Course course : courses){%>
                    <option value="<%=course.getId()%>" <%=(course.getId() == teacher.getCourseId())?"selected='selected'":""%> ><%=course.getName()%></option>
                <% }%>
            </select>
        <br/>

        <input type="submit" value="修改"/>
        <input type="button" value="返回" οnclick="goIndex()"/>
    </form>

    <script type="text/javascript">
        function goIndex(){
            window.location = "index.jsp";
        }
    </script>
</body>
</html>

修改index.jsp

在跳转的同传username的原因【使TeaInitModifyServlet可以拿到账号到数据库查询到改账号的老师信息】

    <%if("teacher".equals(role)){%>
        <a href="TeaInitModifyServlet?username=<%=username%>">修改信息</a>
        <a href="#">查看所有学生</a>
    <%}%>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS APP如何扩展应用功能?

前言 服务模块属于一个应用里面可以拓展的地方&#xff0c;三方服务或者新增加的服务全部可以放进来&#xff0c;这里用的核心组件就是Grid组件 一般的步骤 编写一个Gird的子组件item&#xff0c;这个item一般有图标和文字按照上下进行排列编写一个Grid的组件单元&#xff0c…

【优秀python大屏案例】基于python flask的前程无忧大数据岗位分析可视化大屏设计与实现

随着大数据和人工智能技术的迅猛发展&#xff0c;数据分析和可视化在各个行业中的应用越来越广泛。特别是在招聘领域&#xff0c;大数据分析不仅能够帮助企业更好地了解市场需求&#xff0c;还能为求职者提供科学的职业规划建议。本文探讨了基于Python Flask框架的前程无忧大数…

高效抓取网页模板:Go 1.19站点模板爬虫实战指南

基于Go 1.19的站点模板爬虫的原理是通过发送HTTP请求获取网页内容&#xff0c;然后使用正则表达式或HTML解析库来提取其中的模板内容。这种爬虫可以应用于以下几个方面&#xff1a; 数据抓取&#xff1a;通过爬取站点的模板内容&#xff0c;可以获取所需的数据&#xff0c;例如…

智谱AI张帆:大模型时代构建企业竞争力的四个维度

大模型并不是简单的对话&#xff0c;它润物细无声地贯穿整个服务体系。 7月27日&#xff0c;由《中国企业家》杂志社主办的2024&#xff08;第二十四届&#xff09;中国企业未来之星年会在上海举行。在“前沿微课”环节&#xff0c;智谱AI COO张帆进行了名为“大模型的企业级应…

RCE(远程代码执行漏洞)原理及漏洞利用

作用 RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 原理 远程系统命令执行 一般出现这种漏洞&#xff0c;是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入…

揭秘循环购模式:消费即收益

大家好&#xff0c;我是你们的电商策略顾问吴军。今天&#xff0c;我将带大家深入探索一种别开生面的商业模式——循环购模式。这种模式究竟有何魅力&#xff0c;能让消费者在享受购物乐趣的同时&#xff0c;还能获得额外的收益&#xff1f;更有趣的是&#xff0c;一些商家通过…

精准防控,高效管理:AI智能分析网关V4区域未停留检测算法的介绍及应用

一、区域未停留AI检测算法概述 随着人工智能和计算机视觉技术的飞速发展&#xff0c;区域未停留AI检测算法作为一种重要的视频分析技术&#xff0c;逐渐在各个领域得到广泛应用。该算法通过高效处理视频流数据&#xff0c;能够实时分析并判断目标对象是否在预设区域内有足够的…

influxdb 读取本地csv

官方链接 Query CSV data sources | Flux Documentation (influxdata.com) 我的是windows版本的OSS&#xff0c;如果直接把csv放在文件夹路径下读取会报错&#xff0c;官方也写了&#xff0c;这样是无法读取的 所以用了grafana开的web服务来实现读取csv的目的。 import &qu…

ts踩坑!在 Vue.js 中使用 Element Plus 组件库时,组件属性值所传类型需要与组件期望的类型一致。

在 Vue.js 中使用 Element Plus 组件库时&#xff0c;用el-tag组件举例&#xff0c; 属性值所传类型需要与组件期望的类型一致。 //当我们简单定义 举例&#xff1a;let tagType:string 或者&#xff1a; let tagType ref<string>()然后给el-tag的type属性赋值时&…

数据驱动决策:内容数据产品经理的成长与价值

数据驱动决策&#xff1a;内容数据产品经理的成长与价值 内容数据产品经理以数据为媒介&#xff0c;在用户与决策之间搭建桥梁&#xff0c;通过理解分析模型和用户决策路径&#xff0c;设计产品以促成更多决策产出&#xff0c;创造用户价值。例如&#xff0c;在衡量数据产品经理…

列表的单选和多选以及联动

<template><view><cu-custom bgColor"bg-gradual-white" :isBack"true"><block slot"backText">我的收藏</block></cu-custom><view class"top"><view>加油站</view><view …

地图下载软件与网站收藏(持续更新...)

慢慢记录总结学习工作中用到的有关地图下载的工具和网站 工具 图新地球 中科图新旗下的gis软件&#xff0c;官方地址&#xff1a;传送门 中文软件直接用就行&#xff0c;可以自行配置相关图源&#xff0c;有需要的化可以私信我。 全能地图下载器 Global Mapper Global Ma…

龙腾码支付系统三网免挂个人免签支付兼容易支付带详细教程

一、系统简介 码支付是基于ThinkPhp5.0 FastAdmin 开发的一套新型聚合收款、聚合支付系统&#xff0c;是一款专业的聚合免签收款系统,无需对接其余平台,个码就可收款,灰常的方便快捷,集成实现三网免挂功能,无需挂繁琐的监控软件就可实现回调,更便捷的监控方式,更优的产品质量,更…

苹果电脑上可以使用的快捷回复工具有哪些

很多客服都用苹果电脑回复客户提问&#xff0c;那么苹果电脑上都有哪些工具&#xff0c;可以实现快捷回复呢 摘要 目前&#xff0c;很多客服都用苹果电脑回复客户提问&#xff0c;快捷回复软件就是客服的刚需。众所周知&#xff0c;苹果电脑MAC系统的应用不如Windows系统多&am…

计算机毕业设计选题推荐-课程教学辅助系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Intellij IDEA--选择圆括号(小括号)的内容的插件

原文网址&#xff1a;Intellij IDEA--选择圆括号(小括号)的内容的插件-CSDN博客 简介 本文介绍Intellij IDEA选择圆括号(小括号)内的内容的插件。本插件支持这些括号&#xff1a; "<>", "[]", "{}", "()"。 Java星球&#xf…

[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/140866513 出自【进步*于辰的博客】 文章目录 1、rownum1.1 介绍1.2 示例 2、nextval、currval2…

【读点论文】自然场景文本检测与识别的深度学习方法,分门别类的给定义做调研,对初入门者非常友好的工作,文本检测,识别,端到端识别

自然场景文本检测与识别的深度学习方法 abstract 许多自然场景图像中都包含丰富的文本,它们对于场景理解有着重要的作用。随着移动互联网技术的飞速发展,许多新的应用场景都需要利用这些文本信息,例如招牌识别和自动驾驶等。因此,自然场景文本的分析与处理也越来越成为计算机…

Spring相关框架整合Drools

7.1 Spring简单整合Drools a.第一步&#xff1a;创建maven工程drools_spring并配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLS…

【持续集成_02课_Jenkins+Git+Gogs综合应用】

https://www.cnblogs.com/xfeiyun/p/17510472.html Jenkins部署及持续集成——傻瓜式教程-腾讯云开发者社区-腾讯云 一、Jenkins安装 Jenkins由Java语言编写而成&#xff0c;安装包即是一个war包。因此&#xff0c;Jenkins的运行启动依赖于Java环境&#xff0c;同时&#xf…