簡體   English   中英

Servlet到Servlet的通訊

[英]Servlet to Servlet Communication

我正在制作Java Web應用程序,但我是Java的新手。

我有一個Servlet(/ locatemodules),它試圖在服務器(/ modules / *)中找到其他servlet,目前該servlet會找到其他servlet的名稱(/ modules / logout,/ modules / invoice等),但是我需要獲取一些屬性並調用發現的servlet的方法,所有servlet中的屬性和方法都相同。

調用方式如下: discoveredServlet.getMenuItem();

getMenuItem返回一些值,menuName,menuUrl,sideMenu [],sideUrl []等,以使Web應用程序具有動態顯示的菜單項,發現的servlet具有在主菜單上調用時獲取的信息。

我找到了Servlet間通信文章,但很不幸地不適用於API 2.2和更高版本。

如何獲得這樣的解決方案?

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Loaded extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res)
                           throws ServletException, IOException {
    res.setContentType("text/plain");
    PrintWriter out = res.getWriter();

    ServletContext context = getServletContext();
    Enumeration names = context.getServletNames();
    while (names.hasMoreElements()) {
      String name = (String)names.nextElement();
      Servlet servlet = context.getServlet(name);
      out.println("Servlet name: " + name);
      out.println("Servlet class: " + servlet.getClass().getName());
      out.println("Servlet info: " + servlet.getServletInfo());
      out.println();
    }
  }
}

作為設計原則,Servlet僅應用於接收來自容器的請求,調用包含業務邏輯的類以及重定向到顯示響應的JSP( MVC模式 )。 所有業務邏輯都應位於與HTTP協議分離的句柄上。

因此,我認為您能做的最好的事情就是從Servlet中刪除這些與菜單相關的方法,將它們放在POJO上 ,然后從Servlet中調用此POJO。

另外,請記住,通常Servlet是Singletons。

Servlet是應該在服務器上接受請求並對其進行響應的類。

在制作HTTPServlet時,它應該通過諸如getpost類的http方法接受一個HTTP請求(因此,您在servlet中獲得了doGet()doPost()方法),然后servlet處理該請求並發送http響應。

如果要在服務器之間進行通信,則應使用setAttribute()方法設置一些屬性,然后redirect (使用response.sendRedirect())或將請求轉發到另一個servlet,並使用getAttribute()方法接收值。

Servlet不是像普通的類那樣使用,而是要使Servlet類成為對象並調用其方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM