JavaWeb笔记之JSP

news2025/1/16 18:03:58

    

一、引言

现有问题
在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处?
开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解。
代码修改麻烦:重新编译、部署、重启服务。
显示方式麻烦:获取流、使用println("");逐行打印。
协同开发麻烦:UI负责美化页面,程序员负责编写代码。UI不懂Java,程序员又不能将所有前端页面的内容通过流输出。
    

二、JSP

2.1 概念
简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页。
Java Server Pages。
  
2.2 作用
替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)。
  

三、JSP开发

3.1 创建JSP
在web目录下新建*.jsp文件(与WEB-INF平级)。
  
3.1.1 编写代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>This is my first page</title>
</head>
<body>
    <%=new java.util.Date() %>
</body>
</html>
   
使用<%= %>标签编写Java代码在页面中打印当前系统时间。
  
3.1.2 访问JSP
在浏览器输入http://ip:port/项目路径/资源名称。
  
3.2 JSP与Servlet
关系
        JSP文件在容器中会转换成Servlet执行。
        JSP是对Servlet的一种高级封装。本质还是Servlet。
区别
        与 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。

     
3.3 JSP实现原理
Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。

   

四、集成开发

4.1 脚本
脚本可以编写Java语句、变量、方法或表达式。
    
4.1.1 普通脚本
语法:<% Java代码 %>
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
    //jsp中,使用小脚本嵌入java代码!
    out.println("hi");//打印内容在客户端页面
    System.out.println("hi");//打印内容在控制台
%>
</body>
</html>
   
经验:普通脚本可以使用所有Java语法,除了定义函数。
注意:脚本与脚本之间不可嵌套,脚本与HTML标签不可嵌套。
    
4.1.2 声明脚本
语法:<%! 定义变量、函数 %>
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Object object = new Object(); %>
<%!
    //定义方法
    public void m1(){
        System.out.println("你好");
    }
%>
   
注意:声明脚本声明的变量是全局变量。
声明脚本的内容必须在普通脚本<% %>中调用。
如果声明脚本中的函数具有返回值,可以使用输出脚本调用<%= %>。
  
4.1.3 输出脚本
语法:<%=Java表达式 %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>
    今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
  
经验:输出脚本可以输出带有返回值的函数。
注意:输出脚本中不能加。
  
4.2 JSP注释
JSP注释主要有两个作用:为脚本代码作注释以及HTML内容注释。
    
4.2.1 语法

  
4.2.2 注释
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基础教程</title>
</head>
<body>
<%-- JSP注释在网页中不会被显示--%>
<!-- HTML注释在网页源代码中会显示 -->
<p>
    今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
      
4.3 JSP指令
JSP指令用来设置与整个JSP页面相关的属性。

     
4.3.1 page指令
语法:<%@ page attribute1="value1" attribute2="value2" %>
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

  
4.3.2 include指令
语法:<%@ include file = "被包含的JSP路径"%>
通过include指令来包含其他文件。
被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。
<%@ include file="header.jsp"%>
...
...
<%@ include file="footer.jsp" %>
  
注意:可能会有重名的冲突问题,不建议使用。
  

4.3.3 taglib指令
语法:<%@ taglib uri="外部标签库路径" prefix="前缀" %>
引入JSP的标准标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
   
4.4 动作标签
语法:<jsp:action_name attribute="value" />
动作标签指的是JSP页面在运行期间的命令。
  
4.4.1 include
语法:<jsp:include page="相对 URL 地址" />
<jsp:include >动作元素会将外部文件输出结果包含在JSP中(动态包含)。

  
<jsp:include page="index.jsp"/>
  
注意:前面已经介绍过include指令,它是将外部文件的输出代码复制到了当前JSP文件中。而这里的jsp:include动作不同,是将外部文件的输出结果引入到了当前JSP文件中。
  
4.4.2 useBean
语法:<jsp:useBean id="name" class="package.className" />
jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。
<jsp:useBean id="user" class="com.liuy.entity.User"/>
   
在类载入后,我们可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和获取bean的属性。
   
4.4.3 setProperty
可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值。

   
<jsp:useBean id="user" class="com.liuy.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
    
4.4.4 getProperty
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。

  
<jsp:useBean id="user" class="com.liuy.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
<jsp:getProperty name="user" property="name" />
   
4.4.5 forward
语法:<jsp:forward page="相对 URL 地址" />
jsp:forward动作把请求转到另外的页面。

   
<jsp:forward page="index.jsp" />
  
4.4.6 param
语法:<jsp:param name="" value=""/>
在转发动作内部使用,做参数传递。
  
<jsp:forward page="index.jsp">
    <!-- http请求参数传递-->
    <jsp:param name="sex" value="nan" />
</jsp:forward>
     
4.5 内置对象
由JSP自动创建的对象,可以直接使用。

     
4.5.1 四大域对象
JSP有四大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别。
pageContext (javax.servlet.jsp.PageContext) 当前JSP页面范围。
request (javax.servlet.http.HttpServletRequest) 一次请求有效。
session (javax.servlet.http.HttpSession) 一次会话有效(关闭浏览器失效)。
application (javax.servlet.ServletContext) 整个Web应用有效(服务器重启或关闭失效)。
  
4.5.2 pageContext
pageContext对象是javax.servlet.jsp.PageContext 类的实例,拥有作用域,用来代表整个JSP页面。
当前页面的作用域对象,一旦跳转则失效。
通过setAttribute("name",value);存储值。
通过getAttribute("name");获取值。
用于获取其他8个内置对象或者操作其他对象的作用域。
<%
    pageContext.setAttribute("name",value);//当前页面作用域有效
%>
  
4.5.3 获取内置对象
<%
    pageContext.getRequest();//返回request内置对象
    pageContext.getResponse();//返回response内置对象
    pageContext.getServletConfig();//返回config内置对象
    pageContext.getException();//返回exception内置对象
    pageContext.getPage();//返回page内置对象
    pageContext.getOut();//返回out内置对象
    pageContext.getServletContext();//返回application内置对象
    pageContext.getSession();//返回session内置对象
%>
     
4.5.4 作用域
pageContext对象可以操作其他作用域存储和获取。
<%
    //操作其他作用域存储
    pageContext.setAttribute("name",value);//当前页面有效
    pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
    pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
    pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
%>

<%
    //操作其他作用域获取
    pageContext.getAttribute("name");//当前页面作用域
    pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
    pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
    pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
    pageContext.findAttribute("name");//从pageContext ,request ,session ,application依次查找
%>
   
4.6 整合
将EmpProject项目所有显示页面JSP的Servlet替换为JSP页面,使用脚本进行显示。
  

五、EL表达式

5.1 概念
EL使JSP写起来更简单、简洁。主要用于获取作用域中的数据。
Expression Language
   
5.2 作用
用于替换作用域对象.getAttribute("name");
   
5.3 EL的应用
${scope.name} 获取具体某个作用域中的数据。
${name} 获取作用域中的数据,逐级查找(pageContext、request、session、application)。
  
5.3.1 案例
<%
    //存储在request作用域
    request.setAttribute("name","tom");
    request.setAttribute("age",18);
%>
${requestScope.name} <%--获取request作用域中name对应的值,找到就返回,没找到返回"" --%>
${name}<%--从最小作用域逐级查找name对应的值,找到就返回,没找到返回"" --%>
   
5.3.2 区别
<%=request.getAttribute() %> 没有找到返回null。
${requestScope.name} 没找到返回""。
  
5.4 获取引用类型
使用EL获取作用域中的对象调用属性时,只能访问对象的get方法,必须遵守命名规范定义。
<%
    Emp e = new Emp();
    e.setName("gavin");
    e.setAge(19);
    request.setAttribute("e",e);
%>
${requestScope.e.name}<%-- 调用getName()方法 --%>
    
5.5 获取集合元素
EL可以获取Array、List、Map中的元素,Set由于没下标,无法直接访问元素,后续可遍历。
<%
    int[] array = new int[]{1,2,3,4,5};
    request.setAttribute("array",array);
    List<Emp> emps = new ArrayList<>();
    emps.add(new Emp(1,"gavin",2000,19));
    emps.add(new Emp(2,"marry",3000,29));
    emps.add(new Emp(3,"jack",4000,39));
    request.setAttribute("emps",emps);
    Map<String,String> maps = new HashMap<>();
    maps.put("CN","中国");
    maps.put("FK","法国");
    maps.put("US","美国");
    request.setAttribute("maps",maps);
%>
${requestScope.array[0]}
${requestScope.emps[0]} <%-- 也可以用 ${requestScope.emps.get(0)} --%>
${requestScope.maps.CN} <%-- 也可以用 ${requestScope.maps["US"]} -->
    
5.6 运算符

     
5.6.1 执行运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>运算符</title>
</head>
<body>
    <%
        request.setAttribute("num",1234);
        String ss = "123";
        request.setAttribute("ss",ss);
    %>
    <h1>算术运算</h1>
    ${num + 1}<br/>
    ${num - 1}<br/>
    ${num * 2}<br/>
    ${num div 2}<br/>
    ${num mod 2}<br/>
    <hr/>
        <h1>关系运算</h1>
    ${num == 1234}<br/>
    ${num != 1234}<br/>
    ${num > 1200}<br/>
    ${num < 1200}<br/>
    ${num >= 1234}<br/>
    ${num <= 1234}<br/>
    <hr/>
        <h1>逻辑运算</h1>
    ${num %2==0 || num /2 ==1}<br/>
    ${num % 2==0 && num % 4==0}<br/>
    ${!(num > 1234)}<br/>
    <hr/>
        <h1>empty运算符</h1>
    ${ss == null}<br/>
    ${empty ss}<br/>
</body>
</html>
    
5.6.2 empty
<%
    String s1="";
    pageContext.setAttribute("s1", s1);
    String s2=null;
    pageContext.setAttribute("s2", s2);
    String s3="122222";
    pageContext.setAttribute("s3", s3);
    List list1 =new ArrayList();
    pageContext.setAttribute("list1", list1);
%>
<!-- empty关键只要内容是空true -->
${empty s1}<br>
${empty s2}<br>
${empty s3}<br>
${empty list1}<br>
   
5.7 隐式对象
EL 表达式语言定义了11个隐式对象。

    
5.7.1 上下文
<%=request.getContextPath() %>
${pageContext.request.contextPath}
  
5.7.2 获取Cookie
${cookie.username}//获取名为username的cookie对象
${cookie.password}//获取名为password的cookie对象
${cookie.password.value}//获取password的cookie的value值
   

六、JSTL

6.1 问题
EL主要是用于作用域获取数据,虽然可以做运算判断,但是得到的都是一个结果,做展示。
EL不存在流程控制。比如判断。
EL对于集合只能做单点访问,不能实现遍历操作。比如循环。
   
6.2 概念
JSTL:全称Java Server Pages Standard Tag Library
JSP标准标签库(JSTL)是一个JSP标签集合。

Core (核心库) 标签库的URI:http://java.sun.com/jsp/jstl/core 常用前缀:c
I18N(国际化) 标签库的URI:http://java.sun.com/jsp/jstl/fmt 常用前缀:fmt
SQL 标签库的URI:http://java.sun.com/jsp/jstl/sql 常用前缀:sql
XML 标签库的URI:http://java.sun.com/jsp/jstl/xml 常用前缀:x
Functions 标签库的URI:http://java.sun.com/jsp/jstl/functions 常用前缀:fn
  

6.3 作用
可对EL获取到的数据进行逻辑操作。
与EL合作完成数据的展示。 
  
6.4 使用
导入两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。
在JSP页面引入标签库<% @taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
  
6.5 核心标签
6.5.1 条件标签
语法:<c:if test ="条件"> < /c:if>
<!-- test属性中是条件,但是条件需要使用EL表达式来书写 -->
<h3>条件标签:if</h3>
<c:if test="${8>2 }">
    8大于2是成立的
</c:if>
<c:if test="${8<2 }">
    8小于2是成立的
</c:if>
  
6.5.2 choose
语法:<c:choose >
<c:when test="条件1">结果1< /c:when>
<c:when test="条件2">结果2< /c:when>
<c:when test="条件3">结果3< /c:when>
<c:otherwise >结果4< /c:otherwise>
 < /c:choose>
<h3>条件标签:choose(等价于java中多重if)</h3>
<%-- 测试成绩等级 >90 优秀 >80 良好 >70 中等 >60及格--%>
<c:set var="score" value="80"></c:set>
<c:choose>
    <c:when test="${score>=90 }">优秀</c:when>
    <c:when test="${score>=80 }">良好</c:when>
    <c:when test="${score>=70 }">中等</c:when>
    <c:when test="${score>=60 }">及格</c:when>
    <c:otherwise>不及格</c:otherwise>
</c:choose>
  
6.5.3 foreach
语法
<c:foreach
    var="变量名"
    items="集合"
    begin="起始下标"
    end="结束下标"
    step="间隔长度"
    varstatus="遍历状态">
< /c:foreach>
<h3>测试list集合遍历获取学生列表</h3>
    <table border="1" width="80%" bordercolor="red" cellspacing="0"align="center">
        <tr>
            <th>学号</th>
            <th>姓名</th>
            <th>成绩</th>
            <th>班级</th>
            <th>是否是第一个</th>
            <th>是否是最后一个</th>
            <th>计数count</th>
            <th>索引index</th>
        </tr>
<!-- varStatus:变量状态:遍历出的每一项内容的状态:
    first 是否是第一行
    last 是否是最后一行
    count 当前行数
    index 当前元素的下标
    -->
    <!-- var :遍历出的每一项使用变量先存储
        items:集合(使用El表达式)
    -->
    <c:forEach var="stu" items="${students}" varStatus="vs">
        <tr>
            <td>${stu.id}</td>
            <td>${stu.name}</td>
            <td>${stu.score}</td>
            <td>${stu.classes}</td>
            <td>${vs.first}</td>
            <td>${vs.last}</td>
            <td>${vs.count}</td>
            <td>${vs.index}</td>
        </tr>
    </c:forEach>
</table>
  
6.5.4 url
在Cookie禁用的情况下,通过重写URL拼接JSESSIONID来传递ID值。便于下一次访问时仍可查找到上一次的Session对象。
<c:url context='${pageContext.request.contextPath}' value='/xxxController' />
//在form表单的action中嵌套动态路径
<form action="<c:url context='${pageContext.request.contextPath}'
value='/xxxController' />">
</form>
  
经验:所有涉及到页面跳转或者重定向跳转时,都应该使用URL重写。
  
6.6 fmt
<c:set var="now" value="<%=new java.util.Date()%>" />

<p>日期格式化 (1): <fmt:formatDate type="time"
    value="${now}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date"
    value="${now}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both"
    value="${now}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both"
    dateStyle="short" timeStyle="short"
    value="${now}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both"
    dateStyle="medium" timeStyle="medium"
    value="${now}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both"
    dateStyle="long" timeStyle="long"
    value="${now}" /></p>
<p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd"
    value="${now}" /></p>

日期格式化 (1): 11:19:43
日期格式化 (2): 2016-6-26
日期格式化 (3): 2016-6-26 11:19:43
日期格式化 (4): 16-6-26 上午11:19
日期格式化 (5): 2016-6-26 11:19:43
日期格式化 (6): 2016年6月26日 上午11时19分43秒
日期格式化 (7): 2016-06-26
<c:set var="balance" value="120000.2309" />

<p>格式化数字 (1): <fmt:formatNumber value="${balance}"
    type="currency"/></p>
<p>格式化数字 (2): <fmt:formatNumber type="number"
    maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (3): <fmt:formatNumber type="number"
    maxFractionDigits="3" value="${balance}" /></p>
<p>格式化数字 (4): <fmt:formatNumber type="number"
    groupingUsed="false" value="${balance}" /></p>
<p>格式化数字 (5): <fmt:formatNumber type="percent"
    maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (6): <fmt:formatNumber type="percent"
    minFractionDigits="10" value="${balance}" /></p>
<p>格式化数字 (7): <fmt:formatNumber type="percent"
    maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (8): <fmt:formatNumber type="number"
    pattern="###.###E0" value="${balance}" /></p>
<p>美元 :
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="${balance}" type="currency"/></p>

格式化数字 (1): ¥120,000.23
格式化数字 (2): 000.231
格式化数字 (3): 120,000.231
格式化数字 (4): 120000.231
格式化数字 (5): 023%
格式化数字 (6): 12,000,023.0900000000%
格式化数字 (7): 023%
格式化数字 (8): 120E3
美元 : $120,000.23
  
6.7 整合
将现有的EmpProject项目进行整合,使用EL+JSTL替换脚本代码。
  

七、MVC框架

7.1 MVC概念
Model-View-Controller
MVC又称为编程模式,是一种软件设计思想,将数据操作、页面展示、业务逻辑分为三个层级(模块),独立完成,相互调用。
        模型层(Model)
        视图(View)
        控制器(Controller)
    
7.2 详解
MVC并不是Java独有的,现在几乎所有的B/S的架构都采用了MVC模式。
        视图View:视图即是用户看到并与之交互的界面,比如HTML(静态资源),JSP(动态资源)等等。
        控制器Controller:控制器即是控制请求的处理逻辑,对请求进行处理,负责流程跳转(转发和重定向)。
        模型Model:对客观世界的一种代表和模拟(业务模拟、对象模拟)。
    

7.3 优点
低耦合性:模块与模块之间的关联性不强,不与某一种具体实现产生密不可分的关联性。
高维护性:基于低耦合性,可做到不同层级的功能模块灵活更换、插拔。
高重用性:相同的数据库操作,可以服务于不同的业务处理。将数据作为独立模块,提高重用性。
  

7.4 应用
MVC模式被广泛用于Java的各种框架中,比如Struts2、SpringMVC等等都用到了这种思想。
  
7.5 三层架构与MVC
7.5.1 三层架构
View层(表示|界面层)、Service层(业务逻辑层)、DAO层(数据访问层)。

  
7.5.2 区别
MVC强调的是视图和业务代码的分离。严格的说MVC其实关注的是Web层。View就是单独的页面,如JSP、HTML等,不负责业务处理,只负责数据的展示。而数据封装到Model里,由Controller负责在V和M之间传递。MVC强调业务和视图分离。
三层架构是“数据访问层”、“业务逻辑层”、“表示层”,指的是代码之间的解耦,方便维护和复用。

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

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

相关文章

Linux创建macvlan 测试bridge、private和vepa模式

Linux创建macvlan&#xff0c;测试bridge、private和vepa模式 最近在看Docker的网络&#xff0c;看到关于macvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 环境 操…

[THUPC 2024 初赛] 二进制 (树状数组单点删除+单点查询)(双堆模拟set)

题解 题目本身不难想 首先注意到所有查询的序列长度都是小于logn级别的 我们可以枚举序列长度len&#xff0c;然后用类似滑动窗口的方法&#xff0c;一次性预处理出每种字串的所有出现位置&#xff0c;也就是开N个set去维护所有的位置。预处理会进行O(logn)轮&#xff0c;每…

Web前端复习

一、随堂练习 1.小题 margin vanish&#xff1a;border和inline-block都可以形成bfc二维数组转置&#xff1a;res[i] [];函数的不同声明定义&#xff1a; 有变量名字的函数&#xff0c;即便后面声明了同样的&#xff0c;以函数表达式为主&#xff1b;定义&#xff0c;运行。再…

智能优化算法应用:基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.…

RocketMQ实践:确保消息不丢失与顺序性的高效策略

一、使用RocketMQ如何保证消息不丢失&#xff1f; 这个是在面试时&#xff0c;关于MQ&#xff0c;面试官最喜欢问的问题。这个问题是所有MQ都需要面对的一个共性问 题。大致的解决思路都是一致的&#xff0c;但是针对不同的MQ产品又有不同的解决方案。分析这个问题要从以 下几…

YOLOv5涨点技巧:一种新颖的多尺度滑窗注意力,助力小目标和遥感影像场景

💡💡💡本文全网独家改进:提出了一种新颖的多尺度滑窗注意力机制,有效的应用在遥感影像和小目标场景,实现涨点。 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! �…

数据校园服务管理系统,教育平台可视化界面(教育资源信息化PS文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享大数据校园服务管理系统、科技教育平台大数据可视化界面、教育资源信息化大数据分析等Photoshop源文件&#xff0c;文末提供完整资料&#xff0c;供UI设计师们工作使用。 若需其他 大屏…

Leetcod面试经典150题刷题记录 —— 哈希表篇

Leetcod面试经典150题刷题记录 —— 哈希表篇 1. 赎金信2. 同构字符串(按逻辑完整性&#xff0c;分次书写代码)3. 单词规律4. 有效的字母异位词4.1 进阶: 输入字符串包含 unicode 字符 5. 字母异位词分组6. 两数之和7. 快乐数hash集合检测循环隐式链表快慢指针&#xff08;弗洛…

非线性约束的优化问题_序列二次规划算法代码

1. 理论部分 2. 序列二次规划算法代码及解析 3.完整代码 1.理论部分 a.约束优化问题的极值条件 库恩塔克条件(Kuhn-Tucker conditions&#xff0c;KT条件)是确定某点为极值点的必要条件。如果所讨论的规划是凸规划&#xff0c;那么库恩-塔克条件也是充分条件。 &#xff…

JBoss JMXInvokerServlet 反序列化漏洞 CVE-2015-7501 已亲自复现

JBoss JMXInvokerServlet 反序列化漏洞 CVE-2015-7501 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 在Oracle Rapid Planning 12.1/12.2.2中发现了一个被归类为“严重”的漏洞。受到影响的是一些未知的组件处理中间层。升…

SQL进阶理论篇(二十):什么是SQL注入

文章目录 简介SQL注入的原理SQL注入的实例搭建sqli-labs注入环境实例一&#xff1a;猜测where条件判断查询语句的字段数获取当前数据库和用户信息获取MySQL中的所有数据库名称查询wucai数据库中的所有数据表查询heros数据表中的所有字段参考文献 简介 这节是纯兴趣篇了。 web…

RocketMQ事务消息实现分布式事务

文章目录 简介实现原理实现逻辑 简介 RocketMQ事务消息 RocketMQ在4.3.0版中支持分布式事务消息&#xff0c;这里RocketMQ的事务消息是采用2PC(两段式协议) 补偿机制&#xff08;消息回查&#xff09;的分布式事务功能。提供消息发送与业务落库的一致性。 RocketMQ事务消息&am…

MicroPython的交互式解释器模式 REPL

MicroPython的交互式解释器模式又名REPL&#xff08;read-eval-print-loop&#xff09;&#xff0c;就是一种命令输入交互模式&#xff0c;跟Python的REPL是类似的&#xff0c;就是在命令行直接输入Python代码或表达式执行并打印结果。关于MicroPython的REPL跟通常的Python类似…

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…

【常见的语法糖(详解)】

&#x1f7e9; 说几个常见的语法糖 &#x1f7e2;关于语法糖的典型解析&#x1f7e2;如何解语法糖&#xff1f;&#x1f7e2;糖块一、switch 支持 String 与枚举&#x1f4d9;糖块二、泛型&#x1f4dd;糖块三、自动装箱与拆箱&#x1f341;糖块四、方法变长参数&#x1f5a5;️…

Linux多线程:POSIX信号量,基于信号量的环形队列实现生产者消费者模型

目录 一、POSIX信号量1.1 初始化信号量1.2 销毁信号量1.3 等待信号量1.4 发布信号量1.5 基于环形队列的生产消费模型(用信号量控制生产者和消费者之间的同步互斥关系)1.5.1 makefile1.5.2 RingQueue.hpp1.5.3 Sem.hpp1.5.4 Task.hpp1.5.5 main.cc 二、信号量控制的环形队列原理…

.Net 访问电子邮箱-LumiSoft.Net,好用

序言&#xff1a; 网上找了很多关于.Net如何访问电子邮箱的方法&#xff0c;但是大多数都达不到想要的需求&#xff0c;只有一些 收发邮件。因此 花了很大功夫去看 LumiSoft.Net.dll 的源码&#xff0c;总算做出自己想要的结果了&#xff0c;果然学习诗人进步。 介绍&#xff…

Qt 开源项目

Qt 开源项目 Omniverse View链接技术介绍 QuickQanava链接技术介绍QField链接技术介绍 AtomicDEX链接技术介绍 Status-desktop链接技术介绍 Librum链接技术介绍 A Simple Cross-Platform ReaderQPrompt链接技术介绍 GCompris链接技术介绍 Scrite链接技术介绍 QSkinny链接技术介…

如何在PC上运行大模型

如何在PC上运行大模型 在PC上使用CPU运行大模型不如使用GPU高效&#xff0c;但仍然是可以实现的大模型推理。 大模型训练要求的资源更高&#xff0c;这里直接使用面向开源的Facebook’s LLaMA model(llama-2-7b-chat.Q2_K.gguf)。 连接CPU与LLaMA model的是llama.cpp。 为方便…

认识Linux背景

1.发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史 要说Linux&#xff0c;还得从UNIX说起 UNIX发展的历史 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Mu…