2016-12-15 101 views
0

現在,我不想在我的web.xml中添加一個帶有註冊的Servlet,但使用註釋,並在我的項目中使用它而不重新啓動。我可以在不重新啓動我的項目的情況下添加servlet

+0

請說明你的問題 –

+0

我認爲這是一個很好的問題,很清楚。 Op想要將一個新的servlet添加到正在運行的Web應用程序中。 –

+0

不清楚的是「重啓」的含義。沒有重新啓動服務器,或沒有重新啓動(/重新部署)的Web應用程序? – Gimby

回答

0

您可以使用註釋@WebServlet有你的servlet class.Something如下

@WebServlet(urlPatterns = "/HelloWorldServlet", loadOnStartup = 1)  
    public class HelloWorldServlet extends HttpServlet { 
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ 
     //your stuff 
    } 
    } 

瞭解更多詳情請查看到This

0

的Tomcat允許重裝類:https://www.mulesoft.com/tcat/tomcat-reload 你可以用它來檢測到更改時重新加載應用程序。重新加載意味着應用程序繼續運行,但servlet上下文和所有servlet都會重新加載,包括任何新的。我認爲這將是最簡單的解決方案,但可能並不是您想要的,因爲所有其他servlet也都會重新加載。

正如你可以用一個 'front controller' 的servlet這將請求轉發給POJO控制器做一些事情(有點難看)的替代:

@WebServlet(value="/myapp") 
public class FrontControllerServlet extends HttpServlet { 

    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    String pageClass = request.getParameter("pageClass"); 
    String pageClassFullyQualified = "com.myapp." + pageClass; 
    Class<?> pageClass = Class.forName(pageClassFullyQualified); 
    Constructor<?> constructor = pageClass.getConstructor(); 
    Object object = constructor.newInstance(); 
    Page page = (Page) object; 
    page.handle(request, response); 
} 

頁界面:

public interface Page { 
    public void handle(HttpServletRequest request, HttpServletResponse response); 
} 

一個示範頁面類:

package com.myapp; 

public class MyPage implements Page { 
    public void handle(HttpServletRequest request, HttpServletResponse response) { 
     // handle the request 
    } 
} 

您使用頁面類調用應用程序名稱(不含包裝):

http://localhost:8080/myapp?page=MyPage 

而前端控制器應該實例化類並將請求/響應傳遞給它。如果Tomcat檢測到一個新的頁面並自動加載它,這應該允許熱部署一個頁面。

當然這只是一個概念證明。要求類名稱作爲請求參數是非常糟糕的做法,因爲您正在將內部信息公開給客戶端。

相關問題