如何将servlet与java portlet结合起来处理来自portlet的请求?

时间:2013-04-05 13:25:15

标签: java servlets portlet

有一个数据库服务器和一个安装了portlet的门户网站。 Portlet代表一个视图,分为两部分。在左侧有一个导航树。当用户单击树节点时,他从数据库服务器获取信息,portlet应在视图的右侧显示此信息。

我假设portlet视图页面包含javascript代码,当用户点击树节点时,portlet会向servlet发送请求,获取servlet响应,解析它并更新视图。

Portlet视图布局显示如下:

如果它只是基于servlet的应用程序,那么我将实现从页面到服务器的javascript调用,返回json,在页面上解析它并更新页面表示。

但java portlet有点不同,我找不到如何做到的方法。

我的问题是有一种方法可以将一个带有portlet的servlet打包在一个* .war文件中,并实现从portlet到这个servlet的请求。 Portlet将所有请求发送到此servlet,然后servlet访问数据库服务器,然后将结果发送到portlet。

如果答案是“是” - 我怎么能这样做。因为我试图用portlet打包servlet,但是这样的portlet不起作用。

如果答案是“否” - 在portlet中实现此“数据查询 - >响应 - >更新视图”序列的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

我的非工作servlet + portlet组合的原因是在portlet视图jsp中指定的servlet的错误路径。

现在任务已解决,下面有详细信息。我认为这将有助于遇到同样问题的人。

假设我们有一个servlet GetData,它执行以下操作:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/plain;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("Hello there! Привееееет!");
    } finally {            
        out.close();
    }
}

下面是TestPortlet_view.jsp

的代码
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

  <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  <script>
  function loadData() {
    $.get('<%=request.getContextPath()%>' + '/GetData', function(data) {
        alert(data);
    });    
  }
  </script> 
 <input type="button" value="Hit me" onClick="javascript:loadData();"/>

下面是portlet部署在门户网站上的图片。

当我们点击按钮时:

Voila,它有效:)

特别感谢McDowell提醒。

答案 1 :(得分:0)

很高兴您已经回答了您想要做的事情,但我认为使用portlet API中的serveResource方法执行此操作可能更简单,更简洁。在portlet 2.0规范中添加serveResource方法的主要原因之一是使portlet中的AJAX功能更简单。