Struts 2是Apache Struts框架的第二代版本,是一个用于开发Model-View-Controller (MVC) 应用程序的Java框架。与Struts 1相比,Struts 2在设计和功能上有了显著的提升,旨在解决Web开发中的常见问题,如页面导航、数据验证、国际化和组件复用等。
在Struts 2中,`url`标签是一个关键组件,用于动态生成URL并传递参数。这个标签允许开发者指定要调用的`action`(默认值为当前action,可以通过`value`属性指定),命名空间(namespace)以及引用变量的名称(var)。例如:
```java
<s:url action="ognlTagAction_test" namespace="/ognl" var="myurl">
<s:param name="name" value="%{'张老师'}"></s:param>
<s:param name="id" value="12"></s:param>
</s:url>
```
这里,`ognlTagAction_test`是action的名字,`namespace="/ognl"`定义了请求的上下文路径,`var="myurl"`则创建了一个名为`myurl`的变量来存储生成的URL。通过`<s:param>`标签,可以动态地传递参数,如`name`和`id`。
在页面中,开发者可以使用`<s:property>`标签来引用`url`标签生成的变量,例如 `<a href='<s:property value="#myurl" />' >xxxx</a>` 和 `<a href='<s:property value="%{#myurl}" />' >xxxx</a>`,这样可以在不同的表达形式下展示动态生成的链接。
Struts 2的架构优势主要体现在以下几个方面:
1. **解耦**:Struts 2不像Struts 1那样与Servlet API和Struts API紧密绑定,这使得应用更加灵活,减少了对底层API的依赖。
2. **拦截器**:引入了拦截器机制,允许进行面向切面编程(AOP),如权限控制、事务处理等,增强了应用的可维护性和扩展性。
3. **类型转换**:Struts 2内置了类型转换器,方便处理请求参数到目标类型的转换,简化了开发过程。
4. **多表现层支持**:Struts 2支持多种表现层技术,如JSP、FreeMarker和Velocity,为开发者提供了更大的灵活性。
5. **更强大的输入验证**:Struts 2的输入验证可以针对特定方法进行,解决了Struts 1中全局校验的局限性,并且支持国际化和资源文件的管理。
在升级从Struts 1到Struts 2时,要注意两者在设计理念上的差异,Struts 2更倾向于WebWork的设计,而且不是简单的继承关系。升级过程可能涉及重构代码,以适应新的拦截器体系和标签语法。总体来说,Struts 2提供了更现代化的Web开发体验和更好的代码组织结构。