# JSP Scriptlets

> 原文： [https://beginnersbook.com/2013/05/jsp-tutorial-scriptlets/](https://beginnersbook.com/2013/05/jsp-tutorial-scriptlets/)

[**«上一个教程：JSP 指令**](https://beginnersbook.com/2013/05/jsp-tutorial-directives/)

[**下一个教程：JSP 动作»**](https://beginnersbook.com/2013/06/jsp-tutorial-actions/)

**Scriptlet 只是包含在**＆lt;％和％＆gt;中的 java 代码**了。标签**。 JSP 容器将 JSP 中包含的语句移动到 **_jspService（）**方法，同时从 JSP 生成 servlet。将此代码复制到服务方法的原因是：对于每个客户端的请求，调用 _jspService（）方法，因此其中的代码将针对客户端发出的每个请求执行。

**Scriptlet 的语法：**

[code language =“java”]＆lt;％可执行的 java 代码％＆gt; [/ code]

### JSP 到 Scriptlet 的 Servlet 转换 -

正如我在之前的教程中所述，JSP 没有直接执行，它首先被转换为 Servlet，然后 Servlet 执行正常。另外，我在第一段中解释说，从 JSP 到 servlet 的转换，java 代码从 scriptlet 复制到 _jspService（）方法。让我们看看这是怎么回事。

**示例 JSP 代码：**

[code language =“html”]
＆lt; H3＆gt;样本 JSP＆lt; / H3＆gt;
＆lt;％myMethod（）;％＆gt;
[/ code]

**注意：**分号在 scriptlet 的末尾。

**上述 JSP 代码的相应翻译 Servlet 代码：**

[code language =“java”]
public void _jspService（HttpServletRequest request，
HttpServletResponse response）
抛出 ServletException，IOException {
response.setContentType（“text / html”）;
HttpSession session = request.getSession（）;
JspWriter out = response.getWriter（）;
out.println（“＆lt; H2＆gt; Sample JSP＆lt; / H2＆gt;”）;
myMethod（）;
} [/ code]

### **了解脚本元素的一个例子：**

[code language =“java”]
＆lt;％ - 学习 JSP 脚本元素的 jsp 示例 - ％＆gt;
＆lt;％String string1 =“JSP scriptlet”;％＆gt;
＆lt;％！String string2 =“”;％＆gt;
＆lt; html＆gt;
＆lt; head＆gt;
＆lt; title＆gt; JSP 页面：欢迎＆lt; / title＆gt;
＆lt; / head＆gt;
＆lt; body＆gt;
＆lt; h1＆gt;
＆lt;％ - 这是一个表达式声明 - ％＆gt;
欢迎使用＆lt;％= string1％＆gt;
＆lt; / h1＆gt;

＆lt;％ - sciptlet 示例 - ％＆gt;
＆lt;％if（localstring.equals（“JSP scriptlet”））{％＆gt;
你好
＆lt;％}

别的{％＆gt;
你好
＆lt;％}％＆gt;

＆lt;％ - 同样可以用这种方式完成 - ％＆gt;
＆lt;％if（localstring.equals（“JSP scriptlet”））
out.println（“Hi”+ string2）;
其他
out.println（“你好”）;
％＆gt;
＆lt; / body＆gt;
＆lt; / html＆gt; [/ code]

在上面的示例中，存在许多类型的 JSP 元素，例如 Expression，JSP comment，Declaration 元素等。我们将在即将到来的 JSP 教程中看到它们中的每一个，但是到目前为止，您只能关注 Scriptlet。以下是上例中使用的 scriptlets 语句 -

[code language =“java”]
＆lt;％if（localstring.equals（“JSP scriptlet”））
out.println（“Hi”+ string2）;
其他
out.println（“你好”）;
％＆gt; [/ code]

上面的代码是一个 JSP scriptlet（通知开始＆lt;％和结束％＆gt;标记）。如果您分析上面的代码，那么您会发现标签内的代码是纯 Java 代码，因此为了在 JSP 中执行 Java 代码，我们使用 scriptlet。

[code language =“java”]＆lt;％String string1 =“JSP scriptlet”;％＆gt; [/ code]

像上面的语句一样，这个语句是一个 java 初始化代码，它包含在标记中。

除了上面两组 scriptlet 之外，上面的例子中还有许多其他的 scriptlet 标签（注意 if-else 控制流逻辑）。要使用 java 的 if-else 控制流语句，我们在上面的示例中使用了 scriptlet。因为这是使用 scriptlet 的主要优点所以让我们借助一个例子让它更清晰 - 你必须知道我们的 If - else 控制语句有多重要。

**使用 scriptlet 显示 if -else 的使用示例 -**
假设有一个变量 num 并且你想在你的网页上显示“hi”，如果它大于 5，否则你想要显示一条消息。考虑下面这个场景的代码 -
**如果你想在 java 中为上述情况编写一个代码，那么它看起来像这样 -**

[code language =“java”]
if（num＆gt; 5）
{
out.println（“hi”）;
}
其他
{
out.println（“num 值不应小于 6”）;
} [/ code]

**要在 JSP 中编写类似的代码，我们需要使用 JSP scriptlet - 代码就像这样 -**

[code language =“html”]
＆lt;！ DOCTYPE HTML PUBLIC“ - // W3C // DTD HTML4.0 translation // EN”＆gt;
＆lt; HTML＆gt;
＆lt; HEAD＆gt;
＆lt; TITLE＆gt;我的 JSP PAGE＆lt; / TITLE＆gt;
＆lt; / HEAD＆gt;
＆lt; BODY＆gt;
＆lt;％if（num＆gt; 5）{％＆gt;
＆lt; H3＆gt;嗨＆lt; / H3＆gt;
＆lt;％} else {％＆gt;
＆lt; h3＆gt; num 值不应小于 6＆lt; / h3＆gt;
＆lt;％}％＆gt;
＆lt; / BODY＆gt;
＆lt; / HTML＆gt;
[/ code]

**重要的一点要记住：** 由于里面的代码是 java 代码，**必须以分号（;）结尾。** 现在注意所有的陈述 - 你可能会发现~~所有~~很少的 scriptlet，我们在 java 中给分号，在这里也需要它，并以分号结束。

[**« Previous Tutorial: JSP Directives**](https://beginnersbook.com/2013/05/jsp-tutorial-directives/)

[**Next Tutorial: JSP Actions »**](https://beginnersbook.com/2013/06/jsp-tutorial-actions/)