我认为JSP有问题(下)

网络编程 2025-03-31 03:31www.168986.cn编程入门

(编译者小龙亭主Blueski,文章更新日期:XXXX年XX月XX日)

问题三:简单工作依然具有挑战性

尽管是一些简单的工作,如包含页眉和页脚,在JSP中的处理也并不轻松。设想有一个通用的“header”和“footer”模板需要嵌入到所有页面中,而每个模板都需要包含当前的页面标题。

在JSP中的最佳实践是这样的:

```jsp

<% String title = "The Page Title"; %>

<%@ include file="/header.jsp" %>

...你的页面内容...

<%@ include file="/footer.jsp" %>

```

页面设计者需要牢记不要遗漏第一行的分号,并将title定义为一个字符串。/header.jsp和/footer.jsp必须位于根目录下,并且必须是可访问的完整文件。

相比之下,WebMacro在处理headers和footers时显得更为简便:

```webmacro

set $title = "The Page Title"

parse "header.wm"

Your content here

parse "footer.wm"

```

对于设计者来说,使用WebMacro没有需要牢记的分号或对title的特定定义,.wm文件可以放在自定义的搜索路径下,使得操作更为灵活。

问题四:循环的粗糙处理

在JSP中进行循环是一项挑战。下面是一个用JSP重复打印每个ISP对象名字的示例:

```jsp

<%

Enumeration e = list.elements();

while (e.hasMoreElements()) {

out.print("The next name is ");

out.println(((ISP)e.nextElement()).getName());

out.print("");

}

%>

```

这段JSP代码可能会显得与Java代码格格不入。相较之下,WebMacro的循环更为优雅:

```webmacro

foreach $isp in $isps {

The next name is $isp.Name

}

```

如果需要,还可以自定义循环指令,比如使用foreach-backwards指令来轻松实现反向循环。在设计者眼中,这样的处理方式显然更受欢迎。

问题五:错误的提示信息令人困惑

JSP经常会提供令人惊讶的出错信息。原因是页面被转换成一个servlet后才进行编译。即便使用优秀的JSP工具,也往往难以准确找到错误的具体位置。由于转化过程的存在,有些错误可能根本无法被识别。例如,尝试在JSP页面中设置一个全局标题时可能会遇到如下问题: 静态变量在JSP中的声明方式应该是 `` 中的内容而不是直接在 `<%= %>` 标签内部。这对于页面设计者来说是非常难以理解的。即便最好的平台在这方面也做得不够友好。对于类似 `<%= count %>` 这样的表达式出错信息更是让人困惑。由于模板引擎能够在模板文件中直接生成代码而无需经历复杂的转换过程,因此能够更轻松地提供适当的错误报告。这对于开发者来说无疑是一大福音。当我们在Unix shell中输入C语言的命令时,我们并不期待shell会编译并运行一个C程序。相反,我们期望的是shell能够直接并执行这些命令,同时在遇到错误时及时向我们反馈。

问题6:编译器的需求

JSP(Java Server Pages)确实需要一个在Web服务器中运行的编译器。Sun公司的决策使得这个问题变得复杂。他们拒绝开放包含其javac编译器的tools.jar库,这让情况变得棘手。虽然Web服务器可以采用第三方的编译器,如IBM的Jikes,但这些编译器并非在所有平台上都能顺利运行。由于它们是用C++编写的,这对于建立纯Java的web服务器来说并不理想。幸运的是,JSP提供了预编译的选项,尽管这并不是一个完美的解决方案。

问题7:空间浪费

JSP在运行时会产生额外的内存和硬盘空间消耗。具体来说,对于服务器上每个30K的JSP文件,会产生相应的大于30K的类文件。实际上,这使得硬盘空间需求翻倍。考虑到JSP文件可以很容易地通过某种方式(如cambrian.render('body'))进行渲染和展示,这种空间消耗的问题显得尤为突出。

对于上述问题,我们需要寻找一种平衡。JSP作为一种动态网页技术标准,有其独特的优势和应用场景。尽管面临编译器需求和空间浪费的挑战,但它在构建交互式、数据库驱动的网站方面表现出色。可能的解决方案包括寻找更高效的JSP编译器,优化Web服务器的资源配置,以及新的技术趋势,如使用更轻量级的服务器端框架或采用前后端分离的开发模式。

JSP作为一种强大的服务器端技术,虽然在实践中面临一些挑战,但只要我们善于发现问题并寻求解决方案,就能够充分发挥其潜力,为Web应用程序开发带来更大的价值。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by