皓学IT:WEB07_ JSP

一、Jsp基础语法

1.1. JSP模板元素

JSP页面中的HTML内容称之为JSP模版元素。

JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。

1.2. JSP脚本片段

JSP脚本片断用于在JSP页面中编写多行Java代码(在<%%>不能定义方法)。

语法:<%多行java代码%>

例如:

<%

int num = 0;

num = ++num;

out.println("num" + num);

%>

注意:

1、JSP脚本片断中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。

2、JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

3、在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。

4、多个脚本片断中的代码可以相互访问

1.3. JSP表达式

JSP脚本表达式(expression)用于将程序数据输出到客户端,语法:<%=变量或表达式 %>

例如:

<%="123" %>

1.4. JSP声明

JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面。语法:<%!java代码 %>

JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法。

例如

<%!

static{

System.out.println("静态代码块");

}

private String name = "xinzhi";

public void TestFun(){

System.out.println("成员方法");

}

%>

<%

TestFun();

out.println("name:" + name);

%>

1.5. JSP注释

在JSP中,注释有显式注释, 隐式注释,JSP自己的注释:

区别:

HTML的注释在浏览器中查看源文件的时候是可以看得到的,而JAVA注释和JSP注释在浏览器中查看源文件时是看不到注释的内容的。

二、Jsp原理

2.1. Jsp本质上是什么

浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp编译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet。

所以jsp的本质其实就是个html模板,编译器会根据模板生成对应的servlet。

例如下面的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+path;
%>
<html>
<head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Insert Title here</title>
</head>
<body><%!static {System.out.println("静态代码块");}
​private String name = "IT老王";
​public void TestFun(){System.out.println("成员方法!");}%><%TestFun();out.println("name:" + name);%>
</body>
</html>

当我们通过浏览器访问index.jsp时,服务器首先将index.jsp翻译成一个index_jsp.class,在Tomcat服务器的work\Catalina\localhost\项目名\org\apache\jsp目录下可以看到index_jsp.class的源代码文件index_jsp.java

package org.apache.jsp.web;
​
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
​
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {
​
​static {System.out.println("静态代码块");}
​private String name = "IT老王";
​public void TestFun(){System.out.println("成员方法!");}private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();
​private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
​private static final java.util.Set<java.lang.String> _jspx_imports_packages;
​private static final java.util.Set<java.lang.String> _jspx_imports_classes;
​static {_jspx_imports_packages = new java.util.HashSet<>();_jspx_imports_packages.add("javax.servlet");_jspx_imports_packages.add("javax.servlet.http");_jspx_imports_packages.add("javax.servlet.jsp");_jspx_imports_classes = null;}
​private volatile javax.el.ExpressionFactory _el_expressionfactory;private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
​public java.util.Map<java.lang.String,java.lang.Long> getDependants() {return _jspx_dependants;}
​public java.util.Set<java.lang.String> getPackageImports() {return _jspx_imports_packages;}
​public java.util.Set<java.lang.String> getClassImports() {return _jspx_imports_classes;}
​public javax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();}}}return _el_expressionfactory;}
​public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {if (_jsp_instancemanager == null) {synchronized (this) {if (_jsp_instancemanager == null) {_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}}}return _jsp_instancemanager;}
​public void _jspInit() {}
​public void _jspDestroy() {}
​public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {
​final java.lang.String _jspx_method = request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");return;}
​final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.PageContext _jspx_page_context = null;
​
​try {response.setContentType("text/html;charset=UTF-8");pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);_jspx_page_context = pageContext;application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;
​out.write('\n');out.write('\n');
​String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
​out.write("\n");out.write("<html>\n");out.write("<head>\n");out.write("  <base href=\"");out.print(basePath);out.write("\">\n");out.write("  <meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n");out.write("  <title>Insert Title here</title>\n");out.write("</head>\n");out.write("<body>\n");out.write("  ");out.write('\n');out.write(' ');out.write(' ');
​TestFun();out.println("name:" + name);out.write("\n");out.write("</body>\n");out.write("</html>\n");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}
}

index_jsp这个类是继承org.apache.jasper.runtime.HttpJspBase这个类的,通过查看HttpJspBase源代码,可以知道HttpJspBase类是继承HttpServlet的,所以HttpJspBase类是一个Servlet,而index_jsp又是继承HttpJspBase类的,所以index_jsp类也是一个Servlet,所以当浏览器访问服务器上的index.jsp页面时,其实就是在访问index_jsp这个Servlet,index_jsp这个Servlet使用_jspService这个方法处理请求。

HttpJspBase源码如下:

packageorg.apache.jasper.runtime;
​
import java.io.IOException;//IO异常
import javax.servlet.ServletConfig;//小服务程序配置
import javax.servlet.ServletException;//小服务程序异常
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;//请求对象
import javax.servlet.http.HttpServletResponse;//响应对象
import javax.servlet.jsp.HttpJspPage;
import org.apache.jasper.compiler.Localizer;//定位器
​
/**HttpJspBase本身是个抽象类,继承了httpservlet实现了httpJspPage接口
​*httpJspPage接口实现了servlet(),JspPage接口(两抽象方法jspDestroy,jspInit)而本身创建jspservice(request,response)方法,用于JSP页面工作,同时继承了jsppage两个抽象方法又从继承的servlet接口中实现了destroy,getservletconfig,getservletinfo,init,service(五个),所以httpJsppage共实现了七个父类接口的抽象方法(jsppage两个,servlet五个)*/*/*/*五个),本身创建一个jspservice方法用于jsp页面工作*---------------------------------------------------------------------------------------------------------------*HttpServlet类继承了servlet接口(5个方法)和servletconfig接口(三个方法)
​*/
public abstractclass HttpJspBase extends HttpServlet implements HttpJspPage{protected HttpJspBase(){}
​public final void init(ServletConfig config)throws ServletException{super.init(config);
​jspInit();_jspInit();}public String getServletInfo(){returnLocalizer.getMessage("jsp.engine.info");}
​public final void destroy(){jspDestroy();
​_jspDestroy();
​}public final void service(HttpServletRequestrequest, HttpServletResponse response)throws ServletException, IOException{_jspService(request, response);
​}
​public void jspInit(){}public void _jspInit(){}public void jspDestroy(){}protected void _jspDestroy(){}
​public abstract void _jspService(HttpServletRequest paramHttpServletRequest, HttpServletResponseparamHttpServletResponse)throws ServletException, IOException;
}

2.2. _jspService方法

问题1:Jsp页面中的html排版标签是如何被发送到客户端的?

浏览器接收到的这些数据,都是在_jspService方法中使用如下的代码输出给浏览器的。

问题2:Jsp页面中的java代码服务器是如何执行的?

在jsp中编写的java代码会被翻译到jspService方法中去,当执行jspService方法处理请求时,就会执行在jsp编写的java代码了,所以Jsp页面中的java代码服务器是通过调用_jspService方法处理请求时执行的。

2.3. jsp在服务器的执行流程

第一次执行:

1. 客户端通过电脑连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理。

2. 在容器中找到需要执行的*.jsp文件

3. 之后*.jsp文件通过转换变为 *.java文件

4. *.java文件经过编译后,形成 *.class文件

5. 最终服务器要执行形成的*.class文件

第二次执行:

  1. 因为已经存在了*.class文件,所以不在需要转换和编译的过程

修改后执行:

  1. 源文件已经被修改过了,所以需要重新转换,重新编译。

三、 JSP指令

3.1. JSP指令标识的语法格式

  • 指令名:用于指定指令名称 在JSP中包含 page、 include、 taglib 这3种指令

  • 属性: 用于指定指令属性名称 不同的指令包含不同的属性 在同一个指令中可以设置多个属性 各个属性之间用逗号或者空格隔开

  • 属性值:用于指定属性的值

注意点:

指令标识<%@%>是一个完整的指令,不能够添加空格,但是便签中定义的属性与指令名之间是有空格的

3.2. Page指令

page指令是JSP页面中最常见的指令,用于定义整个JSP页面的相关属性

语法格式

<%@ page 属性1 = “属性1的值” 属性2 = “属性2的值” ......%>

page指令的相关属性

language属性

用于设置整个JSP页面的使用的语言,目前只支持JAVA语言,改属性默认值是java

<%@ page language="java" %>

import属性

设置JSP导入的包

<%@ page import="java.util.*" %>

contentType属性

这种JSP页面的编码格式,也就是指定文件编码

设置JSP页面的MIME类型和字符编码

<%@ page contentType="text/html;charset=UTF-8" %>

session属性

设置页面是否使用HTTP的session会话对象。Boolean类型,默认值是true

<%@ page session="false" %>

  • session是JSP的内置对象之一

autoFlush属性

设置JSP页面缓存满时,是否自动刷新缓存,默认值是:true,如果这种为false,则当页面缓存满时就会抛出异常

<%@ page autoFlush="false" %>

isErrorPage属性

可以把当前页面设置成错误处理页面来处理另外jsp页面的错误

<%@ page isErrorPage="true" %>

errorPage属性

指定当前jsp页面异常错误的另一个Jsp页面,指定的jsp页面的isErrorPage属性必须为true,属性值是一个url字符串

<%@ page errorPage="errorPage.jsp" %>

3.3. include指令

include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:<%@ include file="relativeURL"%>

file属性用于指定被引入文件的路径。路径以"/"开头,表示代表当前web应用。

注意细节:

  1. 被引入的文件必须遵循JSP语法。

  2. 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。

  3. 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

3.4.taglib指令

导入资源,通常用于导入标签库(prefix:前缀,可自定义)

eg:

<%@ taglib prefix="s" uri="/struts-tags"%>(导入struts标签库)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>(导入jstl标签库)

四、 JSP标签

4.1. Jsp标签分类

1)内置标签(动作标签): 不需要在jsp页面导入标签

2)jstl标签: 需要在jsp页面中导入标签

3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

常用内置标签有以下三个:

  • 标签一< jsp:include >

< jsp:include >标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面

执行时的引入方式称之为动态引入。

语法:

<jsp:include page="header.jsp/header.html" flush="true"></jsp:include >

标签与include指令的区别:

< jsp:include>标签是动态引入, < jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。 而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。

  • 标签二< jsp:forward>

    < jsp:forward>标签用于把给另外一个资源(服务器跳转,地址不变)

  • 标签三< jsp:param>

    <%--使用jsp:forward标签进行请求转发--% >

    <jsp:forward page="/index2.jsp" >

    <jsp:param value="10086" name="num"/>

    <jsp:param value="10010" name="num2"/>

    </jsp:forward >

五、九大内置对象

5.1.request 对象

代表的是来自客户端的请求 , 客户端发送的请求封装在 request 对象中 , 通过它才能了解到用户的请求信息 , 然后作出响应 , 它是 HTTPServletRequest 的实例

作用域为 request ( 响应生成之前 )

5.2. response 对象

对象代表的是对客户端的响应 , 也就是说可以通过 response 对象来组织发送到客户端的数据 ; 但是由于组织方式比较底层 , 所以不建议初学者使用 , 需要向客户端发送文字时直接使用 ; 它是HttpServletResponse 的实例 ;

作用域为 page ( 页面执行期 )

常用方法

5.3. session 对象

指的是客户端与服务器的一次会话 , 从客户连接到服务器的一个 WebApplication 开始 , 直到客户端与服务器断开连接为止 ; 它是 HTTPSession 类的实例

作用域为 session ( 会话期 )

5.4. out 对象

out 对象是 JspWriter 类的实例,是向客户端输出内容常用的对象 ;

作用域为 page ( 页面执行期 )

5.5. page 对象

page 对象就是指向当前 JSP 页面本身 , 有点象类中的 this 指针 , 它是 Object 类的实例 ; page 对象代表了正在运行的由 JSP 文件产生的类对象 , 不建议初学者使用 ;

作用域为 page ( 页面执行期 )

常用方法:

5.6. application 对象

实现了用户间数据的共享 , 可存放全局变量 ; 它开始于服务器的启动 , 直到服务器的关闭 , 在此期间 , 此对象将一直存在 ; 这样在用户的前后连接或不同用户之间的连接中 , 可以对此对象的同一属性进行操作 ;在任何地方对此对象属性的操作 , 都将影响到其他用户对此的访问 ; 服务器的启动和关闭决定了application 对象的生命 ; 它是 ServletContext 类的实例 ;

作用域为 application

5.7. pageContext 对象

提供了对 JSP 页面内所有的对象及名字空间的访问 , 也就是说他可以访问到本页所在的 session , 也可以取本页面所在的 application 的某一属性值 , 他相当于页面中所有功能的集大成者 , 它的本类名也叫pageContext ;

作用域为 Pageconfig 对象

5.8. config 对象

config 对象是在一个 Servlet 初始化时 , JSP 引擎向它传递信息用的 , 此信息包括 Servlet 初始化时所要用到的参数 ( 通过属性名和属性值构成 ) 以及服务器的有关信息 ( 通过传递一个 ServletContext 对象 ) ;

作用域为 page

5.9. exception 对象

这是一个例外对象 , 当一个页面在运行过程中发生了例外 , 就产生这个对象 ; 如果一个JSP页面要应用此对象 , 就必须把 isErrorPage 设为true , 否则无法编译 ; 他实际上是 Throwable 的对象 ;

作用域为 page

5.10. 总结

六、JSP属性作用域

JSP中提供了四种属性范围(四大域对象),如下:

  1. 当前页(pageContext):一个属性只能在一个页面中取得,跳转到其他页面无法取得

  2. 一次服务器请求(request):一个页面中设置的属性,只要经过了请求重定向之后的页面可以继续取得。

  3. 一次会话(session):一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效),关了浏览器就不见了。

  4. 上下文中(application):在整个服务器上设置的属性,所有人都可以访问

七、静态资源的路径问题

在Jsp中调用图片、JS脚本等,针对取得的路径有两种调用方式:

1、放入Body中生成绝对路径(不建议)

<%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
​
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>image调用</title>
</head>
<body><h1>图片访问</h1><div><img alt="图片" src="<%=basePath/image/a.png%>"></div>
</body>
</html>

2、在Head中指定,Body中使用相对路径(建议)

<%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
​
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>image调用</title><base href="<%=basePath%>">
</head>
<body><h1>图片访问</h1><div><img alt="图片" src="image/a.png"></div>
</body>
</html>

八、错误页面和404页面

<error-page><error-code>404</error-code><location>/pages/404.jsp</location>
</error-page>
<error-page><exception-type>java.lang.Exception</exception-type><location>/pages/err.jsp</location>
</error-page>
<welcome-file-list><welcome-file>/pages/home.jsp</welcome-file>
</welcome-file-list>

图片居中的方式:

可以绝对定位、浮动等手段都可以,这里使用一下弹性容器flex

<div style="display: flex;justify-content: center;align-content: center;width: 100%;height: 100%"><img src="images/404.png">
</div>

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

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

相关文章

VisionOS应用开发需要哪些工具

标题: VisionOS应用开发需要哪些工具 标签: [VisionOS, 空间计算] 分类: [VisionOS, 开发工具] 说下开发visionOS空间应用需要哪些准备&#xff0c;这里我找了下&#xff0c;列出来给大家。 xcode 15.22d: SwiftUI3d: RealityKit/Unity 3D实体空间: ARKitIntel Mac上可以运行X…

mysql8.0下载安装详细步骤 图文教程

下载mysql 保证电脑上之前没有安装过mysql&#xff0c;或者已经卸载完毕。 mysqk8.0 下载地址 解压 新建一个专门存放mysql文件夹&#xff0c;将下载的压缩包解压到这个文件夹里面。 配置 添加一个data文件夹&#xff0c;用来存放数据 新建一个my.txt文本&#xff0c;复制…

C++语言·入门

现在我们讲完了数据结构初阶部分的内容&#xff0c;数据结构剩下的内容会在C语言讲解的差不多的时候加入。 1. 什么是C C语言是结构化模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度抽象和建模时&#xff0c…

软件测试-用例篇

目录 1 测试用例的基本要素2 测试用例给我们带来的好处3 测试用例的设计方法3.1 基于需求进行测试用例的设计3.1.1 功能需求测试分析3.1.2 非功能需求测试分析 4 具体的设计方法4.1 等价类4.2 边界值4.3 错误猜测法4.4 场景设计法4.5 因果图4.5.1 因果图需要掌握的基本知识4.5.…

用一个程序解决SQLite常见的各项操作(实用篇)

文章说明&#xff1a; 本篇文章是在之前的一篇文章SQLite3进行数据库各项常用操作基础上写的&#xff0c;将SQLite涉及到的常用的几种操作&#xff0c;以函数的形式处理成相互调用的形式。 因为之前的文章对基础操作已经解释过了&#xff0c;所以这里直接放置可执行代码和结果…

基于YOLOv8的绝缘子检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的绝缘子小目标检测&#xff0c;阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&a…

kali Linux上安装docker过程记录

安装情况&#xff1a; 直接安装提示错误&#xff01;&#xff01;&#xff01; 安装程序命令&#xff1a; apt install -y docker.io 安装结果提示安装失败&#xff01;&#xff01;&#xff01;看别人安装直接成功到我这怎么失败&#xff01;&#xff01;&#xff01;找原因…

引用,内联函数,auto函数,指针nullptr

一&#xff1a;引用 1.1 该文章的引用是对上一篇引用的进行补充和完善 按理来说&#xff0c;double可以隐式转换为int&#xff0c;那起别名的时候为什么不可以类型转换呢&#xff1f; 那是因为&#xff0c;在类型转换的时候&#xff0c;会创建一个临时变量&#xff0c;让后再…

如何提高小红书笔记的收录率?

在小红书平台上&#xff0c;笔记的收录率是衡量一篇笔记是否受欢迎和有价值的重要因素。为了提高笔记的收录率&#xff0c;有几个关键点需要注意&#xff1a; 1.内容不涉及广告 在发布笔记前要先确保笔记内容不包含任何形式的广告或推广信息。小红书平台对于广告性质的内容有…

24年大一训练一(东北林业大学)

前言&#xff1a; 周五晚上的训练赛&#xff0c;以后应该每两周都会有一次。 正文&#xff1a; Problem:A矩阵翻转&#xff1a; #include<bits/stdc.h> using namespace std; int a[55][55]; int main(){int n,m;while(cin>>n>>m){for(int i1;i<n;i){for…

Mysql数据库:故障分析与配置优化

目录 前言 一、Mysql逻辑架构图 二、Mysql单实例常见故障 1、无法通过套接字连接到本地MySQL服务器 2、用户rootlocalhost访问被拒绝 3、远程连接数据库时连接很慢 4、无法打开以MYI结尾的索引文件 5、超出最大连接错误数量限制 6、连接过多 7、配置文件/etc/my.cnf权…

PDF转成二维码分享

在制作电子产品册之前&#xff0c;你需要思考以下几个问题&#xff1a;你的电子产品册是面向什么人群的&#xff1f;是宣传册、使用手册还是产品介绍册&#xff1f;明确目标与定位有助于我们更好地规划产品册的内容和风格。 一、收集素材与整理信息 在开始制作之前&#xff0c…

latex学习笔记

一 安装latex&#xff08;vscodetexlive&#xff09; 安装latex学习链接&#xff1a; 【超详细】最好用LaTex环境安装配置手把手教学&#xff01;&#xff01;&#xff08;支持双向搜索&#xff0c;附赠所需安装包及竞赛模板&#xff09;_哔哩哔哩_bilibilihttps://www.bilib…

KeepAlived使用介绍

目录 1、Introduce 2、基本使用 &#xff08;1&#xff09;安装 &#xff08;2&#xff09;配置文件 &#xff08;3&#xff09;使用教程 1、Introduce keepalived是一个用于实现高可用性和负载均衡的开源软件。它提供了一种轻量级的方式来管理多个服务器&#xff0c;并确保…

高效解决Ubuntu Server 18.04.1 LTS 64bit更新gdb8.1.1到gdb12.1

文章目录 问题解决步骤 问题 因为需要用到gdb一些指令&#xff0c;但是gdb8.x好像存在普遍的问题&#xff0c;实现不了某些指令&#xff0c;比方说set detach-on-fork on&#xff0c;升级版本也没有比较好的教程 经过我不断的试错&#xff0c;我终于升级成功了&#xff01;&a…

【学习笔记】java项目—苍穹外卖day02

文章目录 苍穹外卖-day02课程内容1. 新增员工1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码开发1.2.1 设计DTO类1.2.2 Controller层1.2.3 Service层接口1.2.4 Service层实现类1.2.5 Mapper层 1.3 功能测试1.3.1 接口文档测试1.3.2 前后端联调测试 1.4 …

[C++11]可变参数模板

导览&#xff1a; 本章将从可变参数模板的概念开始讲起&#xff0c;到其究竟是如何做到实例化的再从实例出发&#xff0c;探究该如何编写可变参数模板最后涉及可变参数模板的运用 什么是可变参数模板 让我们先见一下可变参数模板 template<typename ...Args> void te…

【SpringCloud】一文详谈Nacos

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…

李宏毅深度强化学习导论——当奖励是稀疏的

引言 这是李宏毅强化学习的笔记&#xff0c;主要介绍如何处理稀疏奖励问题。 稀疏奖励 当我们拿Actor和环境互动后可以得到很多奖励&#xff0c;整理之后可以得到分数 A A A&#xff0c;然后可以训练Actor。 但RL中有时会出现多数情况下奖励为零&#xff0c;此时我们不知道动…