精华内容
下载资源
问答
  • 它是什么?2.它能做什么?3.怎么做?接下来我将围绕这三个问题一一阐述有关log4j的知识。第一个log4j是什么,Log4j是Apache的一个开源项目。日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的...

    在学习新知识之前我觉得应该按1.它是什么?2.它能做什么?3.怎么做?接下来我将围绕这三个问题一一阐述有关log4j的知识。

    第一个log4j是什么,Log4j是Apache的一个开源项目。日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。它由三个组件组成:

    1. 日志信息的优先级(由日志记录器设置优先级): 控制日志的输出级别,日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度。
    2. 日志信息的输出目的地,理解为输出端(Appender):控制日志的输出位置(控制台或者是文件)。
    3. 日志信息的输出格式(Layout): 控制日志显示的格式。输出格式控制了日志信息的显 示内容。

    第二个log4j能做什么,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

    那么有人就会有疑惑,为什么要在应用程序中添加日志文件呢?原因简单理解如下:

    1. 监测代码中变量的改变情况,周期性的记录在文件中.用于统计分析。
    2. 跟踪代码的运行轨迹,便于审计。
    3. 担当集成开发环境中的调试器,向文件或者控制台打印调试信息。

    第三个log4j怎么做,简单点就是log4j的使用方法。

    因为log4j是第三方jar包,所以使用时需要导入log4j.jar到项目中,导入后还需要加入构建路径。具体方法如下:

    1. 进官网下载:http://logging.apache.org/log4j/2.x/download.html。
    2. 在工程中创建lib文件夹,把下载解压后的log4j.jar拷贝到lib文件夹中。
    3. 右键点击log4j.jar文件 Bulid Path--> Add to bulid path(添加至构建路径)。

    添加日志的几种方法在这里也阐述一下:

    1. System.out.println() 缺点:只能在控制台输出打印,不能形成文件.也不能记录之前运行结果!
    2. 日志框架:log4j Logback等
    3. 日志框架的框架:slf4j

    下面先上一下代码:

    2c6b091149adf65bd326f0d0656476da.png

    2039019e605f643ab1e8a1c4cda58125.png

    虽然图片中已经加了注释,但是需要在说明一下,自定义格式里的一串符号,称为日志格式占位符,想要日志长什么样,就自行百度日志格式占位符即可。细心的小伙伴觉可能发现了在main函数里写这个是不是有点不合适,以后修改代码不方便。在实际开发中推荐下面这种方法对应用程序添加日志文件。

    9f83f9d7f2e1d220c35e4853c1c150c0.png

    419fe92fe396ed4c8a35db7e97cb49d3.png

    第二种方式是采用设置log4j.properties文件,然后在其他.java文件中设置日志内容。log4j.properties该文件创建一个File类型的文件即可,注意文件名可以自己设置,后缀名需要做到准确无误,上图中的#相当于注释的作用,图中的输出端以及输出格式建议在java文件中写(打几个首字母,按alt+/快速生成的不会错),然后复制粘贴即可,这样为了保证代码不会打错!博主曾被自己手打支配过,建议大家快速生成后复制使用!

    还有我曾碰到的问题在这里一起记录:配置的属性文件默认不是utf-8的需要改,修改方式为选中文件右键->Properties,在窗口中修改自己要的编码格式。

    如果你想更深入更详细的学习这方面的知识,请戳以下链接:

    CSDN-专业IT技术社区-登录​blog.csdn.net
    展开全文
  • import org.apache.poi.ss.usermodel.Workbook; import javax.servlet.ServletException; import javax.servlet.... 问题,我下载出来的文件没有后缀名,而且文件名和我自己定义的也不一样,请老师帮忙看看!

    package com.imooc.servlet;

    import com.imooc.entity.Student;

    import com.imooc.service.ExcelService;

    import org.apache.poi.ss.usermodel.Workbook;

    import javax.servlet.ServletException;

    import javax.servlet.ServletOutputStream;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    import java.util.List;

    @WebServlet(name = "ExportExcelServlet", urlPatterns = "/exportExcel")

    public class ExportExcelServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ExcelService excelService = new ExcelService();

    List studentList = excelService.redExcel("c:/upload/Student.xlsx");

    Workbook workbook = excelService.exportExcel(false, studentList);

    response.setHeader("Context-Disposition", "attachment;filename=Students.xlsx");

    ServletOutputStream outputStream = response.getOutputStream();

    workbook.write(outputStream);

    outputStream.flush();

    outputStream.close();

    workbook.close();

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doPost(request, response);

    }

    }

    package com.imooc.service;

    import com.imooc.dto.ImportExcelParamDto;

    import com.imooc.entity.Student;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    import org.apache.poi.ss.usermodel.Row;

    import org.apache.poi.ss.usermodel.Sheet;

    import org.apache.poi.ss.usermodel.Workbook;

    import org.apache.poi.ss.usermodel.WorkbookFactory;

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    public class ExcelService {

    /**

    * 读取上传的Excel文件

    *

    * @param dto(上传的参数对象)

    * @return 返回上传文件中的数据对象

    */

    public List redExcel(ImportExcelParamDto dto) {

    List impStudentList = new ArrayList<>();

    Workbook workbook = null;

    try {

    //获取上传的Excel文件输入流,并将其传给workbook

    workbook = WorkbookFactory.create(dto.getFile().getInputStream());

    //获得Excel文件的第一个sheet

    Sheet sheet = workbook.getSheetAt(0);

    //获得Sheet下的最后一个有效行

    int rowNum = sheet.getLastRowNum();

    //循环遍历所有有效行数中的单元格,获得单元格中的数据

    for (int i = 1; i <= rowNum; i++) {

    Row row = sheet.getRow(i);

    String name = row.getCell(0).getStringCellValue();

    int age = (int) row.getCell(1).getNumericCellValue();

    Date date = row.getCell(2).getDateCellValue();

    //将获取的数据封装成对象

    Student st = new Student(name, age, date);

    //将封装的对象添加到List中

    impStudentList.add(st);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    if (workbook != null) {

    try {

    workbook.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return impStudentList;

    }

    /**

    * 读取服务器本地的Excel文件

    *

    * @param FILE_PATH(服务器本地文件路径)

    * @return 读取到的数据对象集合

    */

    public List redExcel(String FILE_PATH) {

    List stList = new ArrayList<>();

    Workbook workbook = null;

    try {

    //获取上传的Excel文件输入流,并将其传给workbook

    workbook = WorkbookFactory.create(new File(FILE_PATH));

    //获得Excel文件的第一个sheet

    Sheet sheet = workbook.getSheetAt(0);

    //获得Sheet下的最后一个有效行

    int rowNum = sheet.getLastRowNum();

    //循环遍历所有有效行数中的单元格,获得单元格中的数据

    for (int i = 1; i <= rowNum; i++) {

    Row row = sheet.getRow(i);

    String name = row.getCell(0).getStringCellValue();

    int age = (int) row.getCell(1).getNumericCellValue();

    Date date = row.getCell(2).getDateCellValue();

    //将获取的数据封装成对象

    Student st = new Student(name, age, date);

    //将封装的对象添加到List中

    stList.add(st);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    if (workbook != null) {

    try {

    workbook.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    return stList;

    }

    /**

    * 将读取到的上传数据写入到服务器本地的Excel

    *

    * @param FILE_PATH      服务器本地Excel路劲

    * @param impStudentList 要写入到Excel中的数据

    */

    public Workbook writeExcel(String FILE_PATH, List impStudentList) {

    Workbook workbook = null;

    InputStream fileInputStream = null;

    if (impStudentList != null) {

    try {

    fileInputStream = new FileInputStream(new File(FILE_PATH));

    workbook = WorkbookFactory.create(fileInputStream);

    Sheet sheet = workbook.getSheetAt(0);

    int lastRowNum = sheet.getLastRowNum();

    int index = 0;

    for (int i = lastRowNum + 1; i <= lastRowNum + impStudentList.size(); i++) {

    Row row = sheet.createRow(i);

    Student st = impStudentList.get(index);

    row.createCell(0).setCellValue(st.getName());

    row.createCell(1).setCellValue(st.getAge());

    row.createCell(2).setCellValue(st.getDate());

    index++;

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    if (fileInputStream != null) {

    try {

    fileInputStream.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    return workbook;

    }

    /**

    * 创建新的Excel提供下载

    * @param excelVersion excel版本

    * @param impStudentList 要写到Excel中的数据

    * @return Workbook对象

    */

    public Workbook exportExcel(boolean excelVersion, List impStudentList) {

    Workbook workbook = null;

    if (excelVersion) {

    workbook = new XSSFWorkbook();

    } else {

    workbook = new HSSFWorkbook();

    }

    Sheet sheet = workbook.createSheet();

    int lastRowNum = sheet.getLastRowNum();

    int index = 0;

    for (int i = lastRowNum + 1; i <= lastRowNum + impStudentList.size(); i++) {

    Row row = sheet.createRow(i);

    Student st = impStudentList.get(index);

    row.createCell(0).setCellValue(st.getName());

    row.createCell(1).setCellValue(st.getAge());

    row.createCell(2).setCellValue(st.getDate());

    index++;

    }

    return workbook;

    }

    }

    我的需求是这样的,在页面点击导出Excel的按钮,跳转到导出界面,界面显示的是我服务器本地一个Excel中的数据,然后点击“导出”,后台去服务器本地查找到这个Excel文件然后将他的写入一个Excel文件中(这个新建的Excel不在本地进行保存)然后将这个Excel文件提供用户下载!

    问题,我下载出来的文件没有后缀名,而且文件名和我自己定义的也不一样,请老师帮忙看看!

    c1a826984adde5c66561b3c97b0baeb3.png

    342be119cfc9e369c80bd178d127b19e.png

    展开全文
  • .less为后缀文件什么

    万次阅读 多人点赞 2018-05-07 17:15:00
    .less为后缀文件什么 一、总结 1、less是什么:LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本...

    .less为后缀的文件是什么

    一、总结

    1、less是什么LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情

    2、为什么有lessCSS 是一门非程序式语言,CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用

    3、less最最最最最最简单实例:使用@符号来定义变量

    清单 1. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    @color: #4D926F; 
     
    #header {
      color: @color;
    }
    h2 {
      color: @color;
    }

    经过编译生成的 CSS 文件如下:

    清单 2. CSS 文件
    1
    2
    3
    4
    5
    6
    #header {
      color: #4D926F
    }
    h2 {
      color: #4D926F; 
    }

     

     

    二、LESS CSS 框架简介

    简介

    CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide Web)中。HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义。

    作为一门标记性语言,CSS 的语法相对简单,对使用者的要求较低,但同时也带来一些问题:CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码,造成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情

    LESS 原理及使用方式

    本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。下面是一个简单的例子:

    清单 1. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    @color: #4D926F;
     
    #header {
      color: @color;
    }
    h2 {
      color: @color;
    }

    经过编译生成的 CSS 文件如下:

    清单 2. CSS 文件
    1
    2
    3
    4
    5
    6
    #header {
      color: #4D926F;
    }
    h2 {
      color: #4D926F;
    }

    从上面的例子可以看出,学习 LESS 非常容易,只要你了解 CSS 基础就可以很容易上手。

    LESS 可以直接在客户端使用,也可以在服务器端使用。在实际项目开发中,我们更推荐使用第三种方式,将 LESS 文件编译生成静态 CSS 文件,并在 HTML 文档中应用。

    客户端

    我们可以直接在客户端使用 .less(LESS 源文件),只需要从 http://lesscss.org下载 less.js 文件,然后在我们需要引入 LESS 源文件的 HTML 中加入如下代码:

    1
    < link rel = "stylesheet/less" type = "text/css" href = "styles.less" >

    LESS 源文件的引入方式与标准 CSS 文件引入方式一样:

    1
    < link rel = "stylesheet/less" type = "text/css" href = "styles.less" >

    需要注意的是:在引入 .less 文件时,rel 属性要设置为“stylesheet/less”。还有更重要的一点需要注意的是:LESS 源文件一定要在 less.js 引入之前引入,这样才能保证 LESS 源文件正确编译解析。

    服务器端

    LESS 在服务器端的使用主要是借助于 LESS 的编译器,将 LESS 源文件编译生成最终的 CSS 文件,目前常用的方式是利用 node 的包管理器 (npm) 安装 LESS,安装成功后就可以在 node 环境中对 LESS 源文件进行编译。

    在项目开发初期,我们无论采用客户端还是服务器端的用法,我们都需要想办法将我们要用到的 CSS 或 LESS 文件引入到我们的 HTML 页面或是桥接文件中,LESS 提供了一个我们很熟悉的功能— Importing。我们可以通过这个关键字引入我们需要的 .less 或 .css 文件。 如:

    @import “variables.less”;

    .less 文件也可以省略后缀名,像这样:

    @import “variables”;

    引入 CSS 同 LESS 文件一样,只是 .css 后缀名不能省略。

    使用编译生成的静态 CSS 文件

    我们可以通过 LESS 的编译器,将 LESS 文件编译成为 CSS 文件,在 HTML 文章中引入使用。这里要强调的一点,LESS 是完全兼容 CSS 语法的,也就是说,我们可以将标准的 CSS 文件直接改成 .less 格式,LESS 编译器可以完全识别。

    语法

    变量

    LESS 允许开发者自定义变量,变量可以在全局样式中使用,变量使得样式修改起来更加简单。

    我们可以从下面的代码了解变量的使用及作用:

    清单 3 LESS 文件
    1
    2
    3
    4
    5
    @border-color : #b5bcc7;
     
    .mythemes tableBorder{
       border : 1px solid @border-color;
    }

    经过编译生成的 CSS 文件如下:

    清单 4. CSS 文件
    1
    2
    3
    .mythemes tableBorder {
      border: 1px solid #b5bcc7;
    }

    从上面的代码中我们可以看出,变量是 VALUE(值)级别的复用,可以将相同的值定义成变量统一管理起来。

    该特性适用于定义主题,我们可以将背景颜色、字体颜色、边框属性等常规样式进行统一定义,这样不同的主题只需要定义不同的变量文件就可以了。当然该特性也同样适用于 CSS RESET(重置样式表),在 Web 开发中,我们往往需要屏蔽浏览器默认的样式行为而需要重新定义样式表来覆盖浏览器的默认行为,这里可以使用 LESS 的变量特性,这样就可以在不同的项目间重用样式表,我们仅需要在不同的项目样式表中,根据需求重新给变量赋值即可。

    LESS 中的变量和其他编程语言一样,可以实现值的复用,同样它也有生命周期,也就是 Scope(变量范围,开发人员惯称之为作用域),简单的讲就是局部变量还是全局变量的概念,查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局。下面我们通过一个简单的例子来解释 Scope。

    清单 5. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @width : 20px;
    #homeDiv {
       @width : 30px;
       #centerDiv{
           width : @width;// 此处应该取最近定义的变量 width 的值 30px
                  }
    }
    #leftDiv {
         width : @width; // 此处应该取最上面定义的变量 width 的值 20px
     
    }

    经过编译生成的 CSS 文件如下:

    清单 6. CSS 文件
    1
    2
    3
    4
    5
    6
    #homeDiv #centerDiv {
      width: 30px;
    }
    #leftDiv {
      width: 20px;
    }

    Mixins(混入)

    Mixins(混入)功能对用开发者来说并不陌生,很多动态语言都支持 Mixins(混入)特性,它是多重继承的一种实现,在 LESS 中,混入是指在一个 CLASS 中引入另外一个已经定义的 CLASS,就像在当前 CLASS 中增加一个属性一样。

    我们先简单看一下 Mixins 在 LESS 中的使用:

    清单 7. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 定义一个样式选择器
      .roundedCorners(@radius:5px) {
      -moz-border-radius: @radius;
      -webkit-border-radius: @radius;
      border-radius: @radius;
      }
      // 在另外的样式选择器中使用
      #header {
      .roundedCorners;
      }
      #footer {
      .roundedCorners(10px);
      }

    经过编译生成的 CSS 文件如下:

    清单 8. CSS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #header {
    -moz-border-radius:5px;
    -webkit-border-radius:5px;
    border-radius:5px;
    }
    #footer {
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
    }

    从上面的代码我们可以看出:Mixins 其实是一种嵌套,它允许将一个类嵌入到另外一个类中使用,被嵌入的类也可以称作变量,简单的讲,Mixins 其实是规则级别的复用。

    Mixins 还有一种形式叫做 Parametric Mixins(混入参数),LESS 也支持这一特性:

    清单 9. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // 定义一个样式选择器
      .borderRadius(@radius){
      -moz-border-radius: @radius;
      -webkit-border-radius: @radius;
      border-radius: @radius;
      }
      // 使用已定义的样式选择器
      #header {
      .borderRadius(10px); // 把 10px 作为参数传递给样式选择器
      }
      .btn {
      .borderRadius(3px);// // 把 3px 作为参数传递给样式选择器
     
      }

    经过编译生成的 CSS 文件如下:

    清单 10. CSS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #header {
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    border-radius: 10px;
    }
    .btn {
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    border-radius: 3px;
    }

    我们还可以给 Mixins 的参数定义一人默认值,如

    清单 11. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    .borderRadius(@radius:5px){
      -moz-border-radius: @radius;
      -webkit-border-radius: @radius;
      border-radius: @radius;
      }
      .btn {
      .borderRadius;
      }

    经过编译生成的 CSS 文件如下:

    清单 12. CSS 文件
    1
    2
    3
    4
    5
    .btn {
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    }

    像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。

    清单 13. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    .boxShadow(@x:0,@y:0,@blur:1px,@color:#000){
    -moz-box-shadow: @arguments;
    -webkit-box-shadow: @arguments;
    box-shadow: @arguments;
    }
    #header {
    .boxShadow(2px,2px,3px,#f36);
    }

    经过编译生成的 CSS 文件如下:

    清单 14. CSS 文件
    1
    2
    3
    4
    5
    #header {
    -moz-box-shadow: 2px 2px 3px #FF36;
    -webkit-box-shadow: 2px 2px 3px #FF36;
    box-shadow: 2px 2px 3px #FF36;
    }

    Mixins 是 LESS 中很重要的特性之一,我们这里也写了很多例子,看到这些例子你是否会有这样的疑问:当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?如果你是 java 程序员或 C++ 程序员,我猜你肯定会想到命名空间 Namespaces,LESS 也采用了命名空间的方法来避免重名问题,于是乎 LESS 在 mixins 的基础上扩展了一下,看下面这样一段代码:

    清单 15. LESS 文件
    1
    2
    3
    4
    #mynamespace {
    .home {...}
    .user {...}
    }

    这样我们就定义了一个名为 mynamespace 的命名空间,如果我们要复用 user 这个选择器的时候,我们只需要在需要混入这个选择器的地方这样使用就可以了。#mynamespace > .user。

    嵌套的规则

    在我们书写标准 CSS 的时候,遇到多层的元素嵌套这种情况时,我们要么采用从外到内的选择器嵌套定义,要么采用给特定元素加 CLASS 或 ID 的方式。在 LESS 中我们可以这样写:

    清单 16. HTML 片段
    1
    2
    3
    4
    5
    6
    7
    < div id = "home" >
    < div id = "top" >top</ div >
    < div id = "center" >
    < div id = "left" >left</ div >
    < div id = "right" >right</ div >
    </ div >
    </ div >
    清单 17. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #home{
       color : blue;
       width : 600px;
       height : 500px;
       border:outset;
       #top{
            border:outset;
            width : 90%;
       }
       #center{
            border:outset;
            height : 300px;
            width : 90%;
            #left{
              border:outset;
              float : left;
      width : 40%;
            }
            #right{
              border:outset;
              float : left;
      width : 40%;
            }
        }
    }

    经过编译生成的 CSS 文件如下:

    清单 18. CSS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #home {
      color: blue;
      width: 600px;
      height: 500px;
      border: outset;
    }
    #home #top {
      border: outset;
      width: 90%;
    }
    #home #center {
      border: outset;
      height: 300px;
      width: 90%;
    }
    #home #center #left {
      border: outset;
      float: left;
      width: 40%;
    }
    #home #center #right {
      border: outset;
      float: left;
      width: 40%;
    }

    从上面的代码中我们可以看出,LESS 的嵌套规则的写法是 HTML 中的 DOM 结构相对应的,这样使我们的样式表书写更加简洁和更好的可读性。同时,嵌套规则使得对伪元素的操作更为方便。

    清单 19. LESS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    a {
      color: red;
      text-decoration: none;
      &:hover {// 有 & 时解析的是同一个元素或此元素的伪类,没有 & 解析是后代元素
       color: black;
       text-decoration: underline;
      }
      }

    经过编译生成的 CSS 文件如下:

    清单 20. CSS 文件
    1
    2
    3
    4
    5
    6
    7
    8
    a {
    color: red;
    text-decoration: none;
    }
    a:hover {
    color: black;
    text-decoration: underline;
    }

    运算及函数

    在我们的 CSS 中充斥着大量的数值型的 value,比如 color、padding、margin 等,这些数值之间在某些情况下是有着一定关系的,那么我们怎样利用 LESS 来组织我们这些数值之间的关系呢?我们来看这段代码:

    清单 21 . LESS 文件
    1
    2
    3
    4
    5
    @init: #111111;
    @transition: @init*2;
    .switchColor {
    color: @transition;
    }

    经过编译生成的 CSS 文件如下:

    清单 22. CSS 文件
    1
    2
    3
    .switchColor {
      color: #222222;
    }

    上面的例子中使用 LESS 的 operation 是 特性,其实简单的讲,就是对数值型的 value(数字、颜色、变量等)进行加减乘除四则运算。同时 LESS 还有一个专门针对 color 的操作提供一组函数。下面是 LESS 提供的针对颜色操作的函数列表:

    1
    2
    3
    4
    5
    6
    7
    8
    lighten(@color, 10%); // return a color which is 10% *lighter* than @color
    darken(@color, 10%); // return a color which is 10% *darker* than @color
    saturate(@color, 10%); // return a color 10% *more* saturated than @color
    desaturate(@color, 10%);// return a color 10% *less* saturated than @color
    fadein(@color, 10%); // return a color 10% *less* transparent than @color
    fadeout(@color, 10%); // return a color 10% *more* transparent than @color
    spin(@color, 10); // return a color with a 10 degree larger in hue than @color
    spin(@color, -10); // return a color with a 10 degree smaller hue than @color

    PS: 上述代码引自 LESS CSS 官方网站,详情请见 http://lesscss.org/#-color-functions

    使用这些函数和 JavaScript 中使用函数一样。

    清单 23 LESS 文件
    1
    2
    3
    4
    init: #f04615;
      #body {
      
      }

    经过编译生成的 CSS 文件如下:

    清单 24. CSS 文件
    1
    2
    3
    #body {
     
    }

    从上面的例子我们可以发现,这组函数像极了 JavaScript 中的函数,它可以被调用和传递参数。这些函数的主要作用是提供颜色变换的功能,先把颜色转换成 HSL 色,然后在此基础上进行操作,LESS 还提供了获取颜色值的方法,在这里就不举例说明了。

    LESS 提供的运算及函数特性适用于实现页面组件特性,比如组件切换时的渐入渐出。

    Comments(注释)

    适当的注释是保证代码可读性的必要手段,LESS 对注释也提供了支持,主要有两种方式:单行注释和多行注释,这与 JavaScript 中的注释方法一样,我们这里不做详细的说明,只强调一点:LESS 中单行注释 (// 单行注释 ) 是不能显示在编译后的 CSS 中,所以如果你的注释是针对样式说明的请使用多行注释。

    LESS VS SASS

    同类框架还有 SASS : http://sass-lang.com/, 与 LESS 相比,两者都属于 CSS 预处理器,功能上大同小异,都是使用类似程序式语言的方式书写 CSS, 都具有变量、混入、嵌套、继承等特性,最终目的都是方便 CSS 的书写及维护。

    LESS 和 SASS 互相促进互相影响,相比之下 LESS 更接近 CSS 语法,更多两者之间的比较,请参考这篇帖子:https://gist.github.com/674726

    结束语

    本文提到的只是 LESS 的基本功能,更高级的功能如:字符串插值,服务器端使用配置,JavaScript 表达式,避免编译等可以参看 LESS 的官方网站。

    LESS 以 CSS 语法为基础,又借用了很多我们熟知编程式语言的特性,这对于我们开发人员来讲学习成本几乎可以忽略,它在保留 CSS 语法的基础上扩展了更多实用的功能,LESS 为我们提供了一种新的编写样式表的方法,我们可以根据我们的项目特性选择使用 LESS 的部分特性,我们只需用很少的成本就可以换了很大的回报,一句话,Less is more,借助 LESS 可以更便捷的进行 Web 开发。

     

    展开全文
  • xz后缀名文件解压方法

    千次阅读 2021-05-17 07:55:45
    后缀名为xz的这种文件是使用tar打包后再压缩生成的。解压方法是:1、xz -d **.tar.xz2、tar -xvf **.tar如没有按照xz工具,则首先需要下载、安装xz工具:http://tukaani.org/xz/xz-4.999.9beta.tar.bz2安装:1、tar ...

    后缀名为xz的这种文件是使用tar打包后再压缩生成的。解压方法是:

    1、xz -d **.tar.xz

    2、tar -xvf **.tar

    如没有按照xz工具,则首先需要下载、安装xz工具:

    http://tukaani.org/xz/xz-4.999.9beta.tar.bz2

    安装:

    1、tar -jxvf xz-4.999.9beta.tar.bz2

    2、cd xz-4.999.9beta

    3、./configure --prefix=/

    4、make

    5、sudo make install

    其他压缩格式文件解压方法:

    tar -xvf file.tar

    tar -xzvf file.tar.gz

    tar -xjvf file.tar.bz2 [-c directory] 可以指定解压后的路径

    生成压缩文件的方法:

    tar -cvf file.tar  *.jpg

    tar -czvf file.tar.gz ./*

    tar -cjvf file.tar.bz2 ./*

    其他命令:

    tar -rf  XX.tar  newfile   添加一个新文件到原有jar    --reload ??

    tar -uf XX.tar oldfile      更新一个jar中已有文件       --update

    tar -tf XX.tar                  列出jar中的文件                 --table

    展开全文
  • 小伙伴们往往会在看到一些陌生的后缀名的时候,会感到很彷徨,上网查找半天也找不到合适的工具打开,下面我给大家附上常见的后缀名和他们对应的编辑工具 ai 用adobe illustrator9 N [6 O' g3 u4 e& S# D; ?* ?: ...
  • 上传文件和上传文件后缀名限制

    千次阅读 2018-11-27 16:22:00
    什么80%的码农都做不了架构师?>>> ...
  • 上传文件: 引用自:https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects ①需要使用FormData这个对象。 ②兼容性: 需要至少IE10 ③类似用标签 ④方法: 先new一个FormData对象 var ...
  • Java网址下载文件获取后缀名

    千次阅读 2017-09-07 10:59:07
    Java网址下载文件获取后缀名网址下载时,网址资源URL格式多样,不一定能在链接中直接获取后缀名,本文综合了多种获取后缀名的方法,供参考: 通过网址后缀直接获取 通过网址响应头中的Content-Disposition(匹配...
  • js判断上传文件后缀名方法

    千次阅读 2017-06-28 16:47:22
    <html xmlns="http://www.w3.org/1999/xhtml"> ; charset=utf-8" /> <title></title> (this)" /> function selectFile(input) { var fileName = input.value; if(fileName.length > 1 && fileName ) { ...
  • 在对文件进行操作的时候,我们经常需要用到文件后缀。但是Java API中并没有提供获取文件后缀的方法。下面的工具方法可以帮助我们实现这个目的。方法1代码示例:package org.4spaces;import javax.imageio.ImageIO;...
  • .ps后缀文件打开

    千次阅读 2020-08-17 10:32:54
    ps后缀文件就是Postscript格式。 打开工具有两个开源软件:evince和Ghostscript, 推荐用evince,像pdf一样查看,很方便。 evince evince开源软件,支持PDF, Postscript, DJVU, TIFF, DVI, DOC, ABW, PPS, PPT, ODT,...
  • 文件上传 选择一个文件: upload.java package abc; import java.io.*; import java.util.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebS
  • mybatis generator自定义文件后缀名

    千次阅读 2018-02-14 10:05:00
    默认名都是XXXExample.java,XXXMapper.java,XXXMapper.xml,待过几个公司或者项目组的小伙伴就有感受,有的组要求是XXXDao.java,XXXCondition.java,XXXDao.xml,后来就自己调研能不能自定义文件后缀名,总不能...
  • java根据ContentType获取文件后缀名

    千次阅读 2016-12-27 14:19:37
    org.apache.tika tika-core 1.14 MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); MimeType jpeg = allTypes.forName("image/jpeg"); String ext = jpeg.getExtension(); // .jpg
  • 建议使用枚举类来处理对应关系,清晰明了简单易用 其中StringUtils可以使用lang3的工具类也可以自己封装,lang3的依赖地址如下;...org.apache.commons</groupId> <artifactId>commons-lang3</
  • keras读取后缀名为.h5的文件

    万次阅读 2018-06-13 16:41:11
    f = h5py.File(weight_file_path) # 读取weights h5文件返回File类 try: if len(f.attrs.items()): print("{} contains: ".format(weight_file_path)) print("Root attributes:") for key, value in f.attrs....
  • Java 对上传文件后缀格式的校验

    千次阅读 2019-05-09 11:36:15
    在对格式校验的时候要考虑到用户或者攻击者对文件后缀进行的改变,导致上传的文件并不是我们需要的类型,从而对系统造成影响. 我们可以对常用的文件进行校验,如图片格式, 压缩格式,office word,Excel格式,以及其他...
  • 首先,引入所需的jar包:如果是maven管理项目的jar包,只需在pom.xml中加上:[html] view plain copy&lt;!-- https://mvnrepository.com/artifact/org.apache.poi/poi...org.apache.poi&lt;/group...
  • 本文最先发布在:如何解压缩 tar.xz 文件 - ITCoder​www.itcoder.techtar命令...XZ 是一个基于 LZMA 算法,用于压缩文件的流行算法。按照惯例,使用 xz 压缩的 tar 包名字都以 .tar.xz 或者 .txz结尾。本文讲解了...
  • LayUI 文件上传 文件类型后缀 设置

    千次阅读 2021-02-24 14:22:58
    图片/文件上传 - layui.upload 点击跳转到Layui官网文件上传页面 找到设置文件上传类型的设置的参数 代码 <div class="layui-upload-drag" id="test10"> <i class="layui-icon"></i> <p...
  • 可能很多人会认为mime type和后缀之间是一一对应的关系。 其实两者之间即不是一对一,也不是一对多或者多对一的关系. mime type是一套标准规范,官方的解释是: Amedia type(also known as aMultipurpose ...
  • 所有的图片后缀名

    千次阅读 2017-12-11 16:10:00
    所有的图片后缀名  来自:https://en.wikipedia.org/wiki/Image_file_formats#Compound_formats_(see_also_Metafile)
  • import org.junit.Test; import java.io.*; /** * @Author: 廾匸 * @Date: 2020/12/2 19:34 * @Description: * @version: 1.01 */ public class Three { @Test public void test01(){ try { show(new ...
  • /** * 1 )判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称 使用方式:A:封装e盘,获取所有的文件以及文件夹的File数组(文件以及文件及的名称数组) 遍历的时候进行一系列判断进行条件过滤,麻烦 ...
  • 上传JSPX文件绕过网站后缀名检查

    千次阅读 2018-10-08 18:49:46
    访问任何jsp文件都跳到登录的地 方,然后尝试过变换jsp的大小写,虽然不跳了,但是直接不解析,利用apache的解析漏洞上传文件,也不解析。后来只能放弃… 今天在工作中做另外一个站的渗透测试的时候,有个很特别的...
  • java实现文件拷贝,以及修改文件扩展 一、文件拷贝 public File createNewFile(String path, String realPath, String newFileName) { File file = new File(path); // path原文件路径,被复制的文件 File ...
  • package com.toogen.log4j; import java.io.File; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class FileTest { private static Log log = LogFactory.getL

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,112
精华内容 46,444
关键字:

后缀名org是什么文件