<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置servlet-->
<servlet>
<!--设置servlet的name为Regist,可以随便取-->
<servlet-name>Regist</servlet-name>
<!--配置name=Regist的servlet 相对于web的路径-->
<servlet-class>com.Regist</servlet-class>
</servlet>
<!--配置servlet的映射-->
<servlet-mapping>
<!--这个name必须要和servlet的name相同-->
<servlet-name>Regist</servlet-name>
<!--from的访问路径,以下表示在/regist(项目名称)/Regist下,form(form所在页面在WebRoot下)的action只要写Regist即可-->
<!--/Regist这个是指在系统中,凡是由Regist结尾的URL全部由com.Regist这个类来处理,在struts2中经常使用/*,它默认的时候是/*.action-->
<url-pattern>/Regist</url-pattern>
</servlet-mapping>
</web-app>
<url-pattern> 好比给你设置一个虚拟路径 下面给一个详解
一,servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
2. 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action
4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。
根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。
对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。
二,url-pattern详解
在web.xml文件中,以下语法用于定义映射:
1.以”/’开头和以”/*”结尾的是用来做路径映射的。
2.以前缀”*.”开头的是用来做扩展映射的。
3.“/” 是用来定义default servlet映射的。
4.剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action
所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
不知道理解有没有问题,如果有问题麻烦给我留个言,谢谢。
分享到:
相关推荐
在 web.xml 中配置 Struts2 的过滤器 FilterDispatcher。 **3.2 数据接收** - **自动填充**:Struts2 自动从 request 中获取数据并填充到 Action 对象中。 - **原理**:通过拦截器实现,拦截器会查找与 Action 类...
这通常涉及安装Java JDK,设置环境变量,下载并配置Tomcat服务器,以及在Web应用的`WEB-INF/web.xml`中添加Struts2的配置。 Struts2的运行流程及架构分为以下几个步骤: 1. **客户端请求**:用户通过浏览器发起...
### Struts 1.2 学习笔记:深入理解 Struts 工作流程 #### Struts 概述 Struts 是一个开源的 MVC(Model-View-Controller)框架,用于简化 Java Web 应用程序的开发。Struts 1.2 版本是基于 Servlet 的 MVC 实现,...
### Struts2学习笔记知识点详解 #### 一、Struts2框架概览 **起源与发展:** Struts2是WebWork框架的后续版本,融合了Struts1和WebWork的优点,形成了一种更为先进和灵活的MVC框架。相较于Struts1,Struts2在设计...
OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Model和View之间传递数据。它支持对象导航、方法调用、集合操作等多种功能,极大地提高了视图层的灵活性。 以上内容是Struts2学习...
- 在Struts2中,可以通过在`web.xml`文件中定义过滤器(`filter`)来初始化框架。具体来说,需要配置`StrutsPrepareAndExecuteFilter`,它是Struts2的核心过滤器,用于处理所有请求。配置示例如下: ```xml ...
OGNL是一种强大的表达式语言,用于在Java对象图中导航、获取和设置属性,常用于Struts2中的数据绑定和表达式评估。 2.2 OGNL使用示例 例如,OGNL可以用来从Action中直接访问和修改Model的属性,如`#{user.name}`。 ...
- OGNL是Object-Graph Navigation Language的缩写,是Struts2中的默认表达式语言,用于对象属性的访问和操作,如数据绑定和动态方法调用。 - OGNL支持丰富的操作,如属性访问、算术运算、方法调用、列表操作等,为...
这意味着在Struts2中,业务逻辑和模型数据紧密地结合在一起,由Action类直接处理这些逻辑和数据。 #### 三、Struts2的核心组件 Struts2的核心组件包括**Action**、**Interceptor**、**Value Stack/OGNL**、**...
### 七、Struts2中的Action配置 - **Action配置**:在struts.xml中定义Action,可以使用通配符、命名空间等方式进行配置。 - **静态方法调用**:“!”符号后面跟的是静态方法名。 - **参数配置**:使用元素为Action...
`ActionServlet`根据配置文件`struts-config.xml`中的规则来决定如何处理这些请求。具体来说,`ActionServlet`会将请求转发给相应的`Action`对象处理,并根据`Action`对象的返回结果执行相应的页面跳转。 #### 三、...
### Struts学习笔记知识点梳理 #### 一、Struts框架概览 - **Struts**是一种基于MVC(Model-View-Controller)架构模式的Java Web应用框架,它简化了Web应用程序的开发过程,使开发者能够更加高效地构建可扩展且...
本篇学习笔记将深入探讨Struts的核心概念、工作原理以及如何在实际项目中应用Struts来构建高效、可维护的Web应用程序。 一、Struts框架概述 Struts作为经典的MVC框架,它为Java开发者提供了一种组织应用程序逻辑的...
在基于JSP/Servlet的Web应用中实现MVC模式,Struts采用了MVC Model 2的设计。MVC Model 2是在Web环境下对传统MVC模式的一种改进,解决了Web环境中HTTP协议无状态的问题。在Struts框架中,有三个主要组成部分: - **...
### Struts 1.x 学习笔记 #### 一、MVC 概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用程序开发中非常常见。它将应用程序分为三个核心部分: 1. **模型(Model)**...
- **Action中的Web对象访问**:在Struts2中,可以通过多种方式访问到Request、Response等Web对象。 - **ActionContext**:提供了获取当前请求上下文的方法。 - **servletActionContext**:用于获取原始的Servlet ...
### Struts2框架详解 #### 一、Struts2框架介绍 Struts2是一个基于MVC模式的开源Java Web框架,它提供了丰富的功能用于构建Web应用程序。与Struts1相比,Struts2的设计思想和架构有着根本的不同。Struts2的核心是...