我认为JSP有问题(下)
(编译者小龙亭主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中的声明方式应该是 `
问题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应用程序开发带来更大的价值。
编程语言
- 我认为JSP有问题(下)
- PHP的serialize序列化数据以及JSON格式化数据分析
- Nodejs中使用puppeteer控制浏览器中视频播放功能
- 继续学习javascript闭包
- PHP实用小技巧之调用录像的方法
- MySQL主从同步延迟的原因及解决办法
- JSON与JS对象的区别与对比
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- ASP.NET自定义Web服务器控件之Button控件
- phpwind Exp 漏洞利用
- 浅谈关于PHP解决图片无损压缩的问题
- vue.js中created方法作用
- .net实现ping的实例代码
- mysql服务启动却连接不上的解决方法
- 使用jQuery实现更改默认alert框体
- 基于JavaScript实现下拉列表左右移动代码