url-pattern写成/和/*的区别

<url-pattern>/</url-pattern>: 
会匹配到/springmvc这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。

<url-pattern>/*</url-pattern>: 
会匹配所有的url:路径型的和后缀型的url(包括/springmvc,.jsp,.js和*.html等)。 
下面是关于这个问题在stack overflow上的解释: 
原文链接:http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern 
简单的翻译如下: 
<url-pattern>/*</url-pattern>: 
这种形式将会覆盖所有其它的servlet。不管你发出了什么样的请求,最终都会在这个servlet中结束。因此,对于servlet来说,这是一个很糟糕的URL模式。通常来讲,你只会想要在一个Filter中使用这种模式。它可以通过调用doFilter()方法来使请求继续。 
<url-pattern>/</url-pattern>: 
这种形式不会覆盖任何其它的servlet。它仅仅替换了servlet容器中内建的默认servlet。这种形式通常只用来请求静态资源(CSS/JS/image等)和展示目录的列表。servlet容器内建的默认servlet同样可以处理HTTP cache请求、媒体(声音/视频)流以及文件的下载。通常来说,你不会想要覆盖这个默认的servlet,否则,你将不得不自己处理一些琐碎的任务。因此,对于sevlet来说,这同样是一个糟糕的URL模式。说到为什么JSP页面的请求并不会命中这个servlet,那是因为servlet容器内建的JSP servlet将会被调用,而这个容器内建的JSP servlet已经默认地映射在了*.jsp上。 
<url-pattern></url-pattern> 
这种空串的形式。当上下文的根被请求的时候,它将被调用。这与<welcome-file>的方式是不同的,因为这种形式在当任何子目录被请求的时候不会被调用。当你期望一个“首页servlet”的时候,这种URL模式就是适合你的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是Java语言代码,实现一个包含四个过滤器的管道: ``` import java.io.*; public class FilterPipe { public static void main(String[] args) throws IOException { String filePath = "path/to/input/file"; // 输入文件路径 FileInputStream fis = new FileInputStream(filePath); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); // 定义四个过滤器,分别是转换成大写、删除空格、替换特殊字符、添加行号 UpperCaseFilter filter1 = new UpperCaseFilter(br); RemoveWhitespaceFilter filter2 = new RemoveWhitespaceFilter(filter1); ReplaceSpecialCharactersFilter filter3 = new ReplaceSpecialCharactersFilter(filter2); AddLineNumberFilter filter4 = new AddLineNumberFilter(filter3); // 遍历输出结果 String line; while ((line = filter4.readLine()) != null) { System.out.println(line); } // 关闭资源 fis.close(); isr.close(); br.close(); } } class UpperCaseFilter extends FilterReader { UpperCaseFilter(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int result = super.read(cbuf, off, len); if (result != -1) { for (int i = off; i < off + result; i++) { cbuf[i] = Character.toUpperCase(cbuf[i]); } } return result; } } class RemoveWhitespaceFilter extends FilterReader { RemoveWhitespaceFilter(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int result = super.read(cbuf, off, len); if (result != -1) { int writeIndex = off; for (int i = off; i < off + result; i++) { if (!Character.isWhitespace(cbuf[i])) { cbuf[writeIndex++] = cbuf[i]; } } result = writeIndex - off; } return result; } } class ReplaceSpecialCharactersFilter extends FilterReader { ReplaceSpecialCharactersFilter(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int result = super.read(cbuf, off, len); if (result != -1) { for (int i = off; i < off + result; i++) { if (cbuf[i] == '#') { cbuf[i] = '*'; } } } return result; } } class AddLineNumberFilter extends FilterReader { private int lineNumber = 0; AddLineNumberFilter(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int result = super.read(cbuf, off, len); if (result != -1) { StringBuilder sb = new StringBuilder(); for (int i = off; i < off + result; i++) { sb.append(cbuf[i]); } String[] lines = sb.toString().split("\\r?\\n"); StringBuilder filteredLines = new StringBuilder(); for (String line : lines) { filteredLines.append(lineNumber++).append(": ").append(line).append("\n"); } char[] filteredChars = filteredLines.toString().toCharArray(); System.arraycopy(filteredChars, 0, cbuf, off, filteredChars.length); result = filteredChars.length; } return result; } } ``` 以上就是使用Java语言实现一个具有四个过滤器的管道的代码,其中的四个过滤器分别是: 1. 转换成大写字母 2. 删除空白字符 3. 替换#字符为* 4. 添加行号 ### 回答2: 使用Java语言编写一个带有四个过滤器的管道,可以按照以下步骤进行实现: 1. 创建一个过滤器接口 (Filter): ``` public interface Filter { void doFilter(String request); } ``` 2. 实现四个过滤器类,每个类都要实现过滤器接口,并按照需要对请求进行处理。 3. 创建一个管道类 (FilterChain),用于管理过滤器: ``` public class FilterChain { private List<Filter> filters; public FilterChain() { filters = new ArrayList<>(); } public void addFilter(Filter filter) { filters.add(filter); } public void doFilter(String request) { for (Filter filter : filters) { filter.doFilter(request); } } } ``` 4. 创建一个客户端类 (Client) 用于测试所创建的过滤器管道: ``` public class Client { public static void main(String[] args) { // 创建过滤器管道 FilterChain filterChain = new FilterChain(); // 添加过滤器 filterChain.addFilter(new Filter1()); filterChain.addFilter(new Filter2()); filterChain.addFilter(new Filter3()); filterChain.addFilter(new Filter4()); // 模拟请求 String request = "Sample Request"; // 执行过滤器管道的过滤操作 filterChain.doFilter(request); } } ``` 5. 编写四个过滤器类 (Filter1, Filter2, Filter3, Filter4) 分别实现过滤器接口的 `doFilter` 方法,对请求进行不同的处理。 通过以上步骤,就可以使用Java语言编写一个拥有四个过滤器的管道,可以按照添加的顺序对请求进行处理。 ### 回答3: 在Java语言中,我们可以使用Servlet的Filter接口来实现一个有四个过滤器的管道。首先,我们需要创建四个不同的类实现Filter接口,并重写它的doFilter方法。 第一个过滤器类Filter1实现doFilter方法,通过request.getParameter()方法获取请求参数,并根据条件对请求进行过滤,然后将请求传递给下一个过滤器。 第二个过滤器类Filter2同样实现doFilter方法,对请求进行二次过滤,并将请求传递给下一个过滤器。 第三个过滤器类Filter3同样实现doFilter方法,对请求进行第三次过滤,并将请求传递给最后一个过滤器。 第四个过滤器类Filter4同样实现doFilter方法,对请求进行最终的过滤处理,并将请求传递给目标Servlet或JSP页面进行相应的处理。 接下来我们需要在web.xml文件中配置这四个过滤器。在<web-app>标签内添加以下内容: <filter> <filter-name>Filter1</filter-name> <filter-class>com.example.Filter1</filter-class> </filter> <filter> <filter-name>Filter2</filter-name> <filter-class>com.example.Filter2</filter-class> </filter> <filter> <filter-name>Filter3</filter-name> <filter-class>com.example.Filter3</filter-class> </filter> <filter> <filter-name>Filter4</filter-name> <filter-class>com.example.Filter4</filter-class> </filter> <filter-mapping> <filter-name>Filter1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Filter2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Filter3</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Filter4</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 上述配置将这四个过滤器按照顺序依次应用到所有的URL请求上,从而实现一个具有四个过滤器的管道。每个过滤器在doFilter方法中对请求进行特定的处理或过滤,然后将请求传递给下一个过滤器,最终到达目标Servlet或JSP页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值