[英]default servlet - does this work properly?
我在Java中設置了一些servlet。 它們由路徑名標識。 但是,如果不存在所請求的請求,我想將其稱為“默認servlet”。 我試圖以這種方式解決它(請參閱我的代碼)。 我已經成功測試了它,但是我不確定它是否會變得不穩定(例如,“ servlet one”轉發到由某些線程管理或操作系統引起的默認servlet ...)
Server server = new Server(8080);
WebAppContext context = new WebAppContext();
context.setContextPath("/");
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(context);
RequestLogHandler requestLogHandler = new RequestLogHandler();
handlers.addHandler(requestLogHandler);
server.setHandler(handlers);
context.setResourceBase("WebContent");
context.addServlet(new ServletHolder(new MyFirstServlet()), "/servlet one/*");
context.addServlet(new ServletHolder(new MySecondServlet()), "/servlet two/*");
context.addServlet(new ServletHolder(new DefaultServlet()), "/*");
context.setInitParameter("dirAllowed", "true");
server.start();
我將Java與Jetty庫一起使用。
謝謝你的幫助。
Servlet(3.0)規范要求容器一致地匹配URL模式:
- 容器將嘗試查找請求路徑與Servlet路徑的精確匹配。 成功匹配將選擇servlet。
- 容器將遞歸地嘗試匹配最長的路徑前綴。 這是通過使用
/
字符作為路徑分隔符,一次將路徑樹下移到一個目錄來完成的。 最長的匹配確定所選的servlet。- 如果URL路徑中的最后一段包含擴展名(例如
.jsp
),則servlet容器將嘗試匹配處理該擴展名請求的servlet。 擴展定義為last段之后的last段的一部分.
字符。- 如果前三個規則均未導致servlet匹配,則容器將嘗試提供適合於所請求資源的內容。 如果為應用程序定義了“默認” servlet,則將使用它。 許多容器提供了隱式默認servlet來提供內容。
容器必須使用區分大小寫的字符串比較進行匹配。
因此,相同的URL每次都應匹配相同的模式集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.