本系列教程已经上传至github,感兴趣的朋友们可以star一下,附上传送门: https://github.com/xinxing0913/jetty-embed-demo。
有时候我们出于各种需要,可能需要监听多个端口,那么这个时候该怎么实现呢?这里我们只需要创建两个连接器就可以了,也就是两个Connector,因为我们这里要设置监听的端口,因此我们这里可以使用ServerConnector。而且我们要记得把连接器添加给Server类的实例。
我们这里还是来看一个具体的例子吧,我们编写代码内容如下:
package com.mengzhidu.jetty.demo.x003;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
/**
* 在这个范例中,我们同时监听两个端口
* 分别为8080 和 9090
* 这里我们只需要创建两个连接器即可
*/
public class App {
public static void main(String[] args) throws Exception {
Server server = new Server();
ServerConnector connector1 = new ServerConnector(server);
connector1.setPort(8080);
ServerConnector connector2 = new ServerConnector(server);
connector2.setPort(9090);
// 给服务器添加监听器
server.setConnectors(new Connector[] { connector1, connector2});
server.setHandler(new OutputHandler());
server.start();
server.join();
}
}
然后我们编写我们的OutputHandler,它的作用很简单,就是输出一段简单的文本信息,我们代码内容如下所示:
package com.mengzhidu.jetty.demo.x003;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 负责输出的Handler
*/
public class OutputHandler extends AbstractHandler {
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 设置字符集
response.setContentType("text/html;charset=utf-8");
// 输出文本信息
response.getWriter().println("hello jetty! 我是辛星 (*^__^*)");
// 这里要标记为已处理
baseRequest.setHandled(true);
}
}
这样我们就已经监听两个端口了,而且这两个端口运行的代码也是完全一样的,我们启动程序,然后我们来看一下执行效果吧:
同时监听两个端口
当然同时监听更多的端口的代码也是类似的,这里就不赘述了。一般来说,我们监听多个端口在很多时候还是需要的,特别是在隔离内网和外网的场景下。