这个问题。。。整整折磨了我两天。。。
终于把它搞明白了!
在我的web.xml下,如果代码是:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>Ch1Servlet</servlet-name> <servlet-class>demo.Ch1Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Ch1Servlet</servlet-name> <url-pattern>/Ch1Servlet</url-pattern> </servlet-mapping> </web-app>
上面的配置信息,其中<servlet>标签首先配置声明一个servlet,包括servlet的名字和对应的Java类名。
其中<servlet-mapping>标签声明了与该servlet相应的匹配规则,每个<url-pattern>标签代表1个匹配规则。
当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如url是http://localhost:8080/demo/Ch1Servlet,其应用上下文是demo,容器会将http://10.43.11.143/demo去掉,剩下的Ch1Servlet部分拿来做servlet的映射匹配。这个映射匹配过程是有优先顺序的(具体的优先顺序规则后面介绍),而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。
精确匹配:
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/kata/detail.html</url-pattern> <url-pattern>/demo.html</url-pattern> <url-pattern>/table</url-pattern> </servlet-mapping>
当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://10.43.11.143/myapp/kata/detail.htmlhttp://10.43.11.143/myapp/demo.html
http://10.43.11.143/myapp/table
注意:
http://10.43.11.143/myapp/table/ 是非法的url,不会被当作http://10.43.11.143/myapp/table识别
另外上述url后面可以跟任意的查询条件,都会被匹配,如
http://10.43.11.143/myapp/table?hello 这个请求就会被匹配到MyServlet。
扩展名匹配:
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping>
则任何扩展名为jsp(文件名和路径任意)的url请求都会匹配,比如下面的url都会被匹配
http://10.43.11.143/myapp/demo.jsphttp://10.43.11.143/myapp/test.jsp
相关推荐
在Web应用开发中,`web.xml`配置文件扮演着极其重要的角色,其中`<url-pattern>`元素用于定义Servlet的映射规则,即URL模式。通过不同的URL模式,我们可以精确地控制Servlet如何被客户端请求所调用。本文将详细介绍`...
<url-pattern>/pathPattern</url-pattern> </servlet-mapping> ``` 这里,`ServletName`是Servlet的逻辑名称,而`/pathPattern`则是URL-Pattern,它决定了用户如何通过浏览器访问该Servlet。URL-Pattern可以有多种...
<url-pattern>/servlet/HelloServlet</url-pattern> </servlet-mapping> ``` 这意味着所有以`/servlet/HelloServlet`开头的请求都会被映射到名为`HelloServlet`的Servlet。 其次,表单提交的路径`action`属性也会...
Servlet的URL-Pattern匹配规则是Web应用程序中Servlet和Filter配置的核心部分,它决定了Servlet或Filter如何响应特定的HTTP请求。以下是对这些匹配规则的详细解释: 1. **精确匹配** - 在`<url-pattern>`中指定的...
<url-pattern>/upload</url-pattern> <init-param> <param-name>CharacterEncoding</param-name> <param-value>UTF-8</param-value> </init-param> </servlet-mapping> ``` 2. **在Servlet中设置**:在Servlet...
Servlet的URL-Pattern匹配规则是Servlet配置中至关重要的一部分,它决定了Servlet如何响应特定的HTTP请求。以下是关于这个主题的详细解释: 1. **精确匹配**: 这是最直观的匹配方式,`<url-pattern>`中的配置必须...
当设置`<url-pattern>/</url-pattern>`时,Servlet将捕获所有不被其他更具体`url-pattern`处理的请求。这通常用于设置一个默认Servlet,处理静态资源或者提供应用程序的主页。 总结来说,正确配置Servlet的`url-...
<url-pattern>/dbconnect</url-pattern> </servlet-mapping> </web-app> ``` 4. **编写Java代码**: 在Servlet的`doGet`或`doPost`方法中,你可以通过JNDI(Java Naming and Directory Interface)查找之前在...
<url-pattern>/*</url-pattern> </filter-mapping> ``` 这里的`/*`意味着所有的请求都将通过此过滤器。接下来是`urlrewrite.xml`配置文件,其中定义了具体的重写规则: ```xml <rule> <from>^/guide/([a-z]+)/(...
- 添加新的映射规则,例如只处理`.action`后缀的请求:`<url-pattern>*.action</url-pattern>`。 - 可根据需要添加其他映射规则,比如处理JSP页面:`<url-pattern>*.jsp</url-pattern>`。 - **优点**:配置简单,...
<url-pattern>/</url-pattern>//˴Ϊservletȡıǰϡ/;//hello(---ĿĿ¼/hello) </servlet-mapping> ``` - **`<servlet-name>`**:这里再次出现的`servlet-name`应该与上面`servlet`元素中定义的名称相匹配,以便...
当`<url-pattern>`配置为`<url-pattern>/</url-pattern>`时,这个Servlet被称为缺省Servlet。任何未在`web.xml`中找到匹配的`servlet-mapping`的URL请求都会被转发给缺省Servlet处理。在Tomcat的`conf/web.xml`中,...
<url-pattern>*.jsp</url-pattern> </servlet-mapping> ``` 更复杂的情况下,你可以使用正则表达式: ```xml <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>^/path/(.*).jsp$</...
<url-pattern>/*</url-pattern> </filter-mapping> ``` 2. 过滤特定类型的文件: 如果只想过滤特定扩展名的文件,如HTML文件,可以将`<url-pattern>`设置为`*.html`。如果要过滤JSP文件,就改为`*.jsp`。例如,...
<url-pattern>/myservice</url-pattern> </servlet-mapping> </web-app> ``` 这段配置表示名为"MyServlet"的Servlet对应于`com.example.MyServlet`类,并且可以通过`/myservice` URL访问。 三、Servlet生命周期 ...
3. **Servlet映射**:通过`<url-pattern>`标签,我们可以将Servlet映射到特定的URL模式上,如上述示例中的`/myservice`。还可以使用通配符如`*.do`来匹配多种请求路径。 4. **HttpServletRequest与...
<url-pattern>/myservice</url-pattern> </servlet-mapping> </web-app> ``` 这段配置表示有一个名为"MyServlet"的Servlet,它的实现类是`com.example.MyServlet`,并且当用户访问`/myservice`路径时,服务器会...
<url-pattern>/myservice</url-pattern> </servlet-mapping> ``` 这样,当请求URL匹配`/myservice`时,服务器就会调用`MyServlet`。 5. **Servlet的多线程问题** 由于一个Servlet实例可能会同时服务于多个请求...
<url-pattern>/protected/*</url-pattern> </filter-mapping> ``` 这里的`/protected/*`表示所有以`/protected/`开头的URL都将被LoginFilter拦截。 3. **处理登录与登出**:当用户成功登录后,可以在Session中设置...
<url-pattern>/login</url-pattern> </servlet-mapping> </web-app> ``` 3. **处理请求**:在doPost()方法中,从request对象中获取用户提交的登录信息,如用户名和密码。通常,这些信息可以通过request....