我知道类似以下三行

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

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


当前回答

如果我们在JavaWeb应用程序中使用以下内容,Java代码可以从JSP文件的前台删除。

为web应用程序使用MVC架构使用JSP标记

a.标准标签

b.自定义标签

表达式语言

其他回答

无论您如何努力避免,当您与其他开发人员合作时,他们中的一些人仍然会选择scriptlet,然后将邪恶代码插入到项目中。因此,如果您真的想要减少scriptlet代码,那么在第一个标志处设置项目是非常重要的。有几种方法可以克服这个问题(包括其他提到的几种框架)。但是,如果您喜欢纯JSP方式,那么可以使用JSTL标记文件。这样做的好处是,您还可以为项目设置母版页,这样其他页面就可以继承母版页

在WEB-INF/标记下创建一个名为base.tag的母版页,内容如下

<%@tag description=“总体页面模板”pageEncoding=“UTF-8”%><%@attribute name=“title”fragment=“true”%><html><head><标题><jsp:invokefragment=“title”></jsp:invoke></title></head><body><div id=“page header”>....</div><div id=“page body”><jsp:doBody/></div><div id=“page footer”>.....</div></body></html>

在这个主页面上,我创建了一个名为“title”的片段,这样在子页面中,我可以在主页面的这个位置插入更多代码。此外,标记<jsp:doBody/>将被子页面的内容替换

在WebContent文件夹中创建子页面(child.jsp):

<%@taglib prefix=“t”tagdir=“/WEB-INF/tags”%><t:基础><jsp:attribute name=“title”><bean:messagekey=“hello.world”/></jsp:attribute><jsp:body>[将您的孩子内容放在这里]</jsp:body></t:基础>

<t:base>用于指定要使用的母版页(此时为base.tag)。此处标记<jsp:body>中的所有内容将替换母版页上的<jsp:doBody/>。您的子页面还可以包含任何标记库,您可以像前面提到的其他页面一样正常使用它。但是,如果在这里使用任何scriptlet代码(<%=request.getParameter(“name”)%>…)并尝试运行此页面,您将得到一个JasperException,因为此处不允许脚本元素(&lt;%!,&lt;jsp:declaration,&lt!%=,&lt;jsp:expression,&lt:%,&lt,jsp:scriptlet)。因此,其他人无法将恶意代码包含到jsp文件中

从控制器调用此页面:

您可以从控制器轻松调用child.jsp文件。这也适用于struts框架

Wicket也是一种将Java与HTML完全分离的替代方案,因此设计师和程序员可以在彼此不了解的情况下一起工作并处理不同的代码集。

看看Wicket。

在JSP中使用scriptlets不是一种好的做法。

相反,您可以使用:

JSTL标签EL表达式自定义标记-您可以定义自己要使用的标记。

请参考:

http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html电子邮箱

从技术上讲,JSP在运行时都转换为Servlet。

JSP最初创建的目的是按照MVC模式分离业务逻辑和设计逻辑。因此,JSP在运行时技术上都是Java代码。

但为了回答这个问题,标记库通常用于将逻辑(删除Java代码)应用于JSP页面。

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

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