JSP自定义标签【下】

news2024/9/24 21:26:43

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于自定义标签的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

导读:

💡辉辉小贴士:学了这么多内容,那么我们到底在什么样的场景下会用到自定义标签呢?

一.自定义dept标签

二.自定义ForEach标签 

三.自定义select标签

💡辉辉小贴士:那些我们常常烦的错,要注意啦!!! 


导读:

        在上篇我们已经说到了什么是标签,什么是jsp标签,以及为什么和字母使用自定义标签,有想了解详情的可以点此链接哦!

💡辉辉小贴士:学了这么多内容,那么我们到底在什么样的场景下会用到自定义标签呢?

        自定义标签通常用于Web应用程序中,用于将业务逻辑从页面代码中抽象出来,从而简化页面代码并提高可重用性和可维护性。在使用自定义标签时,可以将页面代码与业务逻辑分离,使其更加松散耦合,使得应用程序更便于维护和扩展

        具体来说,当您需要在多个页面中使用相同的HTML代码块或功能时,使用自定义标签可以将这些代码块封装到单个标签中,并在多个页面中重复使用。这也使得页面更具可读性和可维护性,因为标签更好地区分了页面上不同类型的代码块和功能

那么此篇就是让我们知道自定义标签的这个可以重复利用的特点!!!【多用实例演示哦~~】 

一.自定义dept标签

  • 用于遍历指定的数据(通常这个数据会在多个页面上被重复使用,例如我们所编写的这个标签是显示部门的信息的,然而部门信息通常在很多的页面上都需要显示与部门有关的信息,而我们也可以拘役反三,将其用于到其他的场景【会重复使用同一段数据信息】)
  • 有一个变量来保存数据源

标签助手类

package com.wh.tag2;

public class Dept {
private int cid;
private String cname;
public Dept() {
	// TODO Auto-generated constructor stub
}
public Dept(int cid, String cname) {
	super();
	this.cid = cid;
	this.cname = cname;
}
public int getCid() {
	return cid;
}
public void setCid(int cid) {
	this.cid = cid;
}
public String getCname() {
	return cname;
}
public void setCname(String cname) {
	this.cname = cname;
}
@Override
public String toString() {
	return "MyClass [cid=" + cid + ", cname=" + cname + "]";
}


}

tld文件【标签库描述文件】

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>wh</uri>

	<!--dept标签  -->
	<tag>
		<!-- 标签名字 -->
		<name>dept</name>
		<!-- 标签助手类的全路径名 -->
		<tag-class>com.wh.tag2.DeptTag</tag-class>
		<!-- 标签体内容==是否是空【不为空】 -->
		<body-content>jsp</body-content>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>var</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>false</rtexprvalue>
			<!-- 对dept标签属性作用的描述 -->
			<description>输出数据</description>
		</attribute>
		
	</tag>
	
	
</taglib>

页面上引用

<%@page import="com.wh.tag2.Dept"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib prefix="w" uri="wh" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>使用自定义标签</title>
</head>
<body>
<%
List<Object> list= new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
request.setAttribute("list", list);

List<Dept> selectlist = new ArrayList<Dept>();
selectlist.add(new Dept(1, "摸鱼部🐟"));
selectlist.add(new Dept(2, "撸猫部🐱"));
selectlist.add(new Dept(3, "偷猪部🐖"));
selectlist.add(new Dept(4, "遛狗部🐕"));
request.setAttribute("selectlist", selectlist);
%>
<!-- out标签 -->
 <%-- <w:out val="123"/>  --%>

<!--if标签  -->
<%-- <w:if test="${100 == 100}">
		结果为true,输出!!
	</w:if>
	
	<w:if test="${100 != 100}">
		结果为false,不输出!!
	</w:if> --%>
	
	<!--  foreach标签 -->
	<%--  <w:foreach items="${list }" var="l">
	${l }
	</w:foreach> --%> 
	
	<!-- dept标签 -->
	 <w:dept var="dept"></w:dept>
	${dept }  
	
<w:select items="${selectlist }" optionVal="cid" optionText="cname" optionSelect="2"></w:select>

</body>
</html>

所用实体类

package com.wh.tag2;

public class Dept {
private int cid;
private String cname;
public Dept() {
	// TODO Auto-generated constructor stub
}
public Dept(int cid, String cname) {
	super();
	this.cid = cid;
	this.cname = cname;
}
public int getCid() {
	return cid;
}
public void setCid(int cid) {
	this.cid = cid;
}
public String getCname() {
	return cname;
}
public void setCname(String cname) {
	this.cname = cname;
}
@Override
public String toString() {
	return "MyClass [cid=" + cid + ", cname=" + cname + "]";
}


}

结果

仔细看看自定义dept标签,是不是就很好的解决了重复同样代码的问题呢?那么下面的示例也是这样的

二.自定义ForEach标签 

  • 首先有一个变量保存数据源,也有你一个变量保存“指针”【就是遍历数据源时,这个变量会一个接着一个的指向数据源的数据】
  • 如果数据源不为空的话,就遍历数据,如果为空的话,就跳过标签体

标签助手类

package com.wh.tag2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class ForEachTag extends BodyTagSupport {
	private List<Object> items = new ArrayList<Object>();
	private String var;
	public String getVar() {
		return var;
	}
	public void setVar(String var) {
		this.var = var;
	}
	
	
	
	public List<Object> getItems() {
		return items;
	}
	public void setItems(List<Object> items) {
		this.items = items;
	}
	@Override
	public int doStartTag() throws JspException {
		if(this.items==null||items.size()==0) {
			return SKIP_BODY;
		}
		Iterator<Object> it = items.iterator();
		Object next = it.next();
		this.pageContext.setAttribute(var, next);
		this.pageContext.setAttribute("it", it);
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		Iterator<Object> it = (Iterator<Object>) this.pageContext.getAttribute("it");
		if(it.hasNext()) {
			this.pageContext.setAttribute(var, it.next());
			return EVAL_BODY_AGAIN;
		}
		return SKIP_BODY;
	}

}

tld文件【标签库描述文件】

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>wh</uri>

	
	
	<!--foreach标签  -->
	<tag>
		<!-- 标签名字 -->
		<name>foreach</name>
		<!-- 标签助手类的全路径名 -->
		<tag-class>com.wh.tag2.ForEachTag</tag-class>
		<!-- 标签体内容==是否是空【不为空】 -->
		<body-content>jsp</body-content>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>items</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对if标签属性作用的描述 -->
			<description>遍历输出数据</description>
		</attribute>
		<attribute>
			<!-- 属性名 -->
			<name>var</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>false</rtexprvalue>
			<!-- 对foreach标签属性作用的描述 -->
			<description>数据源的指针</description>
		</attribute>
	</tag>
	
	
	
	
</taglib>

页面上引用

<%@page import="com.wh.tag2.Dept"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib prefix="w" uri="wh" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>使用自定义标签</title>
</head>
<body>
<%
List<Object> list= new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
request.setAttribute("list", list);

List<Dept> selectlist = new ArrayList<Dept>();
selectlist.add(new Dept(1, "摸鱼部🐟"));
selectlist.add(new Dept(2, "撸猫部🐱"));
selectlist.add(new Dept(3, "偷猪部🐖"));
selectlist.add(new Dept(4, "遛狗部🐕"));
request.setAttribute("selectlist", selectlist);
%>
<!-- out标签 -->
 <%-- <w:out val="123"/>  --%>

<!--if标签  -->
<%-- <w:if test="${100 == 100}">
		结果为true,输出!!
	</w:if>
	
	<w:if test="${100 != 100}">
		结果为false,不输出!!
	</w:if> --%>
	
	<!--  foreach标签 -->
	 <w:foreach items="${list }" var="l">
	${l }
	</w:foreach> 
	<%--  <w:dept var="dept"></w:dept>
	${dept } --%> 
	
<w:select items="${selectlist }" optionVal="cid" optionText="cname" optionSelect="2"></w:select>

</body>
</html>

结果

 

三.自定义select标签

标签助手类

package com.wh.tag2;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class SelectTag extends BodyTagSupport{
private List<Object> items;
private String optionVal;
private String optionText;
private String optionSelect;

public SelectTag() {
	// TODO Auto-generated constructor stub
}

public SelectTag(List<Object> items, String optionVal, String optionText, String optionSelect) {
	super();
	this.items = items;
	this.optionVal = optionVal;
	this.optionText = optionText;
	this.optionSelect = optionSelect;
}

public List<Object> getItems() {
	return items;
}

public void setItems(List<Object> items) {
	this.items = items;
}

public String getOptionVal() {
	return optionVal;
}

public void setOptionVal(String optionVal) {
	this.optionVal = optionVal;
}

public String getOptionText() {
	return optionText;
}

public void setOptionText(String optionText) {
	this.optionText = optionText;
}

public String getOptionSelect() {
	return optionSelect;
}

public void setOptionSelect(String optionSelect) {
	this.optionSelect = optionSelect;
}


@Override
	public int doStartTag() throws JspException {
	//获取页面上下文对象
		 JspWriter out = this.pageContext.getOut();
		 try {
			out.print(PrintContent());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return super.doStartTag();
	}


/**
 * 输出内容的方法
 * @return
 * @throws Exception 
 */
private String PrintContent() throws Exception {
	StringBuffer sb= new StringBuffer("<select>");
	//往select标签中填充好内容【optionVal,optionText,optionSelect】
	for (Object object : items) {//遍历数据源
		String value=getObjectAttr(object,optionVal);//值
		String text=getObjectAttr(object,optionText);//文本内容
		sb.append("<option   "+(value.equals(optionSelect) ?"selected" : " ")+"  value ='"+value+"'  >"+text+"</option>");
	}
	sb.append("</select>");
	return sb.toString();
}

/**
 * 根据指定的对象那搭配指定的属性(名/值)
 * @return
 * @throws Exception 
 * @throws NoSuchFieldException 
 */
private String getObjectAttr(Object obj,String attr) throws  Exception {
	Class class1 = obj.getClass();//类类
	Field field = class1.getDeclaredField(attr);//拿到指定的属性
	field.setAccessible(true);//允许拿到私有的属性
	Object object = field.get(obj);//根据对象拿到里面的属性值
	return object.toString();//返回拿到的属性值
}

}

tld文件【标签库描述文件】

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>wh</uri>

	<!--select标签  -->
	<tag>
		<!-- 标签名字 -->
		<name>select</name>
		<!-- 标签助手类的全路径名 -->
		<tag-class>com.wh.tag2.SelectTag</tag-class>
		<!-- 标签体内容==是否是空【不为空】 -->
		<body-content>jsp</body-content>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>items</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对dept标签属性作用的描述 -->
			<description>数据源</description>
		</attribute>
		
		<attribute>
			<!-- 属性名 -->
			<name>optionVal</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对dept标签属性作用的描述 -->
			<description>option的value值</description>
		</attribute>
		
		<attribute>
			<!-- 属性名 -->
			<name>optionText</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对dept标签属性作用的描述 -->
			<description>option的文本值</description>
		</attribute>
		
		<attribute>
			<!-- 属性名 -->
			<name>optionSelect</name>
			<!-- 属性是否必填 -->
			<required>false</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>false</rtexprvalue>
			<!-- 对dept标签属性作用的描述 -->
			<description>option的选中状态</description>
		</attribute>
	</tag>
	
	
</taglib>

页面上引用

<%@page import="com.wh.tag2.Dept"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@taglib prefix="w" uri="wh"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>使用自定义标签</title>
</head>
<body>
	<%
List<Object> list= new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
request.setAttribute("list", list);

List<Dept> selectlist = new ArrayList<Dept>();
selectlist.add(new Dept(1, "摸鱼部🐟"));
selectlist.add(new Dept(2, "撸猫部🐱"));
selectlist.add(new Dept(3, "偷猪部🐖"));
selectlist.add(new Dept(4, "遛狗部🐕"));
request.setAttribute("selectlist", selectlist);
%>
	<!-- out标签 -->
	<%-- <w:out val="123"/>  --%>

	<!--if标签  -->
	<%-- <w:if test="${100 == 100}">
		结果为true,输出!!
	</w:if>
	
	<w:if test="${100 != 100}">
		结果为false,不输出!!
	</w:if> --%>

	<!--  foreach标签 -->
	<%--  <w:foreach items="${list }" var="l">
	${l }
	</w:foreach> --%>

	<!-- dept标签 -->
	<%--  <w:dept var="dept"></w:dept>
	${dept }   --%>

	<w:select items="${selectlist }" optionVal="cid" optionText="cname"
		optionSelect="2"></w:select>

</body>
</html>

所用实体类

package com.wh.tag2;

public class Dept {
private int cid;
private String cname;
public Dept() {
	// TODO Auto-generated constructor stub
}
public Dept(int cid, String cname) {
	super();
	this.cid = cid;
	this.cname = cname;
}
public int getCid() {
	return cid;
}
public void setCid(int cid) {
	this.cid = cid;
}
public String getCname() {
	return cname;
}
public void setCname(String cname) {
	this.cname = cname;
}
@Override
public String toString() {
	return "MyClass [cid=" + cid + ", cname=" + cname + "]";
}


}

结果

注意,这里选中了“偷猪部🐖”,是因为我在标签中设置了默认选中的就是它!!! 

💡辉辉小贴士:那些我们常常烦的错,要注意啦!!! 

  • 在拼接的时候,常常会因为拼接的加号和引号之间没有空格,导致没有出现自己代码原本该出现的结果👇👇

  • 我们在标签助手类中有时候会将属性的名字的首字母大写,因为我们内心是想遵循"驼峰命名法",但要是我们这样命名了,那么将会引发“找不到setters异常”👇👇

结果

 

那么为什么会出现这个错误呢?

  • 在Java中,当我们在自定义标签时,如果属性名称在setters方法中大写,则会引发“找不到setters异常”(即找不到Java类中的相应属性的setter方法)。这是因为按照Java约定,属性名称的第一个字母应该是小写的,而setter方法名称应该以“set”开头,后面跟上首字母大写的属性名称。因此,如果我们的自定义标签属性名称中的第一个字母大写了,则在查找Java类的setter方法时,会寻找大写字母开头的方法,而不是与属性名完全相同的小写字母开头的方法

    为了解决这个问题,我们应该在标签中使用与Java类属性名称完全相同的小写字母开头的属性名称这将确保可以正确绑定属性值到Java类对象,并正确地调用setter方法

              好啦,今天的分享就到这了,希望能够帮到你呢!😊😊              

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

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

相关文章

linux-2.6.22.6内核信号量、阻塞和费阻塞

信号量 1.所谓信号量也是资源共享条件下保护资源的一种手段&#xff0c;当定义一个信号量时&#xff0c;这个信号量就相当于一个互斥锁&#xff0c;只能属于一个进程&#xff0c;我们把之前同一设备同一时刻只能由一个进程打开的原子变量操作改成信号量。 代码如下&#xff1…

黑河学院ASP.NET程序设计大作业(1)--搭建页面

一、作业简介&#xff1a; 说明&#xff1a;我分到的是上海交通大学-生命科学技术学院 网址&#xff1a;https://life.sjtu.edu.cn/ 二、作业流程: 前台&#xff1a; 1.确定技术点&#xff08;是自己搭建&#xff0c;还是用框架&#xff09; 2.搭建首页、所有的静态页面&#x…

NET Core添加 Sqlite 数据库

文章目录 相关文章回顾Sqlite安装环境说明Nuget安装测试程序 结尾 相关文章回顾 .net framework 命令行项目使用 sqlite,DbContext C# .NET EF框架 webapi 安装使用sqlite visual studio 2022&#xff0c;ADO.NET 实体数据模型添加 sqlite数据库对象 Sqlite安装 环境说明 …

周赛351(模拟、枚举答案、乘法原理+双指针(隔板问题)、栈的应用)

文章目录 周赛351[2748. 美丽下标对的数目](https://leetcode.cn/problems/number-of-beautiful-pairs/)模拟O(10n)做法 [2749. 得到整数零需要执行的最少操作数](https://leetcode.cn/problems/minimum-operations-to-make-the-integer-zero/)枚举答案 [2750. 将数组划分成若干…

ElementUI Table 表格动态添加行和列

一、效果 懒得发什么动态图&#xff0c;直接静态就好了。 二、代码 本文参考代码&#xff1a;https://blog.csdn.net/qq_33791597/article/details/125605873 有需求的可以去看下原文&#xff0c;我是参考后又改造了一番 <template> <div style"padding:10px&q…

磁盘 - 内存 - 中央处理器缓存 / 用户缓存区 - 内核缓存区 / 零拷贝

文章目录 磁盘 - 内存 - 中央处理器缓存用户缓存区 - 内核缓存区零拷贝意义 这些概念比较常用&#xff0c;涉及到物理设备 - 操作系统概念&#xff0c;操作系统概念 - 数据结构的区分。记录一下以供后人取笑。 磁盘 - 内存 - 中央处理器缓存 这些是计算机中比较常用的物理设备…

stable-diffusion-webui 安装问题记录

安装完成后&#xff0c;浏览器打开&#xff1a;http://127.0.0.1:7860/&#xff0c;无论点哪里&#xff0c;只要触发交互&#xff0c;都提示&#xff1a; 解决办法&#xff1a; 1、关闭&#xff08;墙外魔法工具&#xff09;软件&#xff08;不一定有效&#xff09; 2、需要不…

将 Layui 日历框,一周开始由星期日改为星期一

Layui 的日历框控件中&#xff0c;一周的开始是星期日。 但是我更习惯一周开始为星期一。在 ISO8601:2000 中&#xff0c;其中也是规定了&#xff1a;每个日历星期从星期一开始&#xff0c;星期日为第 7 天。 所以改一下。 改 layui.all.js 或 laydate.js&#xff08;取决于…

今日分享:如何文本转语音

嘿&#xff0c;各位小伙伴们&#xff01;你们有没有遇到过想看文章但是又赶时间的情况呢&#xff1f;这时候&#xff0c;文本转语音工具就可以帮助你啦&#xff01;通过使用文本转语音工具&#xff0c;你就可以实现听取文章内容而不必亲自看它们了&#xff0c;真是省时又省力。…

node对应的npm版本

官网地址&#xff1a;node对应的npm版本地址

HTML5+CSS3+JS小实例:Tab选项卡动画切换效果

实例:Tab选项卡动画切换效果 技术栈:HTML+CSS+JS 字体图标库:font-awesome 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name=&q…

eclipse中maven项目pom.xml文件报错:Missing artifact com.sun:tools:jar:1.8.0解决

背景&#xff1a;在引入新的jar包后&#xff0c;突然pom.xml文件就飘红了&#xff0c;提示Missing artifact xxx 原因&#xff1a;新导入的jar包依赖别的jar包&#xff0c;别的jar包因为比较旧&#xff0c;缺失相关文件 处理&#xff1a; 1、找到本地的repository地址&#…

openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域

本示例的目的是介绍演示如何在vue+openlayers中模拟圆孔相机的拍摄场景,根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示…

[算法前沿]--021-baichuan-7B的测试教程

1.百川模型介绍 baichuan-7B不仅在C-Eval、AGIEval和Gaokao中文权威评测榜单上,以显著优势全面超过了ChatGLM-6B等其他大模型,并且在MMLU英文权威评测榜单上,大幅领先LLaMA-7B。baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万…

推或拉? rabbitMQ 消费模式该如何选择

系列文章目录 消息队列选型——为什么选择RabbitMQ RabbitMQ 五种消息模型 RabbitMQ 能保证消息可靠性吗 文章目录 系列文章目录前言一、推拉两种模式的概念二、推模式的使用及优势1. 使用2. 优劣 三、拉模式的使用及优势1. 使用2. 优劣 四、消费端Ack模式与Qos1. Ack模式2. Q…

Linux——1初识linux

目录 1.1 硬件和软件 1.2 初识Linux 1.2.1 Linux的诞生 1.2.2 LInux内核 1.2.3 Linux发行版 1.3 虚拟机介绍 1.4 VMware WorkStation 安装 1.5 在VMware上安装Linux 1.6 远程连接Linux系统 1.6.1 图形化、命令行 1.6.2 FinalShell 1.1 硬件和软件 我们所熟知的计算…

6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(8)

0.briefly speaking 点此返回上一篇博客 上一篇博客中我们简单介绍了UART和PLIC的初始化过程&#xff0c;并迭代式的分析了console的读写操作&#xff0c;这篇博客接着上一篇的话题&#xff0c;研究一下一个字符是怎么一步步被显示到我们的屏幕上的&#xff0c;经过了哪些设备…

PyCharm 2021.1.1 x64的安装 和环境搭建

环境变量 D:\Python38 path 免安装

【id:80】【20分】B. 复数的加减乘运算(运算符重载)

题目描述 定义一个复数类&#xff0c;通过重载运算符&#xff1a;、-、*&#xff0c;实现两个复数之间的各种运算。 class Complex { private:float real, image; public:Complex(float x 0, float y 0);friend Complex operator(Complex&, Complex&);friend Comple…

python中使用OAK-D PRO相机实现OCR功能

目录 OAK简介Tesseract简介Tesseract OCR安装包安装 Tesseract OCR 代码实现 OAK简介 OAK&#xff08;OpenCV AI Kit&#xff09;是一个开源的智能视觉平台&#xff0c;它集成了硬件和软件组件&#xff0c;旨在提供高性能的实时目标检测、识别和跟踪等视觉AI功能。OAK由Luxoni…