【问题标题】:Calling a java method in jsp在jsp中调用java方法
【发布时间】:2011-01-22 04:41:42
【问题描述】:

我有一个对文件执行一些操作的 java 类。由于java代码很大,我不想在jsp中编写这段代码。我想在需要时调用jsp中的方法。

请告诉我需要保存此文件的路径。还有一些示例代码如何使用它会有所帮助。

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    在 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() --%>
    

    【讨论】:

    • 您没有必须在 JSP 之前运行单独的 servlet,尽管 JSP 文件本身会即时编译为 servlet。
    【解决方案2】:

    我认为问题是,如何使 Java 代码可用于 JSP?你可以让它像任何其他 Java 代码一样可用,这意味着它需要被编译成一个 .class 文件并放在类路径中。

    在 web 应用程序中,这意味着类文件必须存在于应用程序的 .war 文件或目录中的 WEB-INF/classes 下,在与其包匹配的通常目录结构中。因此,编译并部署此代码以及所有其他应用程序 Java 代码,它应该在正确的位置。

    请注意,您需要在 JSP 中导入您的类,或使用完全限定的类名,否则您可以使用 语法编写任何您喜欢的 Java 代码。

    您还可以在其他一些实用程序 JSP 中声明一个方法,使用 语法(注意!),导入 JSP,然后调用在这样的块中声明的方法。不过这种风格很糟糕。

    【讨论】:

    • 感谢您的回答,我已经按照您所说的完成了导入 java 类并使用它......再次感谢所有回答的人......
    【解决方案3】:

    根据您要调用的操作类型,您通常会使用 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

    【讨论】:

      【解决方案4】:

      虽然我不建议您在 JSP 中执行任何 java 调用,但您可以在您的 JSP 中执行此操作:

      <%
         //Your java code here (like you do in normal java class file.
      %>
      
      <!-- HTML/JSP tags here -->
      

      如果您想知道,&lt;% ... %&gt; 部分称为 scriptlet :-)

      【讨论】:

        【解决方案5】:

        实际上,jsp 不是“对文件执行某些操作”的正确位置。你听说过MVC 模式吗?

        如果你仍然对从 jsp 调用 java 方法感兴趣,你可以这样做,例如:
        1.&lt;% MyUtils.performOperation("delete") %&gt; (scriptlet)
        2.&lt;my-utils:perform operation="delete"/&gt;(自定义标签)

        无论如何,我建议您使用 google 了解 scriptlet、jsp 自定义标签和 MVC 模式。
        最好的问候,格德万

        【讨论】:

        • MVC 模式有时也需要这种棘手的方法,尤其是在要显示的数据结构很复杂的情况下。
        猜你喜欢
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多