【发布时间】:2011-01-22 04:41:42
【问题描述】:
我有一个对文件执行一些操作的 java 类。由于java代码很大,我不想在jsp中编写这段代码。我想在需要时调用jsp中的方法。
请告诉我需要保存此文件的路径。还有一些示例代码如何使用它会有所帮助。
【问题讨论】:
我有一个对文件执行一些操作的 java 类。由于java代码很大,我不想在jsp中编写这段代码。我想在需要时调用jsp中的方法。
请告诉我需要保存此文件的路径。还有一些示例代码如何使用它会有所帮助。
【问题讨论】:
在 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() --%>
【讨论】:
我认为问题是,如何使 Java 代码可用于 JSP?你可以让它像任何其他 Java 代码一样可用,这意味着它需要被编译成一个 .class 文件并放在类路径中。
在 web 应用程序中,这意味着类文件必须存在于应用程序的 .war 文件或目录中的 WEB-INF/classes 下,在与其包匹配的通常目录结构中。因此,编译并部署此代码以及所有其他应用程序 Java 代码,它应该在正确的位置。
请注意,您需要在 JSP 中导入您的类,或使用完全限定的类名,否则您可以使用 语法编写任何您喜欢的 Java 代码。
您还可以在其他一些实用程序 JSP 中声明一个方法,使用 语法(注意!),导入 JSP,然后调用在这样的块中声明的方法。不过这种风格很糟糕。
【讨论】:
根据您要调用的操作类型,您通常会使用 taglib、EL 函数或 servlet。 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。
如果您想执行静态/辅助函数,请使用JSTL fn taglib 等EL 函数或创建custom functions。
【讨论】:
虽然我不建议您在 JSP 中执行任何 java 调用,但您可以在您的 JSP 中执行此操作:
<%
//Your java code here (like you do in normal java class file.
%>
<!-- HTML/JSP tags here -->
如果您想知道,<% ... %> 部分称为 scriptlet :-)
【讨论】: