我知道类似以下三行
<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>
是一种老式的编码方式,在JSP版本2中存在一种避免JSP文件中出现Java代码的方法。什么是可选的JSP2行,这种技术叫什么?
我知道类似以下三行
<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>
是一种老式的编码方式,在JSP版本2中存在一种避免JSP文件中出现Java代码的方法。什么是可选的JSP2行,这种技术叫什么?
当前回答
如果有人真的反对用多种语言编程,我建议使用GWT。理论上,您可以避免所有JavaScript和HTML元素,因为GoogleToolkit将所有客户端和共享代码转换为JavaScript。你不会有问题,所以你有一个没有任何其他语言编码的网络服务。您甚至可以使用扩展(smartGWT或Vaadin)提供的某些默认CSS。你不需要学习很多注释。
当然,如果你愿意的话,你可以深入代码的深处,注入JavaScript,丰富HTML页面,但如果你愿意,你真的可以避免它,结果会和其他框架一样好。我认为值得一试,而且基本的GWT有很好的文档记录。
当然,许多程序员同事在此描述或推荐了其他几种解决方案。GWT适用于那些真正不想处理web部件或将其最小化的人。
其他回答
JSP2.0有一个名为“标记文件”的特性,您可以在没有外部Java代码和tld的情况下编写标记。您需要创建一个.tag文件并将其放入WEB-INF\tag中。您甚至可以创建一个目录结构来打包标记。
例如:
/WEB-INF/tags/html/label.tag
<%@tag description="Rensders a label with required css class" pageEncoding="UTF-8"%>
<%@attribute name="name" required="true" description="The label"%>
<label class="control-label control-default" id="${name}Label">${name}</label>
像这样使用
<%@ taglib prefix="h" tagdir="/WEB-INF/tags/html"%>
<h:label name="customer name" />
此外,您还可以轻松阅读标签正文:
/WEB-INF/tags/html/bold.tag
<%@tag description="Bold tag" pageEncoding="UTF-8"%>
<b>
<jsp:doBody/>
</b>
使用它:
<%@ taglib prefix="h" tagdir="/WEB-INF/tags/bold"%>
<h:bold>Make me bold</h:bold>
示例非常简单,但您可以在这里执行许多复杂的任务。请考虑您可以使用其他标记(例如:JSTL,它具有控制标记,如if/forEcah/selected文本操作,如format/inclusions/capital或甚至SQL标记select/update),传递所有类型的参数,例如Hashmap、访问会话、请求等。。。在您的标记文件中。
标记文件非常容易开发,因为在更改它们时不需要重新启动服务器,就像JSP文件一样。这使它们易于开发。
即使您使用Struts2这样的框架,它有很多好的标记,您可能会发现拥有自己的标记可以大大减少代码。您可以将标记参数传递给struts,并通过这种方式自定义框架标记。
您不仅可以使用标记来避免Java,还可以最小化HTML代码。当我看到页面中出现重复的代码时,我自己会尝试检查HTML代码并构建标记。
(即使您最终在JSP代码中使用Java(我希望不会),也可以将该代码封装在标记中。)
作为保障:永远禁用Scriptlets
正如另一个问题所讨论的,您可以并且应该始终禁用web.xml web应用程序描述符中的scriptlets。
我会一直这样做,以防止任何开发人员添加脚本,特别是在大公司中,您迟早会失去概述。web.xml设置如下所示:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
当然,替换<%!计数器++;%>通过事件生产者-消费者体系结构,业务层被通知需要增加计数器,它会做出相应的反应,并通知演示者,以便他们更新视图。涉及到许多数据库事务,因为将来我们需要知道计数器的新值和旧值,是谁增加了它,以及考虑到了什么目的。显然,由于层是完全解耦的,因此需要进行序列化。您将能够在RMI、IIOP和SOAP上增加计数器。但只需要HTML,因为这是一个很平常的情况,所以不需要实现。您的新目标是在新的闪亮E7 64GB RAM服务器上达到每秒250次增量。
我有20多年的编程经验,大多数项目在第六节之前都失败了:可重用性可替换性OO能力可调试性可测试性可维护性甚至是必需的。其他由只关心功能的人运营的项目非常成功。此外,在项目中过早实现的僵硬的对象结构使代码无法适应规范的剧烈变化(也称为敏捷)。
因此,我认为在项目早期或不特别需要时定义“层”或冗余数据结构的活动是拖延。
JSTL为条件、循环、集合、get等提供标记。例如:
<c:if test="${someAttribute == 'something'}">
...
</c:if>
JSTL与请求属性一起工作——它们通常由Servlet在请求中设置,Servlet转发到JSP。
在JSP中使用JSTL标记库。这将非常有效。