我认为JSP有问题(下)

qin赵海川

qin赵海川

2016-01-29 12:48

我认为JSP有问题(下),我认为JSP有问题(下)
问题 #3: 简单工作仍然很累人

  即使是很简单的工作,例如包含 header和 footer,在JSP中仍然很困难。假设有一个"header"和一个"footer"模板要包含到所有页面,而每一个模板要在content中包含当前的页标题。

  在JSP中最佳办法是:

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

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

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

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

  页面设计者要记住不能遗漏第一行的分号并要将title定义为一个字符串。此外,/header.jsp和/footer.jsp必须在根目录下并且必须是可存取的完整文件。

  在WebMacro中包含headers和footers做起来比较简单:

  #set $title = "The Page Title"

  #parse "header.wm"

  Your content here

  #parse "footer.wm"

  这里对设计者来说没有要牢记的分号或对title的定义,.wm文件可以放在可自定义的搜索路径下。

  问题 #4: 很粗燥的循环

  在JSP中循环很困难。这里是用JSP重复打印出每一个ISP对象名字。

  <%

  Enumeration e = list.elements();

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/java/)

  while (e.hasMoreElements()) {

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

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

  out.print("<br");

  }

  %

  也许什么时候会有用户自定义标记来做这些循环。对"if"也是如此。JSP页可能看上去成了很古怪的java代码。而同时,webmacro循环很漂亮:

  #foreach $isp in $isps {

  The next name is $isp.Name <br

  }

  如果必要的话,#foreach指令可被自定义的 #foreach-backwards指令很容易地取代。

  用jsp的话很可能变这样:(这里是一个可能的 <foreach标记)

  <foreach item="isp" list="isps"

  The next name is <jsp:getProperty name="isp" property="name"/ <br

  </foreach

  设计者当然地会选择前者。

  问题 #5: 无用的出错信息

  JSP常有一些令人惊讶的出错信息。这是因为页面首先被转换成为一个servlet然后才进行编译。好的JSP 工具可以相对增加找到出错位置的可能性,但即使是最好的工具也无法使所有出错信息都能容易地被读懂。由于转化的过程,一些错误对工具来说可能根本不可能被识别。

  例如,假设JSP页面需要建立一个对所有页通用的标题。以下代码并没有错:

  <% static String title = "Global title"; %

  但Tomcat会提供以下出错信息:

  work/%3A8080%2F/JC_0002ejspJC_jsp_1.java:70: Statement expected.

  static int count = 0;

  ^

  此信息认为以上脚本被放入 _jspService()方法而静态变量不允许放入方法中。该语法应该是 <%! %。页面设计者很难读懂这些出错信息。即使最好的平台在这方面也做得很不够。即使所有 Java代码都从页中移出也无法解决问题。另外,以下表达式有什么错?

  <% count %

  tomcat给出:

  work/8080/_0002ftest_0002ejsptest_jsp_0.java:56: Class count not found in

  type declaration.

  count

  ^

  work/8080/_0002ftest_0002ejsptest_jsp_0.java:59: Invalid declaration.

  out.write("rn");

  ^

  换句话说,其实只不过是遗失了一个标记而已。应该是 <%= count %。

  由于template engine可以在template文件中直接产生而没有任何戏剧性的向代码转化,所以可以非常容易地给出适当的出错报告。依次类推,当c语言的命令被打入Unix shell的命令行,你并不希望shell会生成一个C程序来运行这个命令,而只是需要shell简单地解释命令并加以执行,如有错误也直接给出。

  问题 #6: 需要一个编译器

  JSP需要一个置放在webserver中的编译器。由于Sun拒绝放弃包含了他们的javac编译器的tools.jar库, 这其中就变得有问题了。Web服务器可以包含进一个第三方的编译器如ibm的jikes。但这样的编译器并不能在所有平台上顺利工作(用 C++写成的) 也不利于建立纯Java 的web服务器。JSP还有一个预编译选项可以起到一定作用,但并不完美。

  问题 #7: 空间的浪费

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/java/)

  JSP消耗了额外的内存和硬盘空间。对服务器上每30K的JSP文件,必须要有相应的大于30K的类文件产生。实际上使得硬盘空间加倍。考虑到JSP文件随时可以很容易地通过 <%@ include包含一个大的数据文件,这样的关注有着很现实的意义。同时,每一个JSP的类文件数据必须加载到服务器的内存中,这意味着服务器的内存必须永远地将整个JSP文档树保存下去。少数一些JVM有能力

展开更多 50%)
分享

猜你喜欢

我认为JSP有问题(下)

Web开发
我认为JSP有问题(下)

我认为JSP有问题(下)

Java JAVA基础
我认为JSP有问题(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

我认为JSP有问题(上)

Java JAVA基础
我认为JSP有问题(上)

我认为JSP有问题(上)

Web开发
我认为JSP有问题(上)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

jsp环境下ajax乱码问题的解决

Web开发
jsp环境下ajax乱码问题的解决

98下安装JSP环境的俩常见问题

Java JAVA基础
98下安装JSP环境的俩常见问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

关于FLASH留言板的详细教程

关于FLASH留言板的详细教程

使用自定义的数据源进行DataGrid控件的数据绑定

使用自定义的数据源进行DataGrid控件的数据绑定
下拉加载更多内容 ↓