我知道类似以下三行

<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>

是一种老式的编码方式,在JSP版本2中存在一种避免JSP文件中出现Java代码的方法。什么是可选的JSP2行,这种技术叫什么?


当前回答

使用Scriptlets是一种非常古老的方法,不建议使用。如果您想在JSP页面中直接输出一些内容,只需将表达式语言(EL)与JSTL一起使用即可。

还有其他选项,例如使用Velocity、Freemark、Thymelaf等模板引擎。但在大多数情况下,将普通JSP与EL和JSTL一起使用符合我的目的,对于初学者来说,这似乎也是最简单的。

此外,请注意,在视图层中执行业务逻辑不是最佳实践。您应该在服务层中执行业务逻辑,并通过控制器将输出结果传递给视图。

其他回答

为了避免JSP文件中的Java代码,Java现在提供了标记库,如JSTL。

此外,Java还推出了JSF,您可以将所有编程结构以标记的形式写入其中。

使用Scriptlets是一种非常古老的方法,不建议使用。如果您想在JSP页面中直接输出一些内容,只需将表达式语言(EL)与JSTL一起使用即可。

还有其他选项,例如使用Velocity、Freemark、Thymelaf等模板引擎。但在大多数情况下,将普通JSP与EL和JSTL一起使用符合我的目的,对于初学者来说,这似乎也是最简单的。

此外,请注意,在视图层中执行业务逻辑不是最佳实践。您应该在服务层中执行业务逻辑,并通过控制器将输出结果传递给视图。

JSTL为条件、循环、集合、get等提供标记。例如:

<c:if test="${someAttribute == 'something'}">
   ...
</c:if>

JSTL与请求属性一起工作——它们通常由Servlet在请求中设置,Servlet转发到JSP。

通过将JSTL标记与EL表达式一起使用,可以避免这种情况。在JSP页面中放置以下内容:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

如果您只是想避免JSP中Java编码的缺点,那么即使使用scriples也可以这样做。只需遵循一些规则,在JSP中使用最少的Java,而在JSP页面中几乎没有计算和逻辑。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% // Instantiate a JSP controller
MyController clr = new MyController(request, response);

// Process action, if any
clr.process(request);

// Process page forwarding, if necessary

// Do all variable assignment here
String showMe = clr.getShowMe();%>

<html>
    <head>
    </head>
    <body>
        <form name="frm1">
            <p><%= showMe %>
            <p><% for(String str : clr.listOfStrings()) { %>
            <p><%= str %><% } %>

            // And so on   
        </form>
    </body>
</html>