大型Web应用开发:挑战、解决方案与工具应用
立即解锁
发布时间: 2025-08-23 01:08:39 阅读量: 3 订阅数: 14 


数据密集型Web应用的设计与实现
# 大型Web应用开发:挑战、解决方案与工具应用
## 1. 数据库与事务相关问题
在大型Web应用开发中,会遇到一些与数据库和事务处理相关的挑战。
### 1.1 数据库间关系缺乏
当实体映射到不同数据源时,实体之间关系的编程被限制在相关实体的实体bean的set/get函数中。这样做的好处是,Web应用代码无需承担实现这一复杂功能的负担,并且可以被多个应用重复使用。
### 1.2 事务原子性缺失
多个EJB的更新可以在EJB容器管理的原子事务上下文中执行,确保数据操作的一致性。
## 2. 使用CSS和XSL管理展示
在大型应用开发中,减少在大量页面上更新应用外观和感觉所需的工作量是一个关键问题。处理展示需要解决两个不同的问题:图形属性和布局。
### 2.1 图形属性管理
有效的图形属性管理需要在使用HTML时格外小心。图形属性不应作为标签属性编码在HTML标记中,而应提取到单独文件存储的级联样式表(CSS)中。对于WebML应用的CSS定义,一个好的做法是利用概念模型对CSS规则进行模块化。例如,对于每个WebML单元,可以设计一组规则,通过识别展示某种单元所需的不同图形元素(各种标签、单元格背景等),并使用CSS为每个元素分配适当的图形属性。以下是一些示例CSS规则:
```css
.IndexUnit-Title {
FONT-WEIGHT: bold;
FONT-SIZE: 9px;
COLOR: #ffffff;
FONT-FAMILY: verdana;
}
.IndexUnit-Attribute-Name {
FONT-WEIGHT: bold;
FONT-SIZE: 10px;
COLOR: #000000;
FONT-FAMILY: verdana;
}
.IndexUnit-Attribute-Value {
FONT-SIZE: 9px;
COLOR: #000000;
FONT-FAMILY: verdana;
}
.IndexUnit-Attribute-Name-Highlighted {
FONT-WEIGHT: bold;
FONT-SIZE: 10px;
COLOR: #ff0000;
FONT-FAMILY: verdana;
}
.IndexUnit-Attribute-Value-Highlighted {
FONT-SIZE: 9px;
COLOR: #ff0000;
FONT-FAMILY: verdana;
}
```
### 2.2 布局管理
从页面的JSP模板中分离出布局更具挑战性,但可以通过XSLT技术实现。基本思路是将页面和不同类型单元的布局与JSP模板分开定义,具体步骤如下:
1. **生成页面模板骨架**:包含页面单元对应的所有自定义标签,但仅包含定义页面布局网格和各单元在网格中位置所需的最少HTML标记。
2. **使用XSLT展示规则**:将模板骨架转换为包含实际展示标记的最终页面模板。
以下是页面模板骨架和最终页面模板的示例:
```html
<!-- 页面模板骨架 -->
<html>
<body>
<table>
<tr>
<td>
<webml:dataUnit>
<webml:attribute>
</webml:dataUnit>
</td>
</tr>
</table>
</body>
</html>
<!-- 页面模板 -->
<html>
<body style= ..>
<table border=..>
<tr>
<td align= ..>
<webml:dataUnit>
<table> .. </table>
</webml:dataUnit>
</td>
</tr>
</table>
</body>
</html>
```
### 2.3 XSLT布局规则
XSLT布局规则分为页面规则和单元规则:
- **页面规则**:匹配骨架布局的最外层部分(如顶级HTML表格),并将其转换为页面的实际网格,可能包括多个框架、图像、静态文本和其他装饰元素。为便于编写页面规则,可以将页面布局分类为通用类别(如多框架页面、两列页面、三列页面等),并为每个布局类别设计不同的规则集。
- **单元规则**:匹配一类单元(如索引单元),并生成其展示标记。以下是一个索引单元展示的XSLT规则示例:
```xml
<xsl:template match="webml:indexUnit">
<webml:indexUnit unitID="{@unitID}">
<table>
<!-- 标题(标签) -->
<th>
<xsl:for-each select="webml:iterator/webml:attribute">
<td>
<span class="IndexUnit-Attribute-Name">
```
0
0
复制全文
相关推荐









