当前位置: 首页 > news >正文

【JavaWeb项目】——外卖订餐系统之登入、登入后显示餐品信息、用户注册、注销部分

🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大二学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQL,Java基础,Rust】

🎈热门专栏:🎊【Python,Javaweb,Vue框架】

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

🎯Tomcat配置

        不会使用Tomcat的小伙伴可以去看

搭建第一个Web服务器(在eclipse或idea上部署Tomcat服务器)_eclipse创建一个web项目-CSDN博客

😎Server部分

将URL部分配置为:

http://localhost:8080/webdingcan/login.jsp

😎Deployment部分

🎯登入部分

😎前端页面login.jsp部分

🎈代码


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>登入注册界面</title><%--    引入Bootstrap--%><link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><link rel="stylesheet" href="css/login.css">
</head>
<body>
<form action="showFoodServlet" method="post" role="form" class="form-horizontal"><div class="first"><div class="one">优选外卖订餐系统</div><div class="form-group"><label for="firstname" class="col-sm-2 control-label">账户名:</label><div class="col-sm-8"><input id="firstname" type="text" class="form-control" name="name" placeholder="请输入用户名"></div></div><div class="form-group"><label for="lastname" class="col-sm-2 control-label">密码:</label><div class="col-sm-8"><input class="form-control" id="lastname" type="password" name="password" placeholder="请输入密码"></div></div><div class="chose"><input type="radio" name="identity" value="0" checked><label>用户</label><input type="radio" name="identity" value="1"><label>商家</label></div><div class="two"><button type="submit" class="btn">登入</button></div><div class="three"><a href="u1/signUer.jsp" role="button" class="btn">用户注册</a></div><div class="four"><label>${msg}</label></div></div>
</form>
</body>
</html>

🎈解析

        这是一个使用JSP和Bootstrap框架创建的登录注册界面:

  1. 页面头部声明了页面的内容类型为"text/html;charset=UTF-8",表示页面使用的是HTML格式,并且字符编码为UTF-8。同时,使用了Java语言编写JSP代码。

  2. 引入了JSTL标签库,用于在JSP页面中进行条件判断和循环等操作。

  3. 页面主体部分包含了一个表单,表单的action属性设置为"showFoodServlet",表示提交表单后会向该URL发送请求。表单的method属性设置为"post",表示使用POST方法提交表单数据。

  4. 表单内部包含一个div元素,class属性设置为"first",表示这是整个登录注册界面的主体部分。

  5. 在"first" div内部,有一个标题显示为"优选外卖订餐系统"。

  6. 接下来是一个用户名输入框,label标签显示"账户名:",input标签的id属性设置为"firstname",type属性设置为"text",表示这是一个文本输入框。name属性设置为"name",表示提交表单时将该输入框的值作为名为"name"的参数传递。placeholder属性设置为"请输入用户名",表示输入框中的提示信息。

  7. 类似地,还有一个密码输入框,label标签显示"密码:",input标签的id属性设置为"lastname",type属性设置为"password",表示这是一个密码输入框。name属性设置为"password",表示提交表单时将该输入框的值作为名为"password"的参数传递。placeholder属性设置为"请输入密码",表示输入框中的提示信息。

  8. 接下来是一个单选按钮组,用于选择用户或商家身份。两个单选按钮分别设置了value属性为"0"和"1",表示不同的选项值。默认选中第一个单选按钮(用户)。

  9. 在单选按钮下方有一个提交按钮,button标签的type属性设置为"submit",表示点击该按钮会提交表单。按钮上的文字显示为"登入"。

  10. 在提交按钮下方有一个链接,a标签的href属性设置为"u1/signUer.jsp",表示点击该链接会跳转到指定的URL。链接上的文字显示为"用户注册"。

  11. 最后,有一个label标签用于显示错误信息,内容为"${msg}",其中msg是一个变量,可能在后端代码中设置。

        总体来说,这个登录注册界面提供了基本的表单验证功能,用户可以输入用户名和密码,选择身份,然后点击登入按钮进行登录。如果登录失败,页面上会显示错误信息。同时,还提供了一个用户注册的链接。

🎈效果

😎后端处理过滤器部分

🎈代码

package com.dingcan.controller;import com.dingcan.service.Impl.UserServiceImpl;
import com.dingcan.service.UserService;
import com.dingcan.service.Impl.ShangServiceImpl;
import com.dingcan.service.ShangService;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(filterName = "FoodFilterServlet",value = "/showFoodServlet")
public class FoodFilterServlet implements Filter {public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req=(HttpServletRequest) servletRequest;HttpServletResponse resp=(HttpServletResponse) servletResponse;String name = req.getParameter("name");String password = req.getParameter("password");String identity = null;if (req.getSession().getAttribute("identity")!=null){identity=(String) req.getSession().getAttribute("identity");}else {identity=req.getParameter("identity");req.getSession().setAttribute("identity",identity);}if(identity.equals("0")){//判断session中是否为用户if ( req.getSession().getAttribute("uid1")!=null) {resp.sendRedirect("ushowFoodServlet");return;}//创建用户对象UserService userService=new UserServiceImpl();int uid=userService.FindUid(name,password);if (uid!=0){req.getSession().setAttribute("uid1",uid);resp.sendRedirect("ushowFoodServlet");}else {req.getSession().setAttribute("uid1", null);req.getSession().setAttribute("identity", null);//如果登入失败String msg = "账户名或密码错误,请重新输入";req.setAttribute("msg", msg);req.getRequestDispatcher("login.jsp").forward(req, resp);}}else if(identity.equals("1")){//创建商家对象ShangService shangService=new ShangServiceImpl();//判断session中是否为商家if ( req.getSession().getAttribute("sid1")!=null) {filterChain.doFilter(req, resp);return;}int sid=shangService.FindSid(name,password);if(sid!=0){// 登录成功,将用户信息存储在session中req.getSession().setAttribute("sid1",sid);filterChain.doFilter(req, resp);}else{// 如果登录失败,也将账户信息设置为nullreq.getSession().setAttribute("sid1", null);req.getSession().setAttribute("identity", null);String msg = "账户名或密码错误,请重新输入";req.setAttribute("msg", msg);req.getRequestDispatcher("login.jsp").forward(req, resp);}}}public void destroy() {Filter.super.destroy();}
}

🎈解析

        这段代码是一个Java Web应用程序中的过滤器(Filter),用于处理用户登录和商家登录的验证。过滤器的作用是在请求到达目标Servlet之前,对请求进行预处理,例如验证用户身份、过滤敏感词汇等。在这个例子中,过滤器主要用于验证用户和商家的登录信息。

  1. 导入相关类:导入了UserServiceImpl、ShangServiceImpl、UserService、ShangService等服务类,以及javax.servlet包下的Filter、FilterChain、ServletRequest、ServletResponse等接口和类。

  2. 定义FoodFilterServlet类:实现了Filter接口,并使用@WebFilter注解指定了过滤器的名称和要过滤的URL路径(/showFoodServlet)。

  3. init方法:初始化过滤器时调用的方法,这里只是简单地调用了父类的init方法。

  4. doFilter方法:主要的逻辑处理方法,当有请求到达时会被调用。首先获取HttpServletRequest和HttpServletResponse对象,然后从请求中获取用户名、密码和身份信息。接着根据身份信息判断是用户还是商家,并进行相应的处理。

    • 如果身份为"0"(用户):检查session中是否已经有用户信息,如果有则重定向到用户展示食品的页面;如果没有,则创建UserService对象,调用FindUid方法查找用户ID,如果找到则将用户ID存入session并重定向到用户展示食品的页面,否则清空session中的用户信息并将错误信息设置到request域中,最后转发到登录页面。

    • 如果身份为"1"(商家):检查session中是否已经有商家信息,如果有则继续执行后续操作;如果没有,则创建ShangService对象,调用FindSid方法查找商家ID,如果找到则将商家ID存入session并继续执行后续操作,否则清空session中的商家信息并将错误信息设置到request域中,最后转发到登录页面。

  5. destroy方法:销毁过滤器时调用的方法,这里只是简单地调用了父类的destroy方法。

        总结:这个过滤器主要用于处理用户和商家登录的验证,根据登录信息的不同,将用户或商家的信息存储在session中,并根据验证结果进行相应的跳转。

🎯登入后显示餐品信息部分

😎商家登入后显示

🎈后端请求ShowFoodServlet部分

✨代码
package com.dingcan.controller;import cn.hutool.db.Entity;
import com.dingcan.service.FoodService;
import com.dingcan.service.Impl.FoodServiceImpl;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;@WebServlet(name = "ShowFoodServlet", value = "/showFoodServlet")
public class ShowFoodServlet extends HttpServlet {FoodService foodService=new FoodServiceImpl();protected void service(HttpServletRequest req, HttpServletResponse resp) throws javax.servlet.ServletException, IOException {//获取session中的sidint sid1=(int)req.getSession().getAttribute("sid1");String sql="select * from food,shangjia,dianpu where food.`fdianid`=dianpu.`did` and dianpu.`did`=shangjia.`sdianid` and sid="+sid1;List<Entity> list=foodService.findFood(sql);//将list放入request域中req.setAttribute("list",list);req.getRequestDispatcher("/s1/showFood1.jsp").forward(req,resp);}}
✨解析

        这段代码是一个Java Servlet,用于处理HTTP请求并返回HTTP响应。它主要用于展示特定商家的餐品信息。以下是对代码的详细解析:

  1. package com.dingcan.controller;:这是代码所在的包名,表示该类属于com.dingcan.controller包。

  2. import cn.hutool.db.Entity;:导入了cn.hutool.db.Entity类,这是一个用于操作数据库实体的工具类。

  3. import com.dingcan.service.FoodService;:导入了FoodService接口,这是一个用于处理食品相关业务逻辑的服务接口。

  4. import com.dingcan.service.Impl.FoodServiceImpl;:导入了FoodService接口的实现类FoodServiceImpl。

  5. import javax.servlet.annotation.WebServlet;:导入了WebServlet注解,用于声明Servlet的配置信息。

  6. import javax.servlet.http.HttpServlet;:导入了HttpServlet类,这是Servlet的基本类。

  7. import javax.servlet.http.HttpServletRequest;:导入了HttpServletRequest类,用于处理客户端发送的请求。

  8. import javax.servlet.http.HttpServletResponse;:导入了HttpServletResponse类,用于生成服务器端的响应。

  9. import java.io.IOException;:导入了IOException类,用于处理输入输出异常。

  10. @WebServlet(name = "ShowFoodServlet", value = "/showFoodServlet"):使用WebServlet注解声明了一个名为ShowFoodServlet的Servlet,其访问路径为/showFoodServlet。

  11. public class ShowFoodServlet extends HttpServlet {:定义了一个名为ShowFoodServlet的类,继承自HttpServlet。

  12. FoodService foodService=new FoodServiceImpl();:创建了一个FoodServiceImpl实例,并将其赋值给foodService变量。

  13. protected void service(HttpServletRequest req, HttpServletResponse resp) throws javax.servlet.ServletException, IOException {:重写了HttpServlet类的service方法,用于处理客户端的请求。该方法接收两个参数:HttpServletRequest对象(req)和HttpServletResponse对象(resp)。

  14. int sid1=(int)req.getSession().getAttribute("sid1");:从session中获取名为"sid1"的属性值,并将其转换为整数类型。

  15. String sql="select * from food,shangjia,dianpu where food.fdianid=dianpu.did and dianpu.did=shangjia.sdianid and sid="+sid1;:构造一个SQL查询语句,用于从数据库中查询与指定商家相关的食品信息。

  16. List<Entity> list=foodService.findFood(sql);:调用foodService的findFood方法,传入SQL查询语句,执行查询并将结果存储在list变量中。

  17. req.setAttribute("list",list);:将查询到的食品信息列表存入request域中,键名为"list"。

  18. req.getRequestDispatcher("/s1/showFood1.jsp").forward(req,resp);:通过RequestDispatcher将请求转发到/s1/showFood1.jsp页面,并将request和response对象传递给该页面。

        总结:这段代码定义了一个名为ShowFoodServlet的Servlet,用于处理客户端发起的请求,查询特定商家的食品信息,并将查询结果展示在/s1/showFood1.jsp页面上。

🎈前端页面showFood1.jsp部分

✨代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>展示商家登入的信息</title><!-- 引入 Bootstrap --><link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><link href="css/sShow.css" rel="stylesheet">
</head>
<body>
<div class="first"><div class="one"><div class="two"><img src="image/four.jpg" alt="LOGO"><label>优质外卖订餐系统</label></div><div class="three"><a href="exitServlet" class="btn">注销</a></div></div><div class="btn-group-vertical"><a href="showFoodServlet" class="btn" role="button">餐品展示</a><a href="s1/addFood.jsp" class="btn" role="button">添加餐品</a><a href="hotFoodServlet" class="btn" role="button">热门餐品</a><a href="showCarServlet" class="btn" role="button">出售车</a></div><div class="four"><table  class="table table-striped table-bordered table-condensed"><thead><tr class="danger"><td>餐品名称</td><td>购买人数</td><td>价格</td><td>状态</td><td>操作</td></tr></thead><tbody><c:forEach items="${list}" var="food"><tr class="success"><td>${food.fname}</td><td>${food.fcount}</td><td>${food.fprice}</td><td>${food.fstate == 1 ? "销售中" : "下架"}</td><td><a href="findFoodServlet?fid=${food.fid}" class="btn btn-primary">修改</a></td></tr></c:forEach></tbody></table></div>
</div>
</body>
</html>
✨解析

        这段代码是一个使用JSP(JavaServer Pages)编写的Web页面,它使用了HTML和Bootstrap框架来构建用户界面,并使用JSTL(JavaServer Pages Standard Tag Library)标签来动态显示数据。下面是对代码的详细解析:

  1. 页面指令:

    • <%@ page contentType="text/html;charset=UTF-8" language="java" %>: 这行代码设置了页面的内容类型为HTML,字符集为UTF-8,并指定脚本语言为Java。
    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>: 这行代码引入了JSTL核心标签库,prefix="c"定义了标签前缀,后面使用JSTL标签时会用到。
  2. HTML结构:

    • <html>: 定义了页面的根元素。
    • <head>: 包含了页面的元数据,如标题和样式表链接。
    • <title>: 设置页面标题为“展示商家登入的信息”。
    • <link>: 引入了Bootstrap的CSS文件,用于页面样式,以及自定义的CSS文件sShow.css
  3. 页面内容:

    • <div class="first">: 定义了页面的主要内容区域。
    • <div class="one">: 包含了LOGO和标题。
      • <img src="image/four.jpg" alt="LOGO">: 显示LOGO图片。
      • <label>: 显示文本“优质外卖订餐系统”。
    • <div class="three">: 包含一个注销按钮,链接到exitServlet
    • <div class="btn-group-vertical">: 垂直排列的按钮组,包含餐品展示、添加餐品、热门餐品和出售车的链接。
  4. 导航链接:

    • <a href="..." class="btn" role="button">: 创建Bootstrap样式的按钮,链接到不同的Servlet处理不同的业务逻辑。
  5. 表格展示:

    • <table class="table table-striped table-bordered table-condensed">: 创建一个带有Bootstrap样式的表格,用于展示数据。
    • <thead> 和 <tr class="danger">: 定义表格的头部,包含列标题。
    • <tbody>: 表格的主体部分,用于展示具体的数据。
  6. JSTL标签使用:

    • <c:forEach items="${list}" var="food">: 这是一个JSTL循环标签,用于遍历从后端传递到页面的list集合,每次循环将当前元素赋值给变量food
    • <tr class="success">: 表格的一行,展示了餐品的名称、购买人数、价格、状态和操作按钮。
    • <c:forEach>标签内部的${food.fname}${food.fcount}${food.fprice}, 和${food.fstate}是表达式,用于访问food对象的属性。
  7. 条件表达式:

    • ${food.fstate == 1 ? "销售中" : "下架"}: 这是一个条件表达式,根据food.fstate的值显示“销售中”或“下架”。
  8. 操作链接:

    • <a href="findFoodServlet?fid=${food.fid}" class="btn btn-primary">修改</a>: 创建一个按钮链接,链接到findFoodServlet,传递food.fid作为参数,用于修改餐品信息。
  9. 注销链接:

    • <a href="exitServlet" class="btn">注销</a>: 创建一个按钮链接,用于注销当前用户会话。

        整个页面是一个商家登录后的管理系统界面,可以展示餐品信息,提供餐品管理功能,如查看、添加、修改等。使用JSTL标签可以方便地将Java代码和页面内容分离,提高代码的可维护性。

✨效果

😎用户登入后显示

🎈后端处理 UshowFoodServlet部分

✨代码
package com.dingcan.controller;import cn.hutool.db.Entity;
import com.dingcan.service.FoodService;
import com.dingcan.service.Impl.FoodServiceImpl;
import com.dingcan.service.Impl.UserServiceImpl;
import com.dingcan.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;
@WebServlet(name = "UshowFoodServlet", value = "/ushowFoodServlet")
public class UshowFoodServlet extends HttpServlet {FoodService foodService=new FoodServiceImpl();UserService userServic=new UserServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//得到标志参数(用用于判断执行,哪个sql语句)String biaozhi="0";biaozhi=req.getParameter("c");if (biaozhi==null)biaozhi="0";String sql=userServic.FindSql(biaozhi);List<Entity> list=foodService.findFood(sql);req.setAttribute("list",list);req.getRequestDispatcher("/u1/showFood2.jsp").forward(req,resp);}
}
✨解析

        用于处理HTTP请求并与后端服务进行交互:

  1. 包和导入:

    • package com.dingcan.controller;: 声明了这个类属于com.dingcan.controller包。
    • 导入了一些必要的类,包括cn.hutool.db.Entity用于数据库操作,com.dingcan.service.*相关的服务类。
  2. @WebServlet注解:

    • @WebServlet(name = "UshowFoodServlet", value = "/ushowFoodServlet"): 这个注解用于注册这个Servlet,定义了它的名称和URL映射。当访问/ushowFoodServlet路径时,这个Servlet会被调用。
  3. 类定义:

    • public class UshowFoodServlet extends HttpServlet: 定义了一个名为UshowFoodServlet的类,它继承自HttpServlet
  4. 成员变量:

    • FoodService foodService = new FoodServiceImpl();: 创建了FoodService接口的实现类FoodServiceImpl的实例。
    • UserService userServic = new UserServiceImpl();: 创建了UserService接口的实现类UserServiceImpl的实例。
  5. service方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的service方法,用于处理客户端的请求。
    • String biaozhi = "0";: 定义了一个字符串变量biaozhi并初始化为"0",用作标志参数。
    • biaozhi = req.getParameter("c");: 从请求中获取名为c的参数,如果请求中没有这个参数,biaozhi将保持默认值"0"
  6. 获取SQL语句:

    • String sql = userServic.FindSql(biaozhi);: 使用UserServiceFindSql方法,根据biaozhi的值获取相应的SQL语句。
  7. 查询数据:

    • List<Entity> list = foodService.findFood(sql);: 使用FoodServicefindFood方法执行SQL查询,并将结果存储在list中。
  8. 设置请求属性:

    • req.setAttribute("list", list);: 将查询结果list设置为请求属性,这样就可以在JSP页面中通过$ {list}访问这些数据。
  9. 请求转发:

    • req.getRequestDispatcher("/u1/showFood2.jsp").forward(req, resp);: 将请求转发到/u1/showFood2.jsp页面,同时携带了请求属性。
  10. 异常处理:

    • 方法声明中包含了throws ServletException, IOException,表示这个方法可能会抛出ServletExceptionIOException异常,这些异常通常与HTTP请求和响应的处理有关。

        总结来说,这个Servlet的作用是根据请求中的参数获取相应的SQL语句,执行数据库查询,并将查询结果转发到JSP页面进行展示。这种模式是MVC(Model-View-Controller)架构中控制器层的典型应用。

🎈前端展示showFood2.jsp部分

✨代码
<%--Created by IntelliJ IDEA.User: LenovoDate: 20/6/2024Time: 下午3:40To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>展示用户登入的信息</title><!-- 引入 Bootstrap --><link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><link href="css/uShow.css" rel="stylesheet">
</head>
<body>
<div class="first"><div class="one"><div class="two"><img src="image/four.jpg" alt="LOGO"><label>优质外卖订餐系统</label></div><div class="three"><a href="exitServlet" class="btn">注销</a></div></div><div class="btn-group-vertical"><ul class="menuOne"><li><a href="ushowFoodServlet?c=1" class="btn btn" role="button">老王火锅店</a><ul class="menuTwo"><li><a href="ushowFoodServlet?c=2" class="btn" role="button">肉类</a></li><li><a href="ushowFoodServlet?c=3" class="btn" role="button">菜类</a></li><li><a href="ushowFoodServlet?c=4" class="btn" role="button">其他</a></li></ul></li><li><a href="ushowFoodServlet?c=5" class="btn" role="button">精品零食店</a><ul class="menuTwo"><li><a href="ushowFoodServlet?c=6" class="btn" role="button">辣食</a></li><li><a href="ushowFoodServlet?c=7" class="btn" role="button">甜食</a></li><li><a href="ushowFoodServlet?c=8" class="btn" role="button">其他</a></li></ul></li><li><a href="ushowCarServlet" class="btn" role="button">我的购物车</a><ul class="menuTwo"></ul></li></ul></div><div class="four"><table  class="table table-striped table-bordered table-condensed"><thead><tr  class="warning"><td>餐品名称</td><td>价格</td><td>操作</td></tr></thead><tbody><c:forEach items="${list}" var="food"><tr  class="danger"><td>${food.fname}</td><td>${food.fprice}</td><td><a href="addCarServlet?fid=${food.fid}&fname=${food.fname}&fdianid=${food.fdianid}&fprice=${food.fprice}" class="btn btn-primary">购买</a></td></tr></c:forEach></tbody></table></div>
</div>
<script src="js/ucaidan.js"></script>
</body>
</html>
✨解析

        这段代码是一个JSP页面,用于展示用户登录后的信息,并通过层级菜单和表格显示餐品数据。以下是对代码的详细解析:

  1. JSP注释:

    • 页面顶部的注释是IntelliJ IDEA自动生成的,提供了创建者、日期和时间信息。
  2. 页面指令:

    • <%@ page contentType="text/html;charset=UTF-8" language="java" %>: 设置页面的MIME类型为HTML,字符集为UTF-8,脚本语言为Java。
    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>: 引入JSTL核心标签库,使用c作为前缀。
  3. HTML结构:

    • <html>: 页面的根元素。
    • <head>: 包含页面的元数据,如标题和样式表链接。
    • <title>: 设置页面标题为“展示用户登入的信息”。
    • <link>: 引入Bootstrap的CSS文件和自定义的CSS文件uShow.css
  4. 页面内容:

    • <div class="first">: 包含整个页面的主要内容。
    • <div class="one">: 包含LOGO和系统名称。
    • <div class="two">: 包含LOGO图片和系统名称标签。
    • <div class="three">: 包含注销按钮,链接到exitServlet
  5. 导航菜单:

    • <div class="btn-group-vertical">: 垂直排列的按钮组,包含不同商家和分类的链接。
    • <ul class="menuOne"> 和 <ul class="menuTwo">: 使用列表来创建层级菜单结构。
  6. 层级菜单:

    • 主菜单项链接到ushowFoodServlet,根据不同的参数c显示不同商家的餐品。
    • 子菜单项进一步细分了餐品种类。
  7. 表格展示:

    • <table>: 使用Bootstrap样式的表格,展示用户的餐品信息。
    • <thead>: 表格的头部,包含列标题:餐品名称、价格和操作。
    • <tbody>: 表格的主体,使用JSTL的<c:forEach>标签循环遍历list集合。
  8. JSTL标签:

    • <c:forEach items="${list}" var="food">: 用于遍历作为请求属性传递到页面的list集合。
  9. 表格行:

    • <tr>: 表格的一行,用于显示单个餐品的信息。
    • <td>: 表格单元格,显示餐品的名称(food.fname)和价格(food.fprice)。
  10. 购买操作:

    • <a href="addCarServlet?...": 在操作列中,创建一个链接到addCarServlet的按钮,用于将选中的餐品添加到购物车。链接包含了餐品的ID、名称、商家ID和价格作为查询参数。
  11. 页面底部:

    • <script src="js/ucaidan.js"></script>: 引入JavaScript文件,可能用于页面的动态交互或效果。
  12. Bootstrap类:

    • 页面使用了多个Bootstrap类(如btnbtn-primarytable-stripedtable-borderedtable-condensedwarningdanger)来增强页面的样式和响应性。

        这个JSP页面是一个用户登录后的管理系统界面,可以展示不同商家的餐品信息,并提供购买功能。页面通过使用JSTL标签动态展示后端传递的数据,并通过Bootstrap框架增强了用户界面的友好性和交互性。

✨效果

 🎯用户注册部分

😎前端页面signUer.jsp部分

🎈代码

<%--Created by IntelliJ IDEA.User: LenovoDate: 21/6/2024Time: 下午1:43To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 引入Bootstrap --%>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<html>
<head><title>用户注册界面</title><link href="../css/sign.css" rel="stylesheet" type="text/css"><script type="text/javascript" src="../js/sign.js"></script>
</head>
<body>
<form name="registerForm" action="${pageContext.request.contextPath}/signUserServlet" onsubmit="return validateForm()"><div class="one"><div class="first">优选外卖订餐系统</div><div class="form-group"><label class="col-sm-5 control-label">账户名:</label><div class="col-sm-12"><input class="form-control" type="text" name="username" placeholder="请输入账户名"></div></div><div class="form-group"><label class="col-sm-5 control-label">密码:</label><div class="col-sm-12"><input class="form-control" type="password" name="password1" placeholder="请输入密码"></div></div><div class="form-group"><label class="col-sm-5 control-label">重复密码:</label><div class="col-sm-12"><input class="form-control" type="password" name="password2" placeholder="请再次输入密码"></div></div><div class="left"><button type="submit" class="btn btn-success btn-lg">注册</button></div><div class="right"><button type="reset" class="btn btn-danger btn-lg">重置</button></div></div>
</form>
</body>
</html>

🎈解析

        这段代码是一个使用HTML和Bootstrap框架构建的用户注册界面的JSP页面。以下是对代码的详细解析:

  1. JSP注释:

    • 页面顶部的注释由IntelliJ IDEA自动生成,提供了创建者、日期和时间。
  2. 页面指令:

    • <%@ page contentType="text/html;charset=UTF-8" language="java" %>: 设置页面的MIME类型为HTML,字符集为UTF-8,脚本语言为Java。
  3. Bootstrap链接:

    • <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">: 引入Bootstrap的CSS文件,用于页面样式。
  4. HTML结构:

    • <html>: 根元素。
    • <head>: 包含页面的元数据,如标题和样式链接。
    • <title>: 设置页面标题为“用户注册界面”。
    • <link href="../css/sign.css" rel="stylesheet" type="text/css">: 引入自定义的CSS样式文件。
  5. JavaScript脚本:

    • <script type="text/javascript" src="../js/sign.js"></script>: 引入自定义的JavaScript脚本文件,可能包含表单验证逻辑。
  6. 表单:

    • <form name="registerForm" action="${pageContext.request.contextPath}/signUserServlet" onsubmit="return validateForm()">: 创建一个表单,用于提交用户注册信息。
      • action属性设置表单提交的URL,使用了JSP表达式${pageContext.request.contextPath}来动态设置上下文路径。
      • onsubmit="return validateForm()": 提交表单前调用validateForm JavaScript函数进行验证。
  7. 表单控件:

    • 使用divform-group类创建表单控件的布局。
    • <label>: 表示表单控件的说明文字。
    • <input>: 创建输入字段,用于输入账户名、密码和重复密码。type="text"type="password"分别用于文本输入和密码输入。
  8. 按钮:

    • <button type="submit" class="btn btn-success btn-lg">注册</button>: 创建提交按钮,使用Bootstrap的按钮样式。
    • <button type="reset" class="btn btn-danger btn-lg">重置</button>: 创建重置按钮,用于清空表单输入。
  9. Bootstrap类:

    • 页面使用了Bootstrap的类(如form-groupcol-sm-5col-sm-12control-labelform-controlbtnbtn-successbtn-lgbtn-danger)来增强表单的布局和样式。
  10. 表单验证:

    • 表单的onsubmit事件调用了validateForm函数,这可能是在sign.js脚本中定义的,用于在提交表单前进行前端验证。

        这个JSP页面提供了一个用户注册的表单,包括账户名和密码的输入,并通过Bootstrap框架增强了用户界面的友好性和响应性。表单提交时会进行前端验证,并最终发送到后端的signUserServlet进行处理。

🎈效果  

😎后端处理SignUserServlet部分

🎈代码

package com.dingcan.controller;
import com.dingcan.service.Impl.UserServiceImpl;
import com.dingcan.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;@WebServlet(name = "SignUserServlet", value = "/signUserServlet")
public class SignUserServlet extends HttpServlet {UserService userService =new UserServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String uname = req.getParameter("username");String password = req.getParameter("password1");if (userService.addUser(uname,password)) {req.setAttribute("msg", "注册成功,请登入");req.getRequestDispatcher("login.jsp").forward(req, resp);}elseresp.sendRedirect("fail.jsp");}
}

🎈解析

        这段Java代码是一个Servlet控制器,用于处理用户注册的请求。以下是对代码的详细解析:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于com.dingcan.controller包。
  2. 导入:

    • 导入了相关的类,包括com.dingcan.service.Impl.UserServiceImplcom.dingcan.service.UserService
  3. @WebServlet注解:

    • @WebServlet(name = "SignUserServlet", value = "/signUserServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问/signUserServlet路径时,这个Servlet会被调用。
  4. 类定义:

    • public class SignUserServlet extends HttpServlet: 定义了一个名为SignUserServlet的类,它继承自HttpServlet
  5. 成员变量:

    • UserService userService = new UserServiceImpl();: 创建了UserService接口的实现类UserServiceImpl的实例。
  6. service方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的service方法,用于处理客户端的请求。
  7. 获取请求参数:

    • String uname = req.getParameter("username");: 从请求中获取username参数。
    • String password = req.getParameter("password1");: 从请求中获取password1参数。
  8. 注册用户:

    • if (userService.addUser(uname, password)): 使用userServiceaddUser方法尝试添加用户。如果用户添加成功,返回true
  9. 请求转发:

    • req.setAttribute("msg", "注册成功,请登入");: 设置一个消息属性,提示用户注册成功。
    • req.getRequestDispatcher("login.jsp").forward(req, resp);: 将请求转发到login.jsp页面,携带请求属性。
  10. 重定向:

    • else resp.sendRedirect("fail.jsp");: 如果用户添加失败(例如,用户名已存在),则重定向到fail.jsp页面。
  11. 异常处理:

    • 方法声明中包含了throws ServletException, IOException,表示这个方法可能会抛出ServletExceptionIOException异常。

        总结来说,这个SignUserServlet的作用是接收用户提交的注册信息,通过UserService的实现类UserServiceImpl添加用户,根据添加结果决定是转发到登录页面还是重定向到失败页面。这种模式是MVC(Model-View-Controller)架构中控制器层的典型应用。

🎯注销部分

😎前端页面展示

🎈代码

<div class="first"><div class="one"><div class="two"><img src="image/four.jpg" alt="LOGO"><label>优质外卖订餐系统</label></div><div class="three"><a href="exitServlet" class="btn">注销</a></div></div>

🎈解析

        这段HTML代码是页面布局的一部分,通常位于页面的顶部,作为导航栏或页眉。它使用了CSS类来控制布局和样式:

  1. <div class="first">: 这是最外层的div元素,它可能被用来作为整个头部或导航区域的容器。

  2. <div class="one">: 这个div元素可能是用来进一步组织内容,例如将LOGO和导航链接组合在一起。

  3. <div class="two">: 这个div元素包含了LOGO图片和系统名称,可能是页面的标识部分。

    • <img src="image/four.jpg" alt="LOGO">: 这是LOGO图片,使用src属性指定图片路径,alt属性提供了图片的替代文本。
    • <label>优质外卖订餐系统</label>: 这是一个文本标签,显示了系统名称。
  4. <div class="three">: 这个div元素包含一个注销链接,可能位于页面的右侧,提供给用户退出登录的功能。

    • <a href="exitServlet" class="btn">注销</a>: 这是一个超链接,当用户点击时,会向exitServlet发送请求,执行注销操作。class="btn"可能是在CSS中定义的,用来给按钮添加样式。
  5. CSS类:

    • .first.one.two.three: 这些类名在CSS文件中定义,用来控制这些div元素的布局、样式和行为。例如,它们可能控制元素的宽度、高度、背景颜色、边框、内边距、外边距等。
  6. 导航链接:

    • 这个部分的代码可能用于实现用户注销功能。在实际应用中,注销链接通常会在用户登录后才显示,或者根据用户的角色和权限动态显示。
  7. 图片和文本的组合:

    • LOGO图片和系统名称的组合是网站设计中的常见元素,用于增强品牌识别度和提供直观的导航提示。
  8. 响应式设计:

    • 由于使用了Bootstrap框架(从引入的Bootstrap CSS可以推断),这些元素很可能被设计为响应式,以适应不同设备的屏幕尺寸。

🎈效果

 😎后端处理ExitServlet部分

🎈代码

package com.dingcan.controller;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;
@WebServlet(name = "ExitServlet", value = "/exitServlet")
public class ExitServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getSession().setAttribute("uid1",null);req.getSession().setAttribute("identity",null);req.getSession().setAttribute("sid1",null);resp.sendRedirect("login.jsp");}
}

🎈解析

        这段Java代码定义了一个名为ExitServlet的Servlet类,它继承自HttpServlet。这个Servlet用于处理用户注销(退出登录)的请求:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于com.dingcan.controller包。
  2. @WebServlet注解:

    • @WebServlet(name = "ExitServlet", value = "/exitServlet"): 这个注解用于注册Servlet,定义了它的名称和URL映射。当用户访问/exitServlet路径时,这个Servlet会被调用。
  3. 类定义:

    • public class ExitServlet extends HttpServlet: 定义了一个名为ExitServlet的类,它继承自HttpServlet
  4. service方法:

    • @Override: 表示重写了父类HttpServletservice方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的service方法,用于处理客户端的请求。
  5. 注销逻辑:

    • req.getSession().setAttribute("uid1", null);: 从会话中移除属性uid1,这通常用于清除用户的ID信息。
    • req.getSession().setAttribute("identity", null);: 从会话中移除属性identity,这可能用于清除用户的身份或角色信息。
    • req.getSession().setAttribute("sid1", null);: 从会话中移除属性sid1,这可能用于清除与用户会话相关的其他信息。
  6. 重定向:

    • resp.sendRedirect("login.jsp");: 执行注销操作后,使用HttpServletResponsesendRedirect方法重定向到login.jsp页面。这将导致浏览器接收到一个重定向响应,并将用户导航到登录页面。
  7. 异常处理:

    • 方法声明中包含了throws ServletException, IOException,表示这个方法可能会抛出ServletExceptionIOException异常,这些异常通常与HTTP请求和响应的处理有关。

    ExitServlet的主要作用是在用户点击注销链接时清除会话中的用户信息,并将用户重定向到登录页面,从而完成注销过程。这是一种常见的Web应用程序安全实践,用于确保用户在注销后不再保持登录状态。

相关文章:

【JavaWeb项目】——外卖订餐系统之登入、登入后显示餐品信息、用户注册、注销部分

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

怎么保护电脑文件夹?文件夹保护方法大盘点

文件夹是管理电脑数据的重要工具&#xff0c;可以有效避免数据混乱。而为了避免文件夹数据泄露&#xff0c;我们需要严格保护文件夹。下面我们就来盘点一下文件夹的保护方法。 文件夹隐藏 隐藏文件夹是一种简单有效的保护方式&#xff0c;通过隐藏文件夹来避免其他人发现&…...

Temporal(时效)模式01

Andy Carlson, Sharon Estepp, Martin Fowler 著&#xff0c;透明 译 抽象 在面向对象设计中&#xff0c;我们不断使用“对象”&#xff08;object&#xff09;这个词。对象不仅仅用来表现真实世界中存在的物件&#xff0c;它们也被用来表现那些曾经存在但已经消失了的物件&…...

C语言 -- 动态内存管理

C语言 -- 动态内存管理 1. 为什么要有动态内存分配2. malloc 和 free2.1 malloc2.2 free 3. calloc 和 realloc3.1 calloc3.2 realloc 4. 常见的动态内存的错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动…...

docker 篇

简单描述下&#xff0c;有时候真的要熟练&#xff0c;否者上了生产真的不知所措。 背景&#xff1a;有个项目上线了&#xff0c;依赖的项目没有上线&#xff0c;因此需要紧急发布&#xff0c;发现&#xff1a;打包环境有问题&#xff0c;第一、架构不一致&#xff0c;第二、环…...

汽车、能源、烟草、电力行业洞见:TDengine 用户大会亮点荟萃

近年来&#xff0c;随着物联网、车联网、工业互联网等前沿技术的迅猛发展&#xff0c;全球数据量呈指数级增长。作为大数据的一个重要组成部分&#xff0c;时序数据因其在实时监控、预测分析和智能决策中的独特优势&#xff0c;正逐步成为数字化转型的关键要素。尤其在 AI 时代…...

从零开始编写一个Chrome插件:详细教程

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…...

photoshop学习笔记——选区3 快速选择工具

快速选择工具 W shift W 在3种快速选择工具之间切换 对象选择工具 photoshop CC中没有这个工具&#xff0c;利用AI&#xff0c;将款选中的对象快速的提取选区&#xff0c;测试了一下&#xff0c;选区制作的非常nice快速选择工具 跟磁性套索类似&#xff0c;自动识别颜色相似…...

Centos7下安装配置最新版本Jenkins

1、基础环境配置 1.1 服务器下载Jenkins安装包 下载地址&#xff1a;Download and deploy 下载命令&#xff1a;wget https://get.jenkins.io/war-stable/2.452.3/jenkins.war 1.2 服务器安装配置JDK Jenkins 是基于 Java 语言开发的&#xff0c;因此需要 Java 运行环境支…...

c++ 构造函数与析构函数

本文参考菜鸟教程&#xff0c;仅作笔记用。 构造函数 构造函数&#xff08;Constructor&#xff09;是一种特殊的方法&#xff0c;用于在创建对象时进行初始化操作。构造函数的名称与类的名称是完全相同的&#xff0c;并且不会返回任何类型&#xff0c;也不会返回 void。在面…...

Lc63---1859将句子排序(排序)---Java版(未写完)

1.题目描述 2.思路 &#xff08;1&#xff09;首先将句子按空格分割成若干单词。 &#xff08;2&#xff09;每个单词的最后一个字符是它的位置索引。我们可以通过这个索引将单词恢复到正确的位置。 &#xff08;3&#xff09;按照单词的索引顺序排序这些单词。 &#xff08;4…...

centos7-8/redhat7-8一键安装配置vsftp服务

1.脚本介绍 1.1.介绍&#xff1a; linux下一键安装及配置vsftpd服务 &#xff0c;通过执行install.sh脚本&#xff0c;脚本会根据参数区域的值执行安装和配置vsftp服务&#xff0c;安装后会创建一个默认ftp用户wangxf密码wangxf2023 1、支持自定义安装(更改脚本内参数值) 2、…...

7月24日JavaSE学习笔记

序列化版本控制 序列化&#xff1a;将内存对象转换成序列&#xff08;流&#xff09;的过程 反序列化&#xff1a;将对象序列读入程序&#xff0c;转换成对象的方式&#xff1b;反序列化的对象是一个新的对象。 serialVersionUID 是一个类的序列化版本号 private static fin…...

微信小程序教程008:事件绑定

文章目录 事件绑定1、什么是事件2、小程序中常用事件3、事件对象的属性列表4、target和currentTarget的区别5、bindtap的语法格式6、在事件处理函数中为data中的数据赋值7、事件传参数8、bind:input语法格式9、实现文本框和data之间的数据同步事件绑定 1、什么是事件 事件是渲…...

企业级-实现Nginx的静态文件服务器映射

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 开发人员往往会经常需要通过浏览器下载文件、图片或者PDF或者缩略图等&#xff0c;这时候我们可以根据…...

CTF Web SQL注入 10000字详解

这里写目录标题 涉及的数据库知识unionorder bydatabase()information_schemalimit--空格注释replaceinto outfilelikeGROUP BYHAVINGGROUP BY、HAVING、WHERE之间的关系regexp 原理信息收集操作系统数据库判断注入点注入点类型POST注入数字型注入字符型注入搜索型注入Insert/u…...

动态SLAM:如何判断一个特征是动态特征(对极几何)

文章目录 1.什么是极线、极点和极面2.如何判断其为动态点特征3.如何判断其为动态线特征 1.什么是极线、极点和极面 由图可知&#xff0c;C1,C2,X(X1,X2)组成了一个三角平面&#xff0c;这个三角所在的平面就是极面 在这个极平面中&#xff0c;和成像平面相交的线是极线&#xf…...

【C++】初识C++基础篇·一(命名空间,函数重载,缺省参数,引用);

文章目录 前言1.输入与输出输出输入cin和scanf的对比 2.命名空间2.1namespace存在的意义2.2namespace的使用3.缺省参数4.函数重载重载函数的调用规则 5.引用 前言 我们先通过一段简单的代码来拉开C的序幕&#xff1b; //text.cpp #include<iostream> #include<stdio…...

2024年道路运输安全员考试题库及答案

一、判断题 1.国家制订《中华人民共和国道路交通安全法》的目的是为了维护道路交通秩序&#xff0c;预防和减少交通事故&#xff0c;保护人身安全&#xff0c;保护公民、法人和其他组织的财产安全及其他合法权益&#xff0c;提高通行效率。 答案&#xff1a;正确 2.依据《中…...

Linux Vim教程(十二):语法高亮与代码折叠

目录 1. 语法高亮 1.1 启用语法高亮 1.2 设置配色方案 1.3 自定义语法高亮 2. 代码折叠 2.1 启用代码折叠 2.2 设置折叠方法 2.3 手动折叠 2.4 基于缩进的折叠 2.5 基于语法的折叠 3. 案例 3.1 配置文件 3.2 编辑Python文件 3.3 使用折叠功能 4. 高级使用技巧 …...

JavaScript(18)——事件类型,事件对象

事件类型 鼠标事件&#xff1a; click&#xff1a;鼠标点击 mouseenter&#xff1a;鼠标经过 mouseleave&#xff1a;鼠标离开 焦点事件&#xff1a; focus&#xff1a;获得焦点 blur&#xff1a;失去焦点 键盘事件&#xff1a; Keydown&#xff1a;键盘按下触发 Keyup&#…...

有效组织离散变量:指针数组在C语言中的应用

把离散变量组织起来&#xff0c;访问起来更加方便&#xff0c;无需一个个变量单独赋值。 如modbus读写reg&#xff0c; 把a\b\c\d实时变化分散的变量组织成一个数组reg&#xff0c;方便获取 相当于变量的内存地址池 int main() {int a 10, b 20, c 30, d 40;int i;int *re…...

qt 应用正在运行时,如何更新升级exe文件

在Qt应用正在运行时&#xff0c;直接替换同名的.exe文件可能会导致文件正在使用中的错误。为了安全地更新.exe文件&#xff0c;你可以采取以下步骤&#xff1a; 创建一个临时的.exe文件。 等待当前.exe文件的进程关闭。 删除原有的.exe文件。 将临时.exe文件重命名为原有的.…...

git的rebase 和 merge 的区别

rebase 和 merge 的区别 Merge&#xff08;合并&#xff09;和 Rebase&#xff08;变基&#xff09;是 Git 中两种常用的分支整合方式&#xff0c;它们有不同的工作原理和适用场景&#xff1a; Merge&#xff08;合并&#xff09;&#xff1a; ● Merge 操作将两个分支的不同提…...

django基于大数据的电影推荐系统-计算机毕业设计源码71246

目 录 摘 要 1 绪论 1.1 选题背景与意义 1.2研究现状 1.3研究内容 1.4 开发环境 1.5论文结构与章节安排 2 相关理论和技术 2.1 协同过滤算法 2.2 B/S体系结构介绍 2.3 Python爬虫技术 2.4 Django框架介绍 2.5 MySQL数据库 3 电影推荐系统系统分析 3.1 可行性分析…...

reverse_re3-入土为安的第十天

一个迷宫题 shirtf12发现flag字样 点进去发现迷宫 675 应该是3 * 15*15 即有三个迷宫 shifte提取 import numpy as np# 你的数据&#xff08;长度应为 225 的倍数&#xff09; dword_202020 [1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,3,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,…...

fastapi之一

文章目录 安装运行HTTP 请求方法示例 POSTMAN 检验GETPOSTPUTDELETE HTTP 状态码示例GETPOST 综合示例POSTGETPUTDELETE 总结 安装 pip install fastapi或者 pip install fastapi -i https://mirrors.aliyun.com/pypi/simple上面两种方法均可以&#xff0c;选择一个即可&…...

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…...

关于一个简单的顺序表代码

1.首先是头文件SeqList.h的代码&#xff1a; #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int SXBint; typedef struct SL {SXBint* a;int size;int capacity; }SLnode; //初始化 void SeqLsitInit(SLnode* ps); //尾插…...

【资料分享】2024第三届钉钉杯大学生大数据挑战赛B题思路解析+双语言代码

2024钉钉杯大学生大数据挑战赛&#xff0c;B题解题思路和双语言代码分享&#xff0c;资料预览&#xff1a;...

Typescript学习笔记(2.0)

ts编译选项 tsc app.ts -w 参数-w&#xff0c;就是对app.ts进行监视&#xff0c;每次该文件改变时就会自动编译 **:任意目录 *&#xff1a;任意文件 接口 接口用来定义一个类结构&#xff0c;用来定义一个类中应该包含哪些属性和方法&#xff0c;同时接口也可以当做类型…...

【IJHE】:微通道反应器中全氢二苄基甲苯脱氢产氢

Highlight 微通道反应器中全氢二苄基甲苯脱氢产氢两种不同反应器的比较&#xff1a;搅拌釜和连续微通道反应器连续微通道反应器是一种很有前途的脱氢技术 摘要: 本文对全氢二苄基甲苯作为液态有机氢载体从搅拌槽反应器转换为连续流微通道反应器进行脱氢进行了初步研究。与搅拌槽…...

Spring踩坑:抽象类作为父类,使用子类@Autowired属性进行填充,属性值为null

Spring踩坑&#xff1a;抽象类作为父类&#xff0c;使用子类Autowired属性进行填充&#xff0c;属性值为null Spring Boot中抽象类和依赖注入的最佳实践引言在抽象类中使用Autowired注解protected vs private修饰符低版本Spring Boot的注意事项 构造器中的依赖注入陷阱为什么不…...

C#网络连接:TCP/IP模式下的网络连接与同步

1&#xff0c;目的 为了测试局域网的消息同步&#xff0c;简单写了下TCP/IP模式的同步&#xff0c;参考这个帖子。 2&#xff0c;核心库部分 using System; using System.Net; using System.Net.Sockets; using System.Text;namespace Coldairarrow.Util.Sockets {/// <s…...

基于树莓派(Raspberry Pi) 的智能电表监测系统设计:集成 Home Assistant、SQLite 和 MQTT 协议

在全球对可持续发展和能源节约的关注日益加深的背景下&#xff0c;智能能源管理系统&#xff08;IEMS&#xff09;应运而生。该系统利用现代科技&#xff08;如物联网、云计算和大数据分析&#xff09;来优化能源使用&#xff0c;提高能效&#xff0c;降低能源成本。本文将详细…...

C语言程序设计(二)

四.找素数 素数&#xff1a;除了1和它本身不再有其他因数的自然数。换句话说&#xff1a;一个大于1的自然数 &#xff0c;如果只能被1和它本身整除&#xff0c;那就是素数&#xff08;质数&#xff09;。 在打印中遇到的问题就是&#xff0c;知道怎么写却总是运行不起来。主要…...

Oracle对数据库行和数据库的监控

前言&#xff1a; Oracle对表的监控分为数据行修改DML的监控、对表的DDL监控 1、对表的DML监控&#xff08;数据的增删改&#xff09; -- 创建测试表 create table tab_test01( id varchar2(100) default sys_guid(), name varchar2(100), insert_date date default sysdate…...

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…...

Vite + Vue3 + TS项目配置前置路由守卫

在现代前端开发中&#xff0c;使用 Vue 3 和 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具&#xff0c;可以显著提升开发体验。本文博主将指导你如何在 Vite Vue 3 TypeScript 项目中配置前置路由守卫&#xff08;Navigation Guards&#xff09;…...

设计模式-备忘录

备忘录&#xff08;Memento&#xff09;设计模式是为了保存对象当前状态&#xff0c;并在需要的时候恢复到之前保存的状态。以下是一个简单的C#备忘录模式的实现&#xff1a; // Originator 类&#xff0c;负责创建和恢复备忘录 class Originator {private string state;publi…...

openEuler安装docker,加速镜像拉取

文章目录 文章来源1.配置镜像源2.编辑配置文件3.安装想要的版本4. ~ 原神&#xff01;5.由于很多镜像无法拉取配置镜像源 文章来源 http://t.csdnimg.cn/zYDYy 原文连接 由于之前的仓库不让用且 1.配置镜像源 由于 国外的镜像仓库好多不让用 所以配置阿里的镜像源 yum-confi…...

angular入门基础教程(七)系统路由

路由的实现 当我们系统越来复杂&#xff0c;功能越来越多&#xff0c;路由也就是必须的了。在 ng 中如何实现路由呢&#xff1f; 启用路由 在 app 目录下&#xff0c;新建一个 router 目录&#xff0c;把 app.routers.ts 文件拷贝过来&#xff0c;并修改一下。 import { Ro…...

Unity Canvas动画:UI元素的动态展示

在Unity中&#xff0c;Canvas是用于管理和展示用户界面&#xff08;UI&#xff09;元素的系统。Canvas动画是UI设计中的重要组成部分&#xff0c;它能够提升用户体验&#xff0c;使界面更加生动和响应用户操作。本文将探讨Unity Canvas动画的基本概念、实现方法以及一些实用的技…...

apache.commons.pool2 使用指南

apache.commons.pool2 使用指南 为什么要使用池 创建对象耗时较长&#xff0c;多线程频繁调用等因素限制了我们不能每次使用时都重新创建对象&#xff0c;使用池化思想将对象放进池内&#xff0c;不同线程使用同一个池来获取对象&#xff0c;极大的减少每次业务的调用时间。 …...

【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题 编写一个函数&#xff0c;实现&#xff1a;先去除左右空白符&#xff0c;自动检测输入的数据类型&#xff0c;如果是整数就转换成二进制形式并返回出结果&#xff1b…...

typescript 定义类型

type infoType string; let name: infoType "全易"; let location: infoType "北京"; // let age: infoType 18; // 报错 infoType string&#xff5c;number 就不报错了 let job: infoType "开发"; let love: infoType "吃喝玩乐&q…...

基于Java+SpringBoot+Vue的的课程作业管理系统

前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽兄弟们&#xff0c;好久不见哦&#xff5…...

分布式日志分析系统--ELK

文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分…...

Linux初学基本命令

linux文件目录 1、bin->usr/bin binary存放命令 所有账户可以使用 Linux可以执行的文件&#xff0c;我们称之为命令command 2、boot 存放系统启动文件 3、dev device存放设备文件 4、etc 存放配置文件的目录 configration files 5、home home家目录 存…...

如何优化PyTorch以加快模型训练速度?

PyTorch是当今生产环境中最流行的深度学习框架之一。随着模型变得日益复杂、数据集日益庞大&#xff0c;优化模型训练性能对于缩短训练时间和提高生产力变得至关重要。 本文将分享几个最新的性能调优技巧&#xff0c;以加速跨领域的机器学习模型的训练。这些技巧对任何想要使用…...