【问题标题】:How to get JSP Application Context inside a java class如何在 java 类中获取 JSP 应用程序上下文
【发布时间】:2011-06-14 11:04:42
【问题描述】:

我对JSP不是很熟悉,所以,让我们以这个问题为例:

假设我有一个包含这些语句的 JSP 文件 (index.jsp):

<% 
MyObject mO = new MyObject();
mO.sayHelloWorld();
%>

在 MyObject.java 中:

public class MyObject(){
    public void sayHelloWorld(){
        //something like getJSPApplicationContext.getOut.println("<p>Hello World</p>");
    }
}

有没有一种简单的方法可以达到这个目标(不将 JSPApplicationContext 传递给我的类?)

也许我做错了什么,无论如何,谢谢你的帮助:)

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    让我借此机会向您介绍MVC (Model View Controller)中的V(视图)。

    您通常应该通过将视图 bean 放入控制器上的会话中来将数据放入视图中。您可以将您的类MyObject 视为一个视图bean,因为它包含您要在视图中显示的信息。在这种情况下,控制器是您的 servlet(您确实有一个 servlet,对吗?)并且将在其 doGetdoPost 方法中包含以下内容;

    MyObject myObject = new MyObject("Hello world");
    request.setAttribute("myObject", myObject);
    

    下一步是让您的 JSP 显示来自视图 bean 的数据。强烈建议您为此使用JSTL,而不是放入代码sn-ps。JSTL 标记&lt;c:out&gt; 可用于在JSP 中显示数据。您的 JSP 可能包含以下内容;

    <p>
    <c:out value="${myObject.message}"/>
    </p>
    

    这将调用会话对象“myObject”上的getMessage() 方法并将其输出到页面上。

    为了完整起见,您的 MyObject 视图 bean 可能看起来像这样;

    public class MyObject
    {
      String message;
    
      public MyObject(String message)
      {
        this.message = message;
      }
    
      public String getMessage()
      {
        return message;
      }
    }
    

    【讨论】:

    • 好吧,这不是我需要的;很抱歉偷走了你的时间 :) 我对 MVC 很熟悉,我使用 Yii 框架进行生产;我想在这里做的是在 Java/Jsp 中建立一个(非常小的)框架(以 MVC 架构模式为重点:D)用于学术目的;现在,我解决了这个问题,但我需要更多帮助。有没有办法在 java 类中显示这个类中的 JSP 页面(假设我引用了 response.out 编写器)?
    【解决方案2】:

    这不是它的使用方式。

    出于您所展示的目的。

    您应该包含Servletjsp 或静态HTML 只是为了打印Hello World 喜欢

    <jsp:include page="/staticfile/helloworld.html" />
    

    helloworld.html

    只是

    hello world

    或包含 servlet

    <jsp:include page="/helloworldServlet" />
    

    在 HelloWorld Servlet 中 doGet()

    out.println("hello world");

    另见

    【讨论】:

    • 实际上,我不想创建一个 hello wordwebapp =) 我正在尝试构建一个用于学术目的的小型框架,我需要一些基本信息来设置框架架构。
    • 好的,我只是建议了标准做法:)
    【解决方案3】:

    如果不将上下文传递给类方法,并且不将其存储在 ThreadLocal 变量中(我认为这是一个坏主意),我看不出你怎么能做到这一点。

    如果您的类需要访问 JSP 上下文,这可能意味着该类应该是 JSP 片段或自定义 JSP 标记 (&lt;custom:sayHello/&gt;)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多