2010-03-01 61 views
18

我有一個java類,它對文件執行一些操作。由於java代碼很大,我不想用jsp編寫這段代碼。我想在需要時在jsp中調用方法。在jsp中調用java方法

請告訴我需要保留這個文件的路徑。還有一些示例代碼如何使用它會有所幫助。

回答

9

我想問的是,您如何讓Java代碼可用於JSP?你可以像其他任何Java代碼一樣使用它,這意味着它需要被編譯到一個.class文件中並放到類路徑中。

在Web應用程序中,這意味着類文件必須存在於應用程序的.war文件或目錄中的WEB-INF/classes下,與通常的目錄結構匹配其包。因此,編譯和部署此代碼以及所有其他應用程序Java代碼,並且它應該位於正確的位置。

請注意,您需要在JSP中導入您的類,或者使用完全限定的類名稱,否則您可以使用< %%>語法來編寫您喜歡的任何Java代碼。

您還可以在其他實用JSP中聲明一個方法,使用<%! %>語法(注意!),導入JSP,然後調用在此塊中聲明的方法。儘管這是不好的風格。

+0

感謝您的回答,我已經完成了,因爲您已經說過導入java類並使用它....再次感謝所有回答... – 2010-03-17 04:32:55

24

在servlet(該JSP之前運行):

Person p = new Person(); // instantiate business object 
p.init(...); // init it or something 
request.setAttribute("person", p); // make it available to the template as 'person' 

在模板你可以使用這個:

your age is: ${person.age} <%-- calls person.getAge() --%> 
+1

儘管JSP文件本身將被即時編譯爲servlet,但您不必在* JSP之前運行單獨的servlet。 – Rob 2010-03-02 22:53:24

+2

是的,這不是強制性的,只是良好的做法 – cherouvim 2010-03-03 03:33:51

4

雖然我不建議你做任何Java調用JSP,你可以這樣做你的JSP中:

<% 
    //Your java code here (like you do in normal java class file. 
%> 

<!-- HTML/JSP tags here --> 

如果你想知道,在<% ... %>部分稱爲scriptlet :-)

1

實際上,jsp不是'對文件執行某些操作'的正確位置。你聽說過MVC模式嗎?

如果你還有興趣從JSP你可以做到這一點,例如調用Java方法:
1. <% MyUtils.performOperation("delete") %>scriptlet
2. <my-utils:perform operation="delete"/>(自定義標籤)

反正我建議你到谷歌關於scriptlets,jsp自定義標籤和MVC模式。
最好的問候,Gedevan

+0

MVC模式需要有時這樣棘手方式也是如此,特別是如果要顯示的數據結構很複雜。 – peterh 2014-12-18 16:51:38

7

根據你想要調用的動作類型,你通常使用taglibs,EL函數或servlets。 Java代碼確實不屬於JSP文件,而是屬於Java類。

如果要預處理請求,請使用Servlet doGet()方法。例如。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Preprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display data. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

如果你想後處理某種形式後提交的請求,使用servlet doPost()方法來代替。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Postprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display results. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

如果要控制頁面流和/或HTML的輸出,使用標籤庫像JSTL core taglib或創建custom tags

如果要執行靜態/輔助函數,請使用EL功能,如JSTL fn taglib或創建custom functions