wildcard in servlet/filter url-pattern mapping

From servlet specification,
SRV.11.2 Specification of Mappings
In theWeb application deployment descriptor, the following syntax is used to define
mappings:
• A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used
for path mapping.
• A string beginning with a ‘*.’ prefix is used as an extension mapping.
• A string containing only the ’/’ character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the con-
text path and the path info is null.
• All other strings are used for exact matches only.

This means Wildcard asterisk can only be used in two cases
 1. at the end of a pattern, like /*
  2. pattern *.extension matches any file name ending with extension

To match two urls  
/r2/v1/clientjoin  and 
/r2/v1/clientleave to a filter,
 r2/v1/client* won't work.

Instead, defining two url-pattern for the filter mapping solves the problem.

        <filter-mapping>
           <filter-name> BasicAuthFilter</filter-name >
           <url-pattern> /r2/v1/clientjoin </url-pattern>
           <url-pattern> /r2/v1/clientleave </url-pattern>
        </filter-mapping>

Detailed xml schema can be found from http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd and http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
<think>我们正在分析Makefile中的一段条件判断语句,特别是检查交叉编译工具链是否存在。用户的问题:ifeq($(wildcard$(TARGET_CC)),)...这段语句的作用是什么?并且想确认当工具链文件存在时,该逻辑的行为。我们之前已经解释过,这段代码用于检查工具链的可执行文件(比如mips-mti-elf-gcc)是否存在。如果不存在,则报错并提示安装。现在,我们将详细分析:1.语句结构:ifeq($(wildcard$(TARGET_CC)),)...错误处理...endif2.关键函数:$(wildcardpattern)函数:在Makefile中用于检查文件是否存在。如果pattern指定的文件存在,则返回该文件的路径(可能是绝对路径或相对路径),否则返回空字符串。3.条件判断:ifeq(A,B)用于比较两个字符串是否相等。这里,将$(wildcard$(TARGET_CC))的结果与空字符串比较。因此,当$(wildcard$(TARGET_CC))返回空(即文件不存在)时,条件成立,执行错误处理部分;如果返回非空(即文件存在),则条件不成立,跳过错误处理。4.当工具链文件存在时的行为:此时,$(wildcard$(TARGET_CC))会返回该文件的路径(例如,可能是“/opt/toolchain/bin/mips-mti-elf-gcc”或者相对路径),因此条件判断为不相等(非空字符串不等于空字符串),所以不会执行ifeq块内的错误信息,Makefile会继续执行后续的编译步骤。5.错误处理部分:在条件成立的块内,使用了$(info)和$(error)函数。$(info)用于打印信息(不会终止执行),而$(error)会终止Make的执行并输出错误信息。6.具体代码分析:$(infoToolchain$(TARGET_CC)notexist,pleaseinstalltoolchain!!!)->提示工具链不存在$(infohgq_Pleasedownloadtoolchainfrom)->注意这里有一个前缀'hgq_',可能是特定标识,但显示给用户$(info下载地址)->显示下载地址$(infoandinstallby)->显示安装命令$(errorexit!!!)->终止Make,并显示"exit!!!"(通常我们会给出更明确的错误信息)7.用户需要确认:当工具链存在时,不会进入这个条件块,因此不会打印这些信息,也不会报错退出,而是正常编译。8.注意事项:-如果TARGET_CC变量包含多个单词(比如包含参数),那么wildcard函数可能无法正确解析(因为wildcard只接受一个文件名模式)。因此,确保TARGET_CC只包含可执行文件的路径。-另外,如果工具链不在当前目录,但存在于PATH环境变量中,wildcard可能无法找到(因为wildcard只在当前目录及其子目录?注意:实际上,wildcard并不搜索PATH,它只是文件系统上的通配符。所以,通常我们设置TARGET_CC为绝对路径或相对路径,而不是仅仅是一个命令名。9.改进建议:如果工具链安装到了系统PATH中的某个目录,但TARGET_CC只给出了可执行文件名(如"mips-mti-elf-gcc"),那么wildcard只会在当前目录下查找,而不会去PATH中找。因此,更好的做法是使用`which`命令来检查,但注意Makefile中可以直接使用shell函数。例如:TOOL_EXISTS:=$(shellwhich$(TARGET_CC)2>/dev/null)ifeq($(TOOL_EXISTS),)...10.但是,原代码中TARGET_CC通常被设置为完整的路径(由构建系统设置),所以原方法在工具链安装在非标准位置时(但已设置好TARGET_CC为绝对路径)是有效的。为了更清晰地说明,我们用一个例子:假设TARGET_CC被设置为:/opt/toolchain/bin/mips-mti-elf-gcc情况1:该文件存在(即工具链已安装):$(wildcard$(TARGET_CC))返回"/opt/toolchain/bin/mips-mti-elf-gcc"(非空)ifeq条件不成立,继续编译。情况2:该文件不存在:$(wildcard$(TARGET_CC))返回空字符串ifeq条件成立,执行错误处理并退出。因此,用户关心的工具链存在时,该条件块会被跳过,不会影响编译。最后,注意:$(wildcard)函数不会检查文件是否可执行,只检查是否存在。如果要检查可执行权限,可能需要结合shell命令。但通常,只要文件存在,且用户有执行权限,就可以认为是存在的。权限问题会在编译时由shell报错。生成的相关问题:1.Makefile中如何检查多个工具(例如gcc,ld,as)同时存在?2.除了wildcard,还有哪些方法可以在Makefile中检查文件是否存在?3.如果工具链位于PATH环境变量中,Makefile如何正确设置TARGET_CC?4.Makefile条件语句(ifeq,ifdef等)的使用方法?回答结构:1.直接回答用户问题:当工具链文件存在时,条件判断不成立,不会执行错误处理,继续编译。2.详细分析语句和函数。3.注意事项和改进建议。4.示例说明。5.生成相关问题。</think> ### Makefile中`ifeq ($(wildcard $(TARGET_CC))`语句详解 #### 作用分析 该语句用于**验证交叉编译工具链的可执行文件是否存在**,是构建系统的重要前置检查: ```makefile ifeq ($(wildcard $(TARGET_CC)),) # 检查$(TARGET_CC)文件是否存在 $(error 错误处理) # 不存在时报错退出 endif ``` 1. **`TARGET_CC`** 工具链可执行文件路径,例如`mips-mti-elf-gcc`,通常定义为: $$ \text{TARGET\_CC} = \text{$(TARGET\_CROSS)gcc} $$ 2. **`wildcard`函数** 文件系统检测函数: $$ \text{返回值} = \begin{cases} \text{文件路径} & \text{文件存在} \\ \varnothing & \text{文件不存在} \end{cases} $$ 3. **条件判断逻辑** | 工具链状态 | `wildcard`返回值 | `ifeq`结果 | 构建行为 | |--------------------|------------------|------------|-------------------| | 文件存在(正确安装)| 文件路径 | 条件不成立 | 继续执行编译流程 | | 文件不存在 | 空字符串 | 条件成立 | 报错并终止构建 | #### 工具链存在时的行为 当`$(TARGET_CC)`指向的文件(如`/opt/toolchain/bin/mips-mti-elf-gcc`)已安装: 1. **`wildcard`返回非空值** ``` $(wildcard /opt/toolchain/bin/mips-mti-elf-gcc) → "/opt/toolchain/bin/mips-mti-elf-gcc" ``` 2. **条件判断跳过错误处理** `ifeq`比较结果:`"/opt/.../gcc" ≠ ""` → 条件不成立 3. **构建流程继续执行** 后续编译命令如`$(TARGET_CC) -o output input.c`正常执行 #### 执行流程示意图 ```mermaid graph TD A[开始构建] --> B{检查文件\n$(TARGET_CC)} B -- 存在 --> C[执行编译命令] B -- 不存在 --> D[打印错误信息] D --> E[终止构建] C --> F[生成目标文件] ``` #### 注意事项 1. **路径解析限制** `wildcard`不搜索`PATH`环境变量,需明确绝对路径: ```makefile # 正确做法 TARGET_CC := /opt/toolchain/bin/mips-mti-elf-gcc # 风险做法(依赖PATH) TARGET_CC := mips-mti-elf-gcc # wildcard可能失败 ``` 2. **增强检查方案** 如需验证工具链完整性,可扩展检查: ```makefile TOOLS := gcc g++ ld $(foreach tool,$(TOOLS),\ $(if $(wildcard $(TARGET_CROSS)$(tool)),,\ $(error 缺失 $(tool)))) ``` 3. **首次安装后配置** 安装后需刷新环境变量(或重启终端)使`wildcard`生效: ```bash export PATH=$PATH:/opt/toolchain/bin ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值