java servlet是否使用另一个java servlet的功能?

java servlet是否使用另一个java servlet的功能?,java,servlets,Java,Servlets,java servlet是否可以调用另一个java servlet中的函数?如果可能的话,你能给我举一个简单的例子说明怎么做吗 提前感谢您有几种选择 使它静态的一种方式(我不喜欢) 创建一个类,提供所需的参数,并在每个servlet中创建实例。有点粗俗: RequestDispatcher dispatcher = request.getRequestDispatcher("/someServletOfYours"); dispatcher.forward(request, response);

java servlet是否可以调用另一个java servlet中的函数?如果可能的话,你能给我举一个简单的例子说明怎么做吗

提前感谢您

有几种选择

使它静态的一种方式(我不喜欢)

创建一个类,提供所需的参数,并在每个servlet中创建实例。

有点粗俗:

RequestDispatcher dispatcher = request.getRequestDispatcher("/someServletOfYours");
dispatcher.forward(request, response);

现在,在“someServletOfYours”类的doPost中实现您的方法。如果需要传递参数,请调用ServletRequest的
setAttribute
方法,并在下一个servlet中从请求中获取参数。从“someServletOfYourrs”可以重定向回原始servlet。它将通过http模拟方法调用。

不建议直接从另一个servlet调用servlet,因为servlet实例由servlet容器管理,这被认为是不好的做法。你应该遵循这个原则

servlet只负责与客户端的接口,不应包含业务逻辑。将您的业务逻辑放在一个单独的层中(例如,另一个包中的类),并仅从servlet调用它。因此,业务类负责实际的内部数据和转换,而servlet负责外部的不同视图。

Servlet1

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet1
 */
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        Servlet2 s = new Servlet2();
        s.CreateUser();

        response.getWriter().append("Served at: ").append(request.getContextPath());
    }
}
Servlet2

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet1
 */
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }


    public void CreateUser() throws FileNotFoundException{

        System.out.println("Create Users...");

    }
}
输出:


一个servlet只是另一个
-与其他任何类一样,逻辑也适用。调用另一个servlet的函数是什么意思?@Boristeider No.要访问它,OP必须创建一个他不能(不应该)的servlet实例。例如,我有两个servlet,分别是ServletA和ServletB。ServletB包含ServletA需要调用的CreateUser函数调用。有没有办法做到这一点?createUser()看起来应该是服务层的一部分,而不是控制器。我也这么认为,但他可能有一个很好的理由从另一个servlet调用servlet。João Rebelo:是的,在极少数情况下,您无法访问自己应用程序中的源代码。大多数情况下,这只是代码的味道,应该进行重构。事实上,如果你考虑直接调用另一个servlet,这是一个非常好的重构时间,使代码稍微好一点。我完全同意你的回答。我只是评论说,尽管如此,你可能想做这件事,因为你可以!正如一些人所说,有时您需要艰苦地学习:)不,您永远不应该手动创建servlet的实例。您甚至不调用
init()
——在这里,serlvet将创建依赖项的实例。@Boris Spider我同意您说的是对的,但问题并不要求这些。此外,在编写servlet类以显示答案时,我已经删除了所有内容。因为我看到了对问题(第四点)的评论,并给出了示例。万杰解释得很好@Boris我只是给出了用户真正需要的东西。我不想通过考虑每个方面来浪费时间。任何人都不应该在
扩展HttpServlet
的调用中调用
new
。曾经