{% raw %}

# JSP Scriptlets

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

**Scriptlet 只是包含在`<%`和`%>`标签中的 java 代码**。 JSP 容器将 JSP 中包含的语句移动到`_jspService()`方法，同时从 JSP 生成 Servlet。将此代码复制到服务方法的原因是：对于每个客户端的请求，调用`_jspService()`方法，因此其中的代码将针对客户端发出的每个请求执行。

**Scriptlet 的语法：**

`<% 可执行的 java 代码 %>`

### JSP 到 Scriptlet 的 Servlet 转换：

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

**示例 JSP 代码：**

```html
<H3> Sample JSP </H3>
<% myMethod();%>
```
            

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

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

```java
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html");
    HttpSession session = request.getSession();
    JspWriter out = response.getWriter();
    out.println("<H2>Sample JSP</H2>");
    myMethod();
}
```

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

```html`
<%– A jsp example to learn the JSP scripting elements–%>
<%String string1 ="JSP scriptlet";%>
<%!String string2 ="";%>
<html>
<head>
<title> JSP page: Welcome </title>
</head>
<body>
<h1>
<%–This is an Expression statement–%>
Welcome to <%=string1%>
</h1>

<%–sciptlet example–%>
<%if(localstring.equals("JSP scriptlet")){%>
Hi
<%}

else {%>
hello
<%} %>

<%–same thing can be done in this way also–%>
<%if(localstring.equals("JSP scriptlet"))
out.println("Hi"+string2);
else
out.println("hello");
%>
</body>
</html>
```

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

```html
<%if(localstring.equals("JSP scriptlet"))
out.println("Hi"+string2);
else
out.println("hello");
%>
```

上面的代码是一个 JSP scriptlet（注意开始`<%`和结束`%>`标签）。如果您分析上面的代码，那么您会发现标签内的代码是纯 Java 代码，因此为了在 JSP 中执行 Java 代码，我们使用 scriptlet。

```html
<%String string1 ="JSP scriptlet";%>
```

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

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

**使用 scriptlet 显示`if-else`的使用示例：**

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

```java
if (num > 5) {
    out.println("hi");  
} else {
    out.println("num value should not be less than 6");
}
```

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

```html
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.0 translation //EN">
<HTML>
<HEAD>
<TITLE> MY JSP PAGE </TITLE>
</HEAD>
<BODY>
<% if (num > 5) { %>
<H3> hi </H3>
<%} else {%>
<h3> num value should not be less than 6 </h3>
<% } %>
</BODY>
</HTML>
```

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

{% endraw %}