SpringBoot登陆+6套前端主页-【JSB项目实战】

news2024/11/18 15:30:44

SpringBoot系列文章目录

SpringBoot知识范围-学习步骤【JSB系列之000】

文章目录

  • SpringBoot系列文章目录
    • 本系列校训
  • SpringBoot技术很多很多
  • 环境及工具:
  • 上效果图
    • 主页
    • 登陆
  • 配置文件设置
  • 导数据库
  • 项目目录如图:
  • 代码部分:
    • 控制器
    • 过滤器
    • 详细的解析一下过滤器与session的情况
    • 前台的首页
  • 其它配套页面展示
    • 直接给第二套方案的页面
    • 第三套方案的页面。
    • 让人发疯的好长好长的配套4的页面。
    • 无电商不主页的配套5页面
    • 迷你版电商的配套6
  • 配套资源
  • 作业:

本系列校训

用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干!
只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知!

SpringBoot技术很多很多

韩顺平说:学习JAVA的人有两大难
第一困惑,JAVA能百度到的知识太多太多,完全不知道学啥
第二困惑,就是不知道以什么样的顺序去学,有的时候乱看一堆视频有遗漏,有的时候,两边的视频还有重复。
SpringBoot这部分也是最喜欢被面试的,很多人简历又是包装,又是润,上面的经验看上去也是至少10K的水平,但是呢只敢要3K,就这样还让面试的经理无应以对。
天天喊着卷卷卷,其实完全无经验。一心只想打王者,摸鱼一摸大半天
这个【JSB项目实战】就是讲SpringBoot活学活用的(JSB系列才是教程),其实,基本上都是简化了的SpringBoot。并没有若依那样的全套,但是很多人因为项目经验完全假,简化的其实反而不会。那卷不过别人也属正常。
在这里插入图片描述

环境及工具:

本系列环境

环境win11
工具idea 2017
jdk1.8
数据库mysql5.5
maven3.2.1
项目导入方式maven 导入
数据库前端工具mysql-front (navicat 也可以)

数据库前端工具:mysql-front (navicat 也可以)
主要是这些跟PHPStudy 2018 整合了,所以有的时候懒的打开navicat
关于环境的重要性,直接看上面的《SpringBoot 的项目编译即报错处理–JSB系列之001》

上效果图

不管是啥系统,除了windows 上的小游戏之外,哪个不得注册,登陆,一个主页?
其实,我是来炫主页效果的。

主页

开局一条狗,道士满地走,呃频道接错了。
开局一个小圈圈,然后接漂亮的一个主页,其实本来是想着放一个动画的,但是CSDN上面好象是只能GIF?不能mp4,正常的格式。那GIF的256色才炫起来么?我就放图片吧。过度动画自行脑补… 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登陆

这个就显得,
就那么回事了。反正验证码也都有,点击也能换。只能说不算丑吧?
在这里插入图片描述

配置文件设置

项目目录,不能有中文或空格,就乖乖的用C语言能识别的变量名是最好的

#数据库连接池配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.platform=mysql
#配置数据源
spring.datasource.url=jdbc:mysql://localhost:3306/jsb_db_score?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#Mybatis配置
#扫描的实体的包
mybatis.typeAliasesPackage=com.score.bean
#扫描的配置文件地址
mybatis.mapperLocations=classpath:mapper/*.xml
#mybatis.configLocation=classpath:mybatis-config.xml
server.port=8080

#控制台打印SQL语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

要注意的是启动的端口号,
数据源里的datasource 的名字。用户名,密码。还有就是mysql 的驱动是com.mysql.jdbc.Driver
总的来说,
com.mysql.jdbc.Driver 是 mysql-connector-java 5.5之前的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6及6之后的的,
初学者容易陷入一个误区,就是什么东西最新版是最好的,事实上很有可能他写的东西,明明JDK6.0就完全足够。一边喊着自己的机器内存不足,一边让内存运行着他自己用不到的东西。就比如说idea应该算是这些开发者工具里最卡的。有人可能明明只是打开几个网页,那为什么不使用webstorm? 甚至不是写很多代码的时候,为什么不选择更轻量级的VSCode?

导数据库

打开mysql-front 或navicat
注意:数据库名:jsb_db_score 超级用户:root 密码:123456
运行本例附件即可。最后导入数据库成功的截图如下:
系统用户登陆:(帐号名:admin密码:123456) 无MD5加密
在这里插入图片描述
其ER图如下:
在这里插入图片描述

项目目录如图:

不熟悉SpringBoot的人,可以好好研读一下【JSB系列】,注意目录层次。

在这里插入图片描述

关于public 与template 的差别请参见《SpringBoot项目中WEB页面放哪里–【JSB系列之008】》

代码部分:

控制器

package com.score.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.score.bean.ResultObject;
import com.score.bean.TStudent;
import com.score.bean.User;
import com.score.service.IUserService;
import com.score.service.TStudentService;
import com.score.util.Constant;

/**
 * @author hmg
 *
 */
@RequestMapping("/user")
@RestController //标识为返回类型为Json的控制器
public class UserController {
	
	//自动注入服务类
	@Autowired
	private IUserService userService;
	
	@Autowired
	private TStudentService studentService;
	
    //标识请求地址
    @RequestMapping("/login")
    public ResultObject<List<User>> getUsers(User user,HttpServletRequest request) {
    	//查询用户列表
    	List<User> list= userService.getUser(user);
    	ResultObject<List<User>> rs=new ResultObject<List<User>>();
    	if(list.isEmpty()) {
    		//状态码
        	rs.setCode(Constant.FAILURE_RETUEN_CODE);
        	//提示
        	rs.setMsg("登录失败");
    	}else {
    		//状态码
        	rs.setCode(Constant.SUCCESS_RETUEN_CODE);
        	request.getSession().setAttribute("user", list.get(0));
        	//提示
        	rs.setMsg("登录成功");
    	}    	
    	//数据
    	rs.setData(list);
        return rs;
    }
    @RequestMapping("/loginOut")
    public ResultObject<Object> loginOut(HttpServletRequest request) {
    	//查询用户列表
    	ResultObject<Object> rs=new ResultObject<Object>();
    	request.getSession().removeAttribute("user");	
    	//数据
    	rs.setCode(Constant.SUCCESS_RETUEN_CODE);
    	rs.setMsg("退出成功");
        return rs;
    }
    
    //标识请求地址
    @RequestMapping("/studentLogin")
    public ResultObject<List<TStudent>> studentLogin(User user,HttpServletRequest request) {
    	//查询用户列表
    	TStudent student=new TStudent();
    	student.setStudentNo(Integer.parseInt(user.getUserName()));
    	student.setStuPass(user.getPassword());
    	List<TStudent> list= studentService.selectloginStudent(student);
    	ResultObject<List<TStudent>> rs=new ResultObject<List<TStudent>>();
    	if(list.isEmpty()) {
    		//状态码
        	rs.setCode(Constant.FAILURE_RETUEN_CODE);
        	//提示
        	rs.setMsg("登录失败");
    	}else {
    		//状态码
        	rs.setCode(Constant.SUCCESS_RETUEN_CODE);
        	request.getSession().setAttribute("student", list.get(0));
        	//提示
        	rs.setMsg("登录成功");
    	}    	
    	//数据
    	rs.setData(list);
        return rs;
    }
    @RequestMapping("/studentloginOut")
    public ResultObject<Object> studentloginOut(HttpServletRequest request) {
    	//查询用户列表
    	ResultObject<Object> rs=new ResultObject<Object>();
    	request.getSession().removeAttribute("student");	
    	//数据
    	rs.setCode(Constant.SUCCESS_RETUEN_CODE);
    	rs.setMsg("退出成功");
        return rs;
    }
    
}

过滤器

虽然没有spring security 但是简单的权限还是要控制,不能让人家直接从index 里穿过去。这一点比前一篇的要求又不同了。参见《SpringBoot仅会SSM强撸项目–【JSB项目实战】》
所以,学习最好是循序渐进。这样学到的知识才足够的扎实。
配置 类 肯定是必须的。
这个知识点不会的参见《SpringBoot 的配置类–JSB系列之003》

package com.score.interceptor;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
 
    @Bean
    public FilterRegistrationBean registFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new LoginFilter());
        registration.addUrlPatterns("/*");
        registration.setName("loginFilter");
        registration.setOrder(1);
        return registration;
    }
 
}

然后,Filter 代码如下:

package com.score.interceptor;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.score.util.Constant;

@WebFilter(filterName = "loginFilter", urlPatterns = "/*.html")
public class LoginFilter implements Filter {
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
        System.out.println("----------------------->过滤器被创建");
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response=(HttpServletResponse)servletResponse;
        String requestURI = request.getRequestURI();
        System.out.println("--------------------->过滤器:请求地址"+requestURI);
        if(Constant.loginUrl.equals(requestURI)||requestURI.contains(Constant.AESSET)||Constant.LOGIN_URI.equals(requestURI)||Constant.STUDENT_LOGIN_URL.equals(requestURI)) {
         	  filterChain.doFilter(servletRequest, servletResponse);
        }else {
        	  if(Constant.STUDENT_INDEX.equals(requestURI)||Constant.MY_SCORE.equals(requestURI)||
        			  Constant.STUDENT_LOGINOUT_URL.equals(requestURI)||Constant.GET_MY_SCORE.equals(requestURI)||
        			  	Constant.SCORE.equals(requestURI)||Constant.GET_MY_SCORE_COUNT.equals(requestURI)
        			  ) {
        		  Object obj=request.getSession().getAttribute("student");
                  if(obj==null){
                  	response.sendRedirect("/login.html");
                  	return;
                  }else {
                  	 filterChain.doFilter(servletRequest, servletResponse);
                  }
        	  }else {
        		  Object obj=request.getSession().getAttribute("user");
                  if(obj==null){
                  	response.sendRedirect("/login.html");
                  	return;
                  }else {
                  	 filterChain.doFilter(servletRequest, servletResponse);
                  }
        	  }
             
        }
    }
    @Override
    public void destroy() {
        System.out.println("----------------------->过滤器被销毁");
    }

}

详细的解析一下过滤器与session的情况

其实,这种方式是最早在项目里使用的方式,只是后来客户端的电脑性能变好,才慢慢的使用cookie 的方式,而“3Q大战”,把 cookie 的安全问题推到风口浪尖,又再次回到了session登陆方式,准确的说,现在一台服务器可以撑100万的用户量,那一组集群呢?这也是为什么连华为这样的大公司,有一些系统(是一些系统,当然肯定不能是全部了)还是使用session 这种方式的原因。至于为啥连华为百分之一的用户量还要用springCloud ,还有全套的JWT ,token 等等,这个只能说公司的策略吧,万一公司像某多多一样三年就上市了呢?
有一些问题不是技术上的问题,而是公司的运营决策上的事情。做为打工人那就是公司用啥,啥就是最好!
在这里插入图片描述

前台的首页

	<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title>后台登录</title>
		<link rel="stylesheet" type="text/css" href="assets/admin/layui/css/layui.css" />
		<link rel="stylesheet" type="text/css" href="assets/admin/css/login.css" />
		<script src="assets/js/aJaxUtil.js"></script>
		<script src="assets/js/jquery-3.3.1.min.js"></script>
	</head>

	<body>
		<div class="m-login-bg">
			<div class="m-login">
				<h3>范德彪成绩管理查询系统</h3>
				<div class="m-login-warp">
					<form class="layui-form">
						<div class="layui-form-item">
							<input type="text" name="userName" required lay-verify="required" placeholder="用户名" autocomplete="off" class="layui-input">
						</div>
						<div class="layui-form-item">
							<input type="password" name="password" required lay-verify="required" placeholder="密码" autocomplete="off" class="layui-input">
						</div>
						<div class="layui-form-item">
							<input type="radio" name="type" value="1" title="教师" checked="">
      						<input type="radio" name="type" value="2" title="学生">
						</div>
						<div class="layui-form-item m-login-btn">
							<div class="layui-inline">
								<button class="layui-btn layui-btn-normal" lay-submit lay-filter="login">登录</button>
							</div>
							<div class="layui-inline">
								<button type="reset" class="layui-btn layui-btn-primary">取消</button>
							</div>
						</div>
					</form>
				</div>
				<p class="copyright" style="color: #00b7ee"><a href="https://blog.csdn.net/dearmite">Copyright 2021 by 项目开发后花园</a></p>
			</div>
		</div>
		<script src="assets/admin/layui/layui.all.js" type="text/javascript" charset="utf-8"></script>
		<script>
			layui.use(['form', 'layedit', 'laydate','jquery'], function() {
				var form = layui.form,
					layer = layui.layer,
					admin = layui.admin,
					$ = layui.jquery;

				//自定义验证规则
				form.verify({
					userName: function(value) {
						if(value.length < 4) {
							return '用户名至少4个字符';
						}
					},
					password: [/(.+){5,12}$/, '密码必须5到12位']
					
				});
				//监听提交
				form.on('submit(login)', function(data) {
					   var str = JSON.stringify(data.field);
			            var param = JSON.parse(str);
			     		if("1"==param.type){
			     			$.ajax({
				                //几个参数需要注意一下
				                    type: "POST",//方法类型
				                    dataType: "json",//预期服务器返回的数据类型
				                    url: "/user/login",//url
				                    data: param,
				                    success: function (result) {
				                    	if (result.code == "0") {
						                       location.href="/index.html";
						                    } else {
						                        layer.msg('用户名密码错误', {
						                            icon: 5
						                        });
						                    }
				                    },
				                    error : function() {
				                    	layer.msg('服务器错误', {
				                            icon: 5
				                        });
				                    }
				                });
			     		}else{
			     			debugger;
			     			var userName=param.userName;
			     			var reg=/^[\d]{6,10}$/;
			     			if(userName.length>10){
			     				layer.msg('学号长度不能大于10位', {
		                            icon: 5
		                        });
			     			}
			     			if(reg.test(userName)){
			     				$.ajax({
					                //几个参数需要注意一下
					                    type: "POST",//方法类型
					                    dataType: "json",//预期服务器返回的数据类型
					                    url: "/user/studentLogin",//url
					                    data: param,
					                    success: function (result) {
					                    	if (result.code == "0") {
							                       location.href="/student-index.html";
							                    } else {
							                        layer.msg('用户名密码错误', {
							                            icon: 5
							                        });
							                    }
					                    },
					                    error : function() {
					                    	layer.msg('服务器错误', {
					                            icon: 5
					                        });
					                    }
					                });
			     			}else{
			     				layer.msg('学生角色登录请使用学号', {
		                            icon: 5
		                        });
			     			}
			     		}	
					return false;
				});

			});
		</script>
	</body>

</html>

首页一般因为比较复杂,所以经常是2000多行的一个主页,你猜我猜不猜你能看得完?我只是想告诉大家,漂亮是需要代价的。这里只是展示了login.html的页面代码。
最后看到的界面:
在这里插入图片描述

其它配套页面展示

直接给第二套方案的页面

在这里插入图片描述

在这里插入图片描述

第三套方案的页面。

在这里插入图片描述

让人发疯的好长好长的配套4的页面。

在这里插入图片描述

无电商不主页的配套5页面

在这里插入图片描述

在这里插入图片描述

迷你版电商的配套6

在这里插入图片描述

在这里插入图片描述

配套资源

不要VIP,就看你有多少积分了,还有就是CSDN好象自己会涨价。早下早享受哟
SpringBoot登陆+6套主页-【JSB项目实战】1
https://download.csdn.net/download/dearmite/88094422
SpringBoot登陆+6套主页-【JSB项目实战】2
https://download.csdn.net/download/dearmite/88094425
SpringBoot登陆+6套主页-【JSB项目实战】3
https://download.csdn.net/download/dearmite/88094426
SpringBoot登陆+6套主页-【JSB项目实战】4
https://download.csdn.net/download/dearmite/88094427
SpringBoot登陆+6套主页-【JSB项目实战】5
https://download.csdn.net/download/dearmite/88094428
SpringBoot登陆+6套主页-【JSB项目实战】6
https://download.csdn.net/download/dearmite/88094430

作业:

无,看懂即是神
彪哥经典语录: 学项目,你得灵活,对方不按套路出牌,那你也不能按套路去打。
在这里插入图片描述

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

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

相关文章

社区发现快速入门

社区发现快速入门 一、图&#xff1a;关系型数据的一种描述方式 关系型数据&#xff0c;又名“表格数据”&#xff0c;指关系数学模型中以二维表的形式来描述的数据&#xff0c;它以表格形式组织&#xff0c;使用行和列来存储和表示数据之间的关系。 关系型数据可以用实体、…

【leetcode】206.反转链表

思路1&#xff1a;取原链表的节点&#xff0c;依次头插到新链表&#xff0c;返回新链表的头 示例一反转步骤如下&#xff1a; &#x1f4d6;Note: 当cur ! NULL时&#xff0c;将cur指向的节点头插入新链表&#xff0c;首先要更改cur->next的值为newhead->next&#xff0c…

LiveNVR监控流媒体Onvif/RTSP常见问题-token有效期是多久如何设置token有效期StreamToken和URLToken

LiveNVR中token有效期是多久如何设置token有效期StreamToken和URLToken 1、获取TOKEN2、TOKEN有效期3、默认token有效期3、自定义token加密key3.1、token_key3.2、stream_token_key 4、如何配置一直有效的token4.1、URLToken4.2、StreamToken 5、动态有效期6、流地址鉴权开启后…

城市气象数据可视化:洞察气候变化,构建智慧城市

随着城市化进程的加速&#xff0c;城市气象数据的采集和分析变得越来越重要。气象数据不仅影响着人们的生活和出行&#xff0c;还与城市的发展和规划息息相关。在数字化时代&#xff0c;如何将城市中各个气象数据进行可视化&#xff0c;让复杂的数据变得简单易懂&#xff0c;成…

Linux 下使用crontab 定时打包日志并删除已被打包的日志

crontab是和用户相关的&#xff0c;每个用户有自己对应的crontab 。 cron是Linux下的定时执行工具&#xff0c;以下是重启/关闭等等的命令 #/sbin/service crond start //启动服务 #/sbin/service crond stop //关闭服务 #/sbin/service crond restart //重启服务 #/…

外壳-零基础不求人设计PCB外壳

实机演示 2D 3D 导入PCB 除了在立创eda专业版layout的可以直接做外壳 在其它EDA设计的都需要先导入PCB(如altium) 放置边框 放置正面挖槽 放置侧面挖槽 放置需要先放置侧面基准线 这样再选择侧面挖槽 选择创建的基准线就可以侧面开孔 放置上下盖固定螺丝孔 第一步上下…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分。它们对于任何业务案例的建模都是必要的。然而&#xff0c;我们可能需要给定模型中字段之间的链接。有时&#xff0c;一个字段的值是根据其他字段的值确定的&#xff0c;有时我们…

每日一题7.26 23

162. 寻找峰值https://leetcode.cn/problems/find-peak-element/ 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可…

java中判断list是否为空

java中判断list是否为空是日常代码中经常遇到的问题。最近发现一个Utils提供的方法可以一步判断。 废话不多说&#xff0c;直接上代码&#xff01; ArrayList<String> arrayList new ArrayList<>(); System.out.println("集合1&#xff1a;" Collecti…

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院&#xff0c;吸引了很多人过来看电影。该电影院特别注意用户体验&#xff0c;专门有个 LED显示板做电影推荐&#xff0c;上面公布着影评和相关电影描述。 作为该电影院的信息部主管&#xff0c;您需要编写一个 SQL查询&#xff0c;找出所有影片…

链表和C++ std::list详解

文章目录 1. 链表和std::list2. list的用法2.1 list的定义和声明2.2 成员函数2.2.1 基本函数构造函数operatorassignget_allocator 2.2.2 元素访问frontback 2.2.3 迭代器begin、end和cbegin、cendrbegin、rend和crbegin、crend 2.2.4 容量emptysizemax_size 2.2.5 修改器clear…

扩展 Python 的 unittest 框架

目录 前言&#xff1a; 如何控制 unittest 用例执行的顺序呢&#xff1f; 方式 1&#xff0c;通过 TestSuite 类的 addTest 方法&#xff0c;按顺序加载测试用例 方式 2&#xff0c;通过修改函数名的方式 那就造个轮子吧 前言&#xff1a; Python 的 unittest 模块提供了…

做好防雷检测的意义和作用

防雷检测是指对雷电防护装置的性能、质量和安全进行检测的活动&#xff0c;是保障人民生命财产和公共安全的重要措施。我国对防雷检测行业有明确的国家标准和管理办法&#xff0c;要求从事防雷检测的单位和人员具备相应的资质和能力&#xff0c;遵守相关的技术规范和规程&#…

Cpp 01 — namespace命名空间、C++的输入与输出、缺省参数、函数重载、引用、隐式类型转换

前言&#xff1a;本文章主要用于个人复习&#xff0c;追求简洁&#xff0c;感谢大家的参考、交流和搬运&#xff0c;后续可能会继续修改和完善。 因为是个人复习&#xff0c;会有部分压缩和省略。 一、namespace命名空间 C使用命名空间(namespace)来避免命名冲突。 在定义一个…

初阶C语言-分支和循环语句(下)

“花会沿途盛开&#xff0c;以后的路也是。” 今天我们一起来继续学完分支语句和循环语句。 分支和循环 3.循环语句3.4 do...while()循环3.4.1 do语句的用法 3.5关于循环的一些练习3.6 goto语句 3.循环语句 3.4 do…while()循环 3.4.1 do语句的用法 do循环语句;//当循环语句…

【unity】ShaderGraph学习笔记

【unity】ShaderGraph学习笔记 创建ShaderGraph 创建URP的shaderGraph文件 在Project面板里Create→ShaderGraph→URP→这里主要有几个选项 Lit Shader Graph&#xff1a;有光照三维着色器 Unlit Shader Graph&#xff1a;无光照三维着色器 Sprite Custom Lit Shader Gra…

【解决方案】医疗行业资产定位管理方案-蓝牙资产定位方案

蓝牙资产定位追踪技术已经开始应用于多种行业的资产、设备管理方面&#xff0c;有不少机构、企业开始尝试使用实时蓝牙定位系统对其各类资产、机器设备、工具、材料、产品等进行精准定位&#xff0c;提高各类资产、设备的管理和使用效率&#xff0c;从而节省运营成本。 医疗行业…

汽配企业建设数字化工厂的步骤是什么

随着信息技术的迅猛发展&#xff0c;汽车行业也面临着数字化转型的迫切需求。汽配企业作为汽车产业链上重要的一环&#xff0c;也需要积极采取措施&#xff0c;建设数字化工厂系统&#xff0c;以适应市场竞争的变化。下面将介绍建设汽配企业数字化工厂的具体步骤。 第一步&…

在niso ii中读写EPCS时出现“Can‘t open flash device”

在niso ii中读写EPCS时出现“Can’t open flash device”&#xff0c;即alt_flash_open_dev(EPCS_FLASH_NAME)函数返回0。 Cant open flash device函数alt_flash_open_dev(EPCS_FLASH_NAME)打开epcs不成功&#xff0c;返回为0&#xff0c;试了几次硬件重新烧入、重启开发板还是…