【问题标题】:deploy servlet on simple java server在简单的 java 服务器上部署 servlet
【发布时间】:2023-10-17 22:35:01
【问题描述】:

我一直在玩 java 服务器和 servlet。然而,一个问题仍然存在。 假设我写了一个这样的服务器:

class server {
  public static void main(String[] args){
    int port = 8080;
    try{      
      ServerSocket ss = new ServerSocket(port);
      Socket s = ss.accept();
    }catch(Exception e){
      System.out.println("Something went wrong");
    }
  }
}

这将在端口 8080 上侦听 httprequest。 现在假设我有一个如下所示的 servlet:

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {

    res.setContentType("text/html");
    PrintWriter out = res.getWriter();

    out.println("<HTML>");
    out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
    out.println("<BODY>");
    out.println("<BIG>Hello World</BIG>");
    out.println("</BODY></HTML>");
  }
}

我可以轻松地使用已经存在的服务器,例如 tomcat 或 glassfish 来部署这个 servlet。但是可以从上面的简单服务器部署它吗?

【问题讨论】:

标签: java servlets


【解决方案1】:

不,您需要一个 Servlet 实现,或者如果您想重新发明*,请创建您自己的。例如Catalina 是Tomcat servlet 实现。

【讨论】:

    【解决方案2】:

    没有。您需要处理 servlet 代码并返回 html 的 java 实现。基本上 glassfish 或 tomcat 是一个服务器,它监听您的请求,在后端运行 java 代码并返回结果。从表面上看,tomcat 和 glassfish 使用基本服务器来捕获请求。但是还有很多事情要做。

    在您的简单服务器中,没有任何东西可以处理用 servlet 编写的 java 代码。

    您的服务器将返回 serverlet 的文本,而不是运行它。

    【讨论】:

      【解决方案3】:
      1. 不容易。
      2. servlet需要一个java容器实现,比如tomcat或者glassfish。如果你觉得tomcat或者glassfish太重,可以试试jetty。

        public class HelloHandler extends AbstractHandler
        {
            public void handle(String target,Request baseRequest,
                    HttpServletRequest request,HttpServletResponse response) 
                    throws IOException, ServletException
            {
                response.setContentType("text/html;charset=utf-8");
                response.setStatus(HttpServletResponse.SC_OK);
                baseRequest.setHandled(true);
                response.getWriter().println("<h1>Hello World</h1>");
            }
        }
        
        public static void main(String[] args) throws Exception
        {
            Server server = new Server(8080);
            server.setHandler(new HelloHandler());
        
            server.start();
            server.join();
        }
        
      3. 你也可以用netty写一个简单的Servlet实现。

      【讨论】: