JSP

2023-11-08

这里写图片描述

jsp简介

 1. JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。
 2. jsp: 作为请求发起页面,例如显示表单、超链接。 
: 作为请求结束页面,例如显示数据。
 3. Servlet: 
作为请求中处理数据的环节。
 4. jsp的组成 
         jsp = html + java脚本 + jsp标签(指令)
        jsp中可直接使用的对象一共有9个,被称之为9大内置对象 
 5. 3种java脚本: 
    <%…%>:写java代码片段,(类似方法) 
  <%=%>:用于输出,用于输出一条表达式(或变量)的结果。 
  <%!%>:声明,用来创建类的成员变量和成员方法(类似与类)
 6. jsp注释:<%– … –%> 
     当服务器把jsp编译成java文件时已经忽略了注释部分!

jsp原理(看源码)

 1. jsp其实是一种特殊的Servlet 
       当jsp页面第一次被访问时,服务器会把jsp编译成java文件
       然后再把java编译成.class
       然后创建该类对象 
       最后调用它的service()方法
       第二次请求同一jsp时,直接调用service()方法。

jsp三大指令
page

<%@page language=”java” info=”xxx”…%>**

 1. pageEncoding和contentType: 
    pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! 
    contentType:它表示添加一个响应头:Content-Type!等同与response.setContentType(“text/html;charset=utf-8”); 如果两个属性只提供一个,那么另一个的默认值为设置那一个。如果两个属性都没有设置,那么默认为iso
    import:导包!可以出现多次
   errorPage和isErrorPage 
   errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定 
   isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!
 1. <error-page>有两种使用方式:
 2. <error-code><location>子元素;
 3. <exception-type><location>子元素;
 4. 其中<error-code>是指定响应码;<location>指定转发的页面;<exception-type>是指定抛出的异常类型。
 <error-page>
    <error-code>404</error-code>
    <location>/error/errorPage.jsp</location>
 </error-page>
      <error-page>
 <exception-type>java.lang.RuntimeException</exception-type>
        <location>/index.jsp</location>
      </error-page>

include –> 静态包含

 1. 与RequestDispatcherinclude()方法的功能相似!
 2. <%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class
 3. RequestDispatcherinclude()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!
 4. 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

taglib –> 导入标签库
两个属性:
prefix:指定标签库在本页面中的前缀!由我们自己来起名称!
uri: 指定标签库的位置!
<%@taglib prefix=”s” uri=”/struts-tags”%> 前缀的用法

九大内置对象

 - 在jsp中无需声明即可直接使用的9个对象 
        out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
        config(ServletConfig):对应“真身”中的ServletConfig;
        page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;
        pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
        exception(Throwable):只有在错误页面中可以使用这个对象;
        request(HttpServletRequest):即HttpServletRequest类的对象;
        response(HttpServletResponse):即HttpServletResponse类的对象;
        application(ServletContext):即ServletContext类的对象;
        session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
    pageContext(一个顶9个!) 
    Servlet中有三大域,而JSP中有四大域! 
        ServletContext:整个应用程序 
        session:整个会话(一个会话中只有一个用户) 
        request:一个请求链! 
        pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数  据! 
    域对象 
    代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE); 
    全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找! 
    获取其他8个内置对象:

JSP动作标签

 - `<jsp:include page="xxx"/>`
例如:<jsp:include page="xxx"/>,用来包含指定的页面。假如有两个jsp. 分别为a.jsp和b.jsp,他们分别编码成Servlet,然后在执行Servlet时才会执行包含过程。这也是include指令与include标签的区别。 

    - 注意:`<jsp:include page="<%=myfile%>">`,这是可以的!因为include指令是在执行时才完成的包含,在执行时已经可以确定myfile这个变量的值。


    - 该标签内部使用的是RequestDispatcher#include()方法完成的包含
 - `<jsp:forward>`
     例如:<jsp:forward page="xxx"/>,用来转发到指定页面 
    例如在a.jsp中存在如下内容:<jsp:fowrad page="b.jsp"/> 
    a.jsp中的内容不会显示在浏览器上,而只是显示b.jsp的内容。而且在<jsp:forwad>标签下面的内容不会被执行。 

 - `<jsp:param>`
 该标签是和的子标签,用来向其他页面传递参数。
<jsp:include page="/b.jsp">
    <jsp:param value="zhangSan" name="username"/> 
</jsp:include>

在b.jsp中可以使用request.getParameter(“username”)来获取参数值。

javaBean

  • 必须有public的无参的构造器
  • 如果成员变量提供了getter/setter方法,那么称之为javabean属性。 JavaBean主要是用来通过反射操作的类!
    因为需要通过Class的newInstance()方法来创建类的实例,所以要求类必须提供public的无参构造器

内省

 - 内省类 –> Bean信息 –> 属性描述符 –> 属性的get/set对应的Method! — > 反射
     - 通过Class对象获取BeanInfo
 - BeanInfo info = Introspector.getBeanInfo(User.class);
 - 通过BeanInfo获取所有属性描述符对象
 - PropertyDescriptor[] pds = info.getPropertyDescriptors();
 - PropertyDescriptor:
     - String name getName():获取当前属性名称
     - Method getReadMethod():获取get方法反射对象
     - Method getWriteMethod():获取set方法反射对象
 - jarcommons-beanutils.jarcommons-logging.jar
 - 通过反射设置Javabean 
    Class<User> clazz = User.class; 
    Object user = clazz.newInstance(); 
    BeanUtils.setProperty(user, “username”, “admin”); 
    BeanUtils.setProperty(user, “password”, “admin123”);
 - 获取属性值  String username = BeanUtils.getProperty(user, “username”);
 - 把Map数据封装到JavaBean对象中
Map<String,String> map = new HashMap<String,String>();
map.put("username", "admin");
map.put("password", "admin123");
User user = new User(); 
BeanUtils.populate(user, map);
要求:map的key名称必须与User类的属性名称相同。不要无法赋值!

JSP中与JavaBean相关的标签

  • <jsp:useBean>
  • <jsp:setProperty>
  • <jsp:getProperty>
 1  <jsp:useBean id="user1" class="cn.domain.User" />
查看page域中是否存在user1这个域属性,如果存在,那么直接获取。 
如果不存在,那么创建之! 
等同与: 
User user1 = pageContext.getAttribute(“user1”); 
if(user1 == null) { 
user1 = new User();//创建user1对象 
pageContext.setAttribute(“user1”, user1);//保存到page域 
}
可以通过scope属性来指定操作 

设置属性值:
<jsp:setProperty property="username" name="user1" value="admin"/>
 - name:指定名为user1的JavaBean
 - property:指定要设置的属性名称
 - value:指定要设置的属性值  等同与  User user1 =
   (User)pageContext.getAttribute(“user1”);  user1.setUsername(“admin”);

获取属性值

    <jsp:getProperty property="username" name="user1"/>

输出user1这个javaBean的username属性值

等同与
User user1 = (User)pageContext.getAttribute(“user1”);
out.print(user1.getUsername());

EL表达式

 - EL:Expression Language,它是可以在JSP页面中直接使用的语言!  JSP页面也可以忽略EL:<@page
   isELIgnored=”true”%>  EL用来代替<%=…%>
 - EL 11个内置对象 
   EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1一个顶九个
   ${pageScope.xxx}、 ${requestScope.xxx}、 ${sessionScope.xxx}、
   ${applicationScope.xxx}
   param:对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。
   paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。
   header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头
   headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头
   initParam:获取<context-param>内的参数!
   cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。
   ${cookie.username.value}
   pageContext:它是PageContext类型!${pageContext.request.contextPath}

   EL操作四大域的内置对象:它们是Map类型  pageScope  requestScope  sessionScope 
   applicationScope
 - ${pageScope.user}:输出pageContext.getAttribute("user")
   ${requestScope.user}:输出request.getAttribute("user");
   ${sessionScope.user}:输出session.getAttribute("user");
   ${applicationScope.user}:输出application.getAttribute("user");
${user} 
依次在pageScope、requestScope、sessionScope、applicationScope中查找user 
如果查找到,那么立刻停止查找。

 - 操作JavaBean  <%  User user = new User(); 
   user.setUsername(“zhangSan”);  user.setPassword(“123”); 
   pageContext.setAttribute(“user”, user);  %>
${pageScope.user.username}
${pageScope.user.password}
 - 操作List

<% 
User user = new User(); 
user.setUsername(“zhangSan”); 
user.setPassword(“123”); 
List list = new ArrayList(); 
list.add(user); 
pageContext.setAttribute(“list”, list); 
%>
${pageScope.list[0].username}
${pageScope.list[0].password}
 - 操作Map

<% 
User user = new User(); 
user.setUsername(“zhangSan”); 
user.setPassword(“123”); 
Map map = new HashMap(); 
map.put(“u1”, user); 
pageContext.setAttribute(“map”, map); 
%>
${pageScope.map['u1'].username}
${pageScope.map['u1'].password}

${pageScope.map.u1.username}
${pageScope.map.u1.password}

EL操作参数内置对象:Map类型

param:Map<String,String>
paramValues:Map<String,String[]>
${param.username}:request.getParameter("username")
${paramValues.hobby}:request.getParameterValues("hobby");

EL操作请求头内置对象:Map类型

header:Map<String,String>
headerValues:Map<String,String[]>

${header.UserAgent}
${headerValues.UserAgener[0]
  • 与Cookie相关的内置对象:Map类型
 cookie:Map<String,Cookie>,其中key是Cookie的名称,而值是Cookie对象
${cookie.jsessionid.value}:获取sessionid
  • pageContext内置对象:PageContext类型
 ${pageContext.request},等同pageContext.getRequest()
${pageContext.session},等同pageContext.getSession()

${pageContext.request.contextpath},获取项目名
${pageContext.session.id},获取sessionId
- EL中最重要的就是操作四大域!  使用EL函数库需要在JSP页面中导入标签库:  导入标签库:<%@ tablib prefix=”fn”
   uri=”http://java.sun.com/jsp/jstl/functions”%>  String
   toUpperCase(String input):把参数转换成大写  String toLowerCase(String
   input):把参数转换成小写  int indexOf(String input, String
   substring):从大串,输出小串的位置!  boolean contains(String input, String
   substring):查看大串中是否包含小串  boolean containsIgnoreCase(String input,
   String substring):忽略大小写的,是否包含  boolean startsWith(String input,
   String substring):是否以小串为前缀  boolean endsWith(String input, String
   substring):是否以小串为后缀  String substring(String input, int beginIndex,
   int endIndex):截取子串  String substringAfter(String input, String
   substring):获取大串中,小串所在位置后面的字符串  substringBefore(String input, String
   substring):获取大串中,小串所在位置前面的字符串  String escapeXml(String
   input):把input中“<”、”>”、”&”、”’”、”“”,进行转义  String trim(String
   input):去除前后空格  String replace(String input, String substringBefore,
   String substringAfter):替换  String[] split(String input, String
   delimiters):分割字符串,得到字符串数组  int length(Object obj):可以获取字符串、数组、各种集合的长度!
   String join(String array[], String separator):联合字符串数组!
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/function"%>

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
…
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->

自定义函数库

  • 写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!
  • 在WEB-INF目录下创建一个tld文件
   <function>
    <name>fun</name>
    <function-class>haha.fn.MyFunction</function-class>
    <function-signature>java.lang.String fun()</function-signature>
  </function>
  • 在jsp页面中导入标签库 <%@ taglib prefix=”it” uri=”/WEB-INF/tlds/haha.tld” %>
  • 在jsp页面中使用自定义的函数:${it:fun() }

JSTL
JSTL是apache对EL表达式的扩展
jstl标签库

  • core:核心标签库,
  • fmt:格式化标签库
  • sql:数据库标签库,过时;
  • xml:xml标签库,过时。
 <c:core>
 - <c:out value=”aaa”/> 输出字符串aaa
 - <c:out value="${aaa}”/> 输出域属性aaa,其中与${aaa}相同
 - <c:out value="${aaa}” default=”xxx”/>如果${aaa}不存在,那么输出xxx字符串
 - <c:out value="${aaa}"
   escapeXml=”true”/>如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击
<c:set>

<c:set var=”a” value=”hello”/> 创建名为a,值为hello的域属性,范围:page
<c:set var=”a” value=”hello” scope=”session”/> 范围为session(page、request、session、application
<C:remove>

<c:remove var=”a”/> 删除名为a的域属性
<c:remove var=”a” scope=”page”/> 删除page域中名为a的域属性
<C:url>

<c:url value=/AServlet”/> 输出URL:/项目名/AServlet
<c:url value=/AServletvar=”url” scope=”page”/> 把生成的url保存到page域中,而不会输出
子标签:<c:param>,用来给url后面添加参数,例如:
   <c:url value="/index.jsp">
      <c:param name="username" value="张三"/>  <!--可以对参数进行url编码!!-->
    </c:url>
<C:if>

*<c:if test=”${条件}”> 当条件为true时执行标签体内容 
hello 
<c:choose>

<c:set var="score" value="${param.score }"/>
<c:choose>
    <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>[if]
    <c:when test="${score >= 90 }">A级</c:when>
    <c:when test="${score >= 80 }">B级</c:when>
    <c:when test="${score >= 70 }">C级</c:when>
    <c:when test="${score >= 60 }">D级</c:when>
    <c:otherwise>E级</c:otherwise>[else]
</c:choose>
<c:forEach>

<c:forEach var="i" begin="1" end="10">
    ${i}
  </c:forEach>

属性:
* var:循环变量
* begin:设置循环变量从几开始。
* end:设置循环变量到几结束。
* step:设置步长!等同与java中的i++,或i+=2。step默认为1

遍历集合或数组方式:

<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
    <c:out value="name: ${item }"/><br/>
</c:forEach>
  • 遍历List
<%
    List<String> names = new ArrayList<String>();
    names.add("zhangSan");
    names.add("liSi");
    pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
    <c:out value="name: ${item }"/><br/>
</c:forEach>
  • 遍历Map
 <%
    Map<String,String> stu = new LinkedHashMap<String,String>();
    stu.put("number", "N_1001");
    stu.put("name", "zhangSan");
    pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
    <c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>
  • 循环状态
    循环状态变量有如下属性:
    • count:循环元素的个数
    • index:循环元素的下标
    • first:是否为第一个元素
    • last:是否为最后一个元素
    • current:当前元素
<c:forEach items="${list }" var="ele" varStatus="vs">
    ${vs.index} ${vs.count } ${vs.first } ${vs.last } ${vs.current }<br/>
</c:forEach>
  • fmt库
<fmt:formatDate value=”” pattern=”“> 
value:指定一个Date类型的变量 
pattern:用来指定输出的模板!例如:yyyy-MM-dd HH:mm:ss 
<fmt:formatNumber value=”${num1}” pattern=”0.00”> 
保留小数点后2位,它会四舍五入!如果不足2位,以0补位! 
<fmt:formatNumber value=”${num1}” pattern=”#.##”> 
保留小数点后2位,它会四舍五入!如果不足2位,不补位!

自定义标签(实现SimpleTag接口,即简单标签)

步骤: 
1. 标签处理类:继承SimpleTagSupport类 
public class HelloTag extends SimpleTagSupport { 
public void doTag() throws JspException, IOException { 
this.getJspContext().getOut().write(“<p>Hello SimpleTag!</p>“) ; 
} 
}
标签描述符文件(tld) 
/WEB-INF/tlds/haha.tld
?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xml="http://www.w3.org/XML/1998/namespace" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                        http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">

    <tlib-version>1.0</tlib-version> 
    <short-name>haha</short-name> 
    <uri>http://www.haha.cn/tags</uri> 
    <tag> 
        <name>hello</name> <!--标签名称-->
        <tag-class>cn.haha.tag.HelloTag</tag-class> <!--标签处理类名称-->
        <body-content>empty</body-content> <!--标签体为空,即空标签-->
    </tag>
</taglib>
  1. jsp页面中使用自定义标签
<%@ taglib prefix="it"  uri="/WEB-INF/hello.tld"  %>
......
<it:hello/>

有标签体的标签

标签处理类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
PageContext pc = (PageContext) this.getJspContext();
HttpServletRequest req = (HttpServletRequest) pc.getRequest();
String s = req.getParameter(“exec”);
if(s != null && s.endsWith(“true”)) {
// 获取标签体对象
JspFragment body = this.getJspBody() ;
// 执行标签体
body.invoke (null);
}

}
}

  • tld
 <tag>
        <name>hello</name>
        <tag-class>cn.itcast.tags.HelloTag</tag-class>
        <body-content>scriptless</body-content> <!--标签体内容不可以是java脚本,但可以是el、jstl等-->
    </tag>

不执行标签下面的页面内容

public void doTag() throws JspException, IOException {
    this.getJspContext().getOut().print("<h1>只能看到我!</h1>");
    throw new SkipPageException();
}

带有属性的标签

public class IfTag extends SimpleTagSupport {
private boolean test;//设置属性,提供getter/setter方法
public boolean isTest() {
return test;
}
public void setTest (boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {//如果test为true,执行标签体内容
this.getJspBody().invoke(null);
}
}
}

<tag> 
    <name>if</name> 
    <tag-class>cn.haha.tag.IfTag</tag-class> 
    <body-content>scriptless</body-content>
    <!--部署属性-->
    <attribute> 
        <name>test</name> <!--属性名-->
        <required>true</required> <!--属性是否为必须的-->
        <rtexprvalue>true</rtexprvalue> <!--属性值是否可以为EL或JSTL等-->
    </attribute> 
</tag>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP 的相关文章

随机推荐

  • upload-labs第一关

    level1 根据提示这是本地js文件上传绕过 有两种思路 第一种将浏览器中的js检验代码删除 第二种 将一句话木马的后缀改成可以上传的文件类型 利用burp suit抓包再改包绕过js 改包过程 上传成功 获取上传的图片地址 在网页上打开
  • 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘的解决方法

    USB3 0接口不能识别U盘的解决方法 USB接口可以说是电脑的标配 现在基本上所有电脑都会搭载USB接口 而USB标准从1 0发展到现在的3 0 甚至更新的也已出来 不过 如果USB3 0无法识别U盘 那该怎么办呢 USB3 0是一种技术
  • tensorflow实战(五)——过拟合调参(2)及学习率动态调整

    我们通过采取动态调整学习率的策略 缓解过拟合问题 随着训练轮数的增加 学习率逐渐下降会使模型拟合的更好 在这里 我们设定网络结构为 model tf keras Sequential 0 255共256个 故第一个参数为256 数据为三位数
  • Docker(一)简介、环境搭建

    文章目录 一 docker简介 1 什么是docker 2 什么是容器 3 传统的虚拟化技术和容器之间的差别 4 容器运行的过程 重要 二 docker环境部署及测试 1 环境部署 2 通过镜像运行容器 3 拉取镜像 一 docker简介
  • Qt_QWidget窗体设置模态显示

    QWidget是Qt中的窗口类 实现QWidget窗口显示有三个步骤 1 实例化一个窗口类对象 类QWidget的对象可以是QWidget 也可以是QWidget的继承类 QWidget pW new QWidget NULL 2 调用函数
  • 物联网LoRa系列-28:LoRaWAN PingPong终端与Class A/B/C类型终端不能互通的原因与解决办法

    在LoRa终端与LoRa网关和服务器联调之前 有时候需要通过相对简单的PingPong终端序给Class A B C类型的终端发送数据 以验证Class A B C终端可以正常收发数据包 然而原生提供的 PingPong与Class A B
  • 怎么用VLC播放器将m3u8链接视频下载到本地

    m3u8格式链接在浏览器上打开 没有插件的情况下你会得到长得跟下面差不多的一个文本列表 有基础的同学可能知道 以 ts 结尾的那些就是视频连接的实际播放地址 当然你还要拼上前面的前缀 在浏览器上安装过插件的情况 你可以直接在线预览影片 但是
  • echarts设置柱形图宽度 最大宽度 最小宽度

    一般来说不需要设置柱形图宽度 不过如果实在是要设置也只能硬着头皮设置了 修改series对应数组里面的barWidth属性即可设置柱形图宽度 当然还有最小宽 最大宽则是barMinWidth和barMaxWidth api地址 https
  • 现在的00后,实在是太卷了,我们这些老油条都想辞职了......

    现在的小年轻真的卷得过分了 前段时间我们公司来了个00年的 工作没两年 跳槽到我们公司起薪20K 都快要超过我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好 一大家子指望他一个
  • ❤ npm install报错以及各种错误码的含义

    npm install报错以及各种错误码的含义 1 npm install 10054 报错 Error while executing 造成这个错误很有可能是网络不稳定 连接超时导致的 如果再次尝试后依然报错 可以执行下面的命令 打开Gi
  • 种类并查集+入门题A Bug's Life

    我觉得种类并查集还是先从一个基础入门题讲起吧 Background Professor Hopper is researching the sexual behavior of a rare species of bugs He assum
  • apt-get install:安装软件包命令

    apt get install 是一个用于在 Debian Ubuntu 和其他基于 Debian 的 Linux 发行版中安装软件包的命令 它是 Advanced Packaging Tool APT 工具集中的一部分 用于管理软件包的安
  • 【HBZ分享】java的大顶堆与小顶堆

    大顶堆 大顶堆属于完全二叉树的一种 大顶堆是父节点一定 大于 子节点 左右两个子节点没有顺序要求 左字节点大也行 有子节点大也可以 二叉堆就是我们所说的大顶堆 或 小顶堆 小顶堆 小顶堆也是完全二叉树 小顶堆是父节点一定 小于 子节点 左右
  • 百问网7天物联网记录(一)

    HAL库初步移植 在STM32F103 MINI开发板上成功移植 这次来移植自己的开发板 芯片是F103ZET6 一 创建文件夹 在上述文件夹中 APP存放业务逻辑代码 如main c BSP存放外设模块的驱动代码 Core存放系统配置文件
  • 潜在狄利克雷分配(LDA)(latent Dirichlet allocation)

    我们先理解下多项分布 狄利克雷分布 共轭先验的知识 再讲LDA的基本思想 最后简单说一下LDA和PLSA之间的区别 关于LDA的学习过程 比较复杂 就不讲了 多项分布 假设重复进行 次独立随机试验 每次实验可能出现的结果有 种 第 种结果出
  • nio简单例子

    缓冲区底层就是数组用于存储不同的数据类型 boolean除外 ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer 上述缓冲区通过al
  • SASS详解之继承(extend)

    每一个类名都有可能有另一个类名的所有样式和它自己的特定样式的 当一个div的身上有两个类名 一个是 one 另一个是 two 的时候 如下 HTML代码 div class one two 梦龙小站 div CSS代码 one width
  • js获取时区信息

    js获取时区信息 在做跨境项目的时候 有可能会涉及到时区问题 获取时区信息 let time new Date let timeZone time toLocaleTimeString en us timeZoneName short 1
  • 形式化方法

    形式化方法 Formal Methods 在逻辑科学中是指分析 研究思维形式结构的方法 它把各种具有不同内容的思维形式 主要是命题和推理 加以比较 找出其中各个部分相互联结的方式 如命题中包含概念彼此间的联结 推理中则是各个命题之间的联结
  • JSP

    jsp简介 1 JSP Java Server Pages 是JavaWeb服务器端的动态资源 它与html页面的作用是相同的 显示数据和获取数据 2 jsp 作为请求发起页面 例如显示表单 超链接 作为请求结束页面 例如显示数据 3 Se