2010-03-01 62 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