在 JSP 中呼叫 Java 類
1.概述
在使用 JSP(JavaServer Pages)時,我們經常需要直接從 JSP 檔案呼叫後端邏輯。無論我們存取業務邏輯、執行計算或從服務層檢索數據,了解如何在 JSP 中呼叫 Java 類別都至關重要。
在本教程中,我們將探討兩種乾淨且有效地完成此操作的方法。
2.問題介紹
在深入研究程式碼之前,讓我們先了解一下其動機。
由於 JSP 旨在專注於演示(MVC 中的視圖層),因此有時需要呼叫 Java 類,尤其是在小型專案或遺留應用程式中。例如,在 JSP 檔案中,我們可能想要:
- 執行後端計算
- 重複使用一些實用方法
- 存取 bean 或業務邏輯
- 避免在 JSP 等內部直接編寫太多 Java 程式碼。
在本教程中,我們將學習兩種實現該目標的方法。
接下來,讓我們深入探討一下。
3. 使用 JSP Scriptlet
首先,我們來看一個簡單的 Java 類別:
public class CourseWelcome {
public String greeting(String username) {
return String.format("Hi %s, how are you doing?", username);
}
public static String staticWelcome(String courseName) {
return String.format("Welcome to Baeldung's %s course", courseName);
}
}
在CourseWelcome
類別中,我們有兩種方法:
-
greeting()
– 傳回問候String
訊息的實例方法 -
staticWelcome()
– 傳回歡迎String
訊息的靜態方法
接下來,我們來看看如何從JSP頁面呼叫這兩個方法。
在本教程中,我們將使用 Spring Boot 來導航我們的 JSP 頁面。例如,我們可以建立一個控制器和一個 HTTP 映射:
@Controller
@RequestMapping("/course")
public class WelcomeController {
@GetMapping("/welcome")
public String greetingAndWelcome() {
return "course/welcome";
}
}
為了簡單起見,我們將跳過 Spring MVC 配置。
接下來,讓我們使用course/welcome.jsp
檔案中的 JSP 腳本來呼叫CourseWelcome
中定義的兩個方法:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.baeldung.boot.jsp.coursewelcome.CourseWelcome" %>
<html>
<head>
<title>Welcome to Course</title>
</head>
<body>
<%
CourseWelcome courseWelcomeObj = new CourseWelcome();
%>
<div><%= courseWelcomeObj.greeting("Kai")%></div>
<div><%= CourseWelcome.staticWelcome("Spring Boot")%></div>
</body>
</html>
在上面的 JSP 檔案中,我們首先import
CourseWelcome
類,然後包裝 Java 程式碼以**在 JSP scriptlet**標籤「 <%
」和「 %>
」之間建立**CourseWelcome**
物件。
我們可以呼叫CourseWelcome
的靜態和物件方法,並使用 JSP 表達式標籤( <%= … %>
)顯示結果。
現在,讓我們啟動 Spring Boot 應用程式並在瀏覽器中開啟頁面:
我們可以看到,我們在頁面上得到了預期的結果。
4. 使用<jsp:useBean>
動作
或者,我們可以使用<jsp:useBean>
操作來呼叫 Java 類別。
4.1.呼叫CourseWelcome
類
讓我們建立一個新的 JSP 檔案course/welcome-usebean.jsp
來呼叫CourseWelcome
的方法:
<html>
<head>
<title>Welcome to Course</title>
</head>
<body>
<p>Using jsp:useBean action</p>
<jsp:useBean id="welcomeBean" class="com.baeldung.boot.jsp.coursewelcome.CourseWelcome"/>
<div>
<%= welcomeBean.greeting("Kevin")%>
</div>
<div>
<%= com.baeldung.boot.jsp.coursewelcome.CourseWelcome.staticWelcome("Java Collections")%>
</div>
</body>
</html>
如 JSP 檔案所示,在<jsp:useBean>Â
標籤中,我們定義了一個id
,也就是 JavaBean 實例的參考。在這個例子中,它是welcomeBean
。另外,我們需要指定 bean 類別的限定類別名稱。然後,我們可以透過定義為id
的 bean 名稱呼叫CourseWelcome
的物件方法,例如, welcomeBean.greeting().
但是,我們必須注意,我們不能使用<jsp:useBean>
呼叫類別的靜態方法。因此,我們仍然需要在 JSP 腳本或 JSP 表達式標籤之間存取類別的靜態資源。
接下來,我們在WelcomeController
中新增一個映射方法來指向我們新建立的 JSP 檔案:
@Controller
@RequestMapping("/course")
public class WelcomeController {
// ... same code is omitted
@GetMapping("/welcome-usebean")
public String greetingAndWelcomeUseBean() {
return "course/welcome-usebean";
}
}
現在,讓我們啟動應用程式並驗證 JSP 檔案是否有效:
螢幕截圖顯示 JSP 檔案的<jsp:useBean>
操作如預期運作。
4.2.使用 JavaBean
顧名思義,通常我們將<jsp:useBean>
與 JavaBeans 一起使用。通常,一個 JavaBean 包含一組屬性、對應的 getter 和 setter 以及一個預設建構子。
接下來,讓我們建立一個 JavaBean 類別並看看<jsp:useBean>Â
工作:
public class CourseWelcomeBean {
private String username;
private String courseName;
//... getters and setters are omitted
public String greetingUser() {
return String.format("Hi %s, how do you do?", username);
}
public String welcomeMsg() {
return String.format("Welcome to Baeldung's %s course!", courseName);
}
}
CourseWelcomeBean
包含兩個屬性和兩個實例方法。
然後,讓我們建立一個新的 JSP 檔案course/welcome-by-javabean.jsp
:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Welcome to Course</title>
</head>
<body>
<p>Using jsp:useBean action with a JavaBean</p>
<jsp:useBean id="courseWelcomeBean" class="com.baeldung.boot.jsp.coursewelcome.CourseWelcomeBean"/>
<jsp:setProperty name="courseWelcomeBean" property="username" value="Eric"/>
<jsp:setProperty name="courseWelcomeBean" property="courseName" value="Spring Security"/>
<div><%= courseWelcomeBean.greetingUser()%></div>
<div><%= courseWelcomeBean.welcomeMsg()%></div>
</body>
</html>
如程式碼所示,在使用<jsp:useBean>
宣告一個 JavaBean 之後,我們可以透過**<jsp:setProperty>** .Â
此外,我們也可以照常呼叫該 bean 的實例方法。
最後,我們在控制器中建立一個映射方法,並測試course/welcome-by-javabean.jsp
檔案:
@Controller
@RequestMapping("/course")
public class WelcomeController {
// ... same code is omitted
@GetMapping("/welcome-by-javabean")
public String greetingAndWelcomeByJavaBean() {
return "course/welcome-by-javabean";
}
}
<jsp:useBean>
操作與 JavaBean 一起使用時會如預期執行。
5. 結論
在本文中,我們看到了在 JSP 中呼叫 Java 類別的兩種方法,從基本的腳本到更結構化的方法,如<jsp:useBean>
。當我們開發更複雜的應用程式時,分離邏輯和視圖非常重要,但擁有這些知識有助於我們處理遺留系統或建立快速原型。
與往常一樣,範例的完整原始程式碼可在 GitHub 上找到。