أقصر رمز لبدء خادم رصيف مضمّن
-
06-07-2019 - |
سؤال
أنا أكتب بعض رمز المثال حيث يتم تشغيل خادم رصيف مضمن. يجب أن يقوم الخادم بتحميل Servlet بالضبط ، وإرسال جميع الطلبات إلى Servlet والاستماع إلى LocalHost: 80
رمز بلدي حتى الآن:
static void startJetty() {
try {
Server server = new Server();
Connector con = new SelectChannelConnector();
con.setPort(80);
server.addConnector(con);
Context context = new Context(server, "/", Context.SESSIONS);
ServletHolder holder = new ServletHolder(new MyApp());
context.addServlet(holder, "/*");
server.start();
} catch (Exception ex) {
System.err.println(ex);
}
}
هل يمكنني فعل الشيء نفسه مع كود/خطوط أقل؟ (jetty 6.1.0 المستخدمة).
المحلول
static void startJetty() {
try {
Server server = new Server();
Connector con = new SelectChannelConnector();
con.setPort(80);
server.addConnector(con);
Context context = new Context(server, "/", Context.SESSIONS);
context.addServlet(new ServletHolder(new MyApp()), "/*");
server.start();
} catch (Exception ex) {
System.err.println(ex);
}
}
تمت إزالة المسافة البيضاء غير الضرورية ونقلها خلق ServleTholder مضمّنة. تمت إزالة 5 خطوط.
نصائح أخرى
يمكنك تكوين الرصيف بشكل إعلاني في Application ApplicationContext.xml ، على سبيل المثال:
http://ropindersingh.com/2008/12/10/spring-and-jetty-integration/
ثم ببساطة استرداد حبة الخادم من ApplicationContext.xml وبدء الاتصال ... أعتقد أن هذا يجعله سطرًا واحدًا من التعليمات البرمجية ... :)
((Server)appContext.getBean("jettyServer")).start();
إنه مفيد لاختبارات التكامل التي تنطوي على رصيف.
لقد كتبت مكتبة ، easyjetty, ، هذا يجعل من الأسهل بكثير تضمين الرصيف. إنها مجرد طبقة رقيقة فوق واجهة برمجة تطبيقات الرصيف ، خفيفة الوزن حقًا.
مثالك سيبدو هكذا:
import com.athaydes.easyjetty.EasyJetty;
public class Sample {
public static void main(String[] args) {
new EasyJetty().port(80).servlet("/*", MyApp.class).start();
}
}
يعمل مع رصيف 8:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
WebAppContext handler = new WebAppContext();
handler.setResourceBase("/");
handler.setContextPath("/");
handler.addServlet(new ServletHolder(new MyApp()), "/*");
server.setHandler(handler);
server.start();
}
}
Server server = new Server(8080);
Context root = new Context(server, "/");
root.setResourceBase("./pom.xml");
root.setHandler(new ResourceHandler());
server.start();