2015-09-07 23 views
-1

我開發了一個Web應用程序(WebApplication 1),它有1個servlet和許多JSP,並且這個應用程序有一定的功能(可以說No1)。
在該應用程序中,在servlet的processRequest(HttpServletRequest request, HttpServletResponse response)方法中,有很多if else語句來檢測用戶想要執行的操作。我建立了我的servlet嗎?

的Servlet

public class MyServlet extends HttpServlet { 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException{ 

     init();   
     HttpSession session = request.getSession(true); 
     String jspAction = request.getParameter("action"); 

     if(jspAction.equals("home")){ 

      //do sth 

      RequestDispatcher disp = getServletContext().getRequestDispatcher("/home.jsp"); 
      disp.forward(request, response); 

     }else if(jspAction.equals("out")){ 

      //do sth 

      RequestDispatcher disp = getServletContext().getRequestDispatcher("/out.jsp"); 
      disp.forward(request, response); 

     }//etc.. 

    } 
} 

在JSP中的鏈接或一個表單提交有這個鏈接格式MyServlet?action=out。按照這種方法,我現在有25條if語句。

所以我的問題是:這是建立我的應用程序的正確方法,還是應該爲每個我想要做的功能創建不同的servlet?

回答

2

雖然這是一個有效的(也是非常基本的)解決方案,但最好使用一個MVC框架來完成,而不是重新發明輪子。作爲應用程序接入點的中央小服務程序是常見的做法,例如可在Java EE design patterns之前找到,如「前端控制器」「調度程序視圖」。例如,你應該看看Spring MVC或者Struts 2。

1

您可以使用java.util.HashMap<String, String>來配置導航規則。 Map鍵是動作參數值,Map值是jsp頁面。

這種方式,你可以做以下

HashMap<String, String> navigationMap = new HashMap<String, String>(); 
navigationMap.put("home", "/home.jsp"); 
navigationMap.put("out", "/out.jsp"); 
... 
String jspAction = request.getParameter("action"); 
String page = navigationMap.get(jspAction); 
RequestDispatcher disp = getServletContext().getRequestDispatcher(page); 
... 

這將有大的if-else,但是如果你想要做的每一個navigationRule一些動作,你將不得不解決您的問題,使用更復雜的地圖映射處理請求和返回頁面的操作對象。

這是什麼MVC框架像Structs或JSF那樣,爲什麼不嘗試一個MVC框架?