### Struts框架中的最佳实践与标签库应用 #### 概述 在开发基于Struts框架的应用程序时,遵循良好的设计模式对于确保代码的可维护性和扩展性至关重要。一个常见的建议是“不要在Action中进行业务逻辑的处理”,这意味着业务逻辑应该被封装在专门的Model层中,而Action类则主要负责接收请求、调用相应的服务或业务逻辑组件,并将结果返回给用户界面。 #### 业务逻辑处理的最佳实践 1. **分离关注点**:为了保持清晰的代码结构和提高代码的可读性及可维护性,应该避免在Action类中实现复杂的业务逻辑。这些逻辑应当由专门的业务逻辑层来处理。 - **Action的角色**:Action类主要负责处理用户的请求,验证输入数据,以及决定应用程序的流程控制。它不应该包含具体的业务规则或复杂的数据处理逻辑。 - **业务逻辑层**:业务逻辑层包含了应用程序的核心功能,例如数据处理、业务规则执行等。这些操作通常涉及多个数据库查询或事务管理,因此需要在独立的服务类中实现。 2. **异常处理**:在业务逻辑层中捕获并抛出异常,而在Action层中进行异常处理。这样可以确保错误信息能够被正确地记录和显示给用户,同时保持代码的整洁。 - **异常抛出**:当业务逻辑执行过程中出现错误时(如数据验证失败、数据库操作异常等),应在业务逻辑层抛出异常。 - **异常捕获**:Action层捕获这些异常,并根据异常类型采取相应的措施,比如重定向到错误页面、记录日志等。 #### Struts标签库的应用 Struts框架提供了丰富的标签库,可以帮助开发者更高效地构建动态网页。下面将详细介绍一些常用的Struts标签。 1. **Bean标签** - `<bean:write>`:用于输出Bean中的属性值。 - 示例:`<bean:write name="hello"/>` 输出`hello`的值。 - 属性过滤:可以通过`filter`属性控制是否转义HTML实体。 - 格式化输出:可以指定`format`属性来格式化输出的日期或数字。 2. **Logic标签** - `<logic:empty>` / `<logic:notEmpty>`:用于检查变量是否为空。 - 示例:`<logic:empty name="attr1">attr1为空</logic:empty>` - `<logic:present>` / `<logic:notPresent>`:检查变量是否存在。 - 示例:`<logic:present name="attr1">attr1存在</logic:present>` - `<logic:iterator>`:遍历集合。 - 示例: ```jsp <logic:notEmpty name="userlist"> <logic:iterate id="u" name="userlist"> <bean:write name="u" property="username"/> <bean:write name="u" property="age"/> <bean:write name="u" property="group.name"/> </logic:iterate> </logic:notEmpty> ``` #### JavaServer Pages Standard Tag Library (JSTL)与表达式语言(EL) 除了Struts自身的标签库之外,JSP标准标签库(JSTL)也广泛应用于Web应用程序中。JSTL提供了一系列核心标签,可以用来简化常见的JSP任务,如循环迭代、条件判断等。 1. **表达式语言(EL)** - **基本用法**:EL是一种简洁的语法,用于访问JSP页面范围内的对象和属性。 - 示例:`${hello}` 直接获取`hello`变量的值。 - **范围对象访问**:EL可以轻松访问不同作用域中的对象,如`pageScope`, `requestScope`, `sessionScope`, `applicationScope`。 - 示例:`${requestScope.hello}` - **复合对象属性访问**:EL支持通过`.`操作符访问嵌套对象的属性。 - 示例:`${user.username}`, `${user.group.name}` 2. **EL与Map** - EL也可以用于访问Map类型的对象。 - 示例:`<%= request.setAttribute("map", map) %>`, `${map.key1}` 访问`key1`对应的值。 通过以上介绍可以看出,合理利用Struts框架提供的工具和技术,可以有效地组织代码结构,提高开发效率,同时也能保证代码的可读性和可维护性。
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
1.<bean:write>
request.setAttribute("hello","hello");
<bean:write name="hello"/>
request.setAttribute("bj","<font color='red'>hello</font>");
<bean:write name="bj"/>//输出<font color='red'>hello</font>
<bean:write name="bj" filter="false"/>//输出红色的字
格式化日期:
request.setAttribute("date",new java.util.Date());
<bean:write name="date" format="yyyy-MM-dd HH:mm:ss"/>
格式化数字
request.setAttribute("num",3213434.454);
<bean:write name="num" format="###,###.####"/>
<bean:write name="num" format="###,###.0000/>//补零
输出依赖类的值
<input type="text" value="<bean:write name="user" property="username"/>"/>//里面的标签是在服务器解析的username是getUsername中的Username有关的
<input type="text" value="<bean:write name="user" property="group.name"/>"/>//group类是个属于user类的属性
2.<logic:empty>
<logic:notEmpty>
<logic:present>
<%request.setAttribute("attr2","");%>
<%request.setAttribute("attr3",new ArrayList());%>
<logic:empty name="attr1">
attr1为空
</logic:empty>
<logic:notEmpty name="attr1">
attr1不为空
</logic:notEmpty>
<logic:present name="attr1">
attr1存在
</logic:present>
<logic:notPresent name="attr1">
attr1不存在
</logic:notPresent>
3.<logic:iterator>
for循环遍历迭代
for(Iterator iter=userList.iterator(); iter.haxNext();){
User user = (User) iter.next();
}
<logic:empty name="userlist">
没有符合条件的数据
</logic:empty>
<logic:notEmpty name="userlist">
<logic:iterate id="u" name="userlist">
剩余40页未读,继续阅读
- 粉丝: 7
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip