簡體   English   中英

默認servlet-正常工作嗎?

[英]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模式:

  1. 容器將嘗試查找請求路徑與Servlet路徑的精確匹配。 成功匹配將選擇servlet。
  2. 容器將遞歸地嘗試匹配最長的路徑前綴。 這是通過使用/字符作為路徑分隔符,一次將路徑樹下移到一個目錄來完成的。 最長的匹配確定所選的servlet。
  3. 如果URL路徑中的最后一段包含擴展名(例如.jsp ),則servlet容器將嘗試匹配處理該擴展名請求的servlet。 擴展定義為last段之后的last段的一部分. 字符。
  4. 如果前三個規則均未導致servlet匹配,則容器將嘗試提供適合於所請求資源的內容。 如果為應用程序定義了“默認” servlet,則將使用它。 許多容器提供了隱式默認servlet來提供內容。

容器必須使用區分大小寫的字符串比較進行匹配。

因此,相同的URL每次都應匹配相同的模式集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM