如何在java类中获取JSP应用程序上下文

时间:2011-01-24 11:24:19

标签: java jsp servlets

我对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传递给我的类?)

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

3 个答案:

答案 0 :(得分:3)

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

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

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

下一步是让JSP显示来自视图bean的数据。强烈建议您使用JSTL,而不是使用代码片段.JSTL标记<c:out>可用于在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;
  }
}

答案 1 :(得分: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");

另见

答案 2 :(得分:0)

没有将上下文传递给类方法,并且没有将它存储在ThreadLocal变量中(我认为这是一个坏主意),我不知道你怎么能这样做。

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