2012-06-29 58 views
2

我目前正在製作Java Servlet,可以響應jquery調用併發回數據供我的網頁使用。但這只是使用doGet方法的迴應。Java Servlet和Jquery

有沒有在Servlet中有多種方法的方法,並用JQuery分別調用它們?

即有一個叫做Hello的方法,它返回一個String「Hello」和另一個叫做Bye的方法,它返回一個String「Bye」。有沒有辦法使用jquery或其他一些技術來做這種事情?

我對servlets很新,所以我仍然不確定它們完全有能力。那麼doGet是「進入」的唯一方法,我只是從那裏分支迴應?

+0

查看[Apache Struts](http://struts.apache.org/primer.html)和[MVC模式](http://java.sun.com/blueprints/guidelines/) designing_enterprise_applications_2e/Web層/ WEB-tier5.html)。 –

回答

0

我個人使用反射在我的控制器(servlet的),基本上讓我實現這一目標。

如果我有一個叫做UserController的

的主URL調用servlet會/用戶的servlet。 知道這一點,我總是通過我的第一個參數?action = add

然後在我的servlet中有一個名爲add或actionAdd的方法。無論你喜歡什麼。

然後我使用下面的代碼;

String str = String str = request.getParameter("action").toLowerCase(); 
Method method = getClass().getMethod(str, HttpServletRequest.class, HttpServletResponse.class); 
method.invoke(this, request, response); 

說明:

海峽將有動作參數值,加上在這種情況下。 方法方法將是對具有給定名稱(str)及其預期參數類型的方法的引用。

然後我調用方法,傳遞上下文,請求和響應。

add方法看起來像這樣;

public void add(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
    //do add stuff 

     String url = "/user/index.jsp"; 
     RequestDispatcher dispatcher = context.getRequestDispatcher(url); 
     request.setAttribute("User", user); 
     dispatcher.forward(request, response); 
} 

我不知道只傳回一個字符串。但是這應該爲你提供一個基本的想法。

請注意,反射可能會讓你付出代價,所以它不應該真的影響你很像這樣。由於方法名稱/簽名需要完美匹配,因此很容易出錯。

所以從jQuery的,你會做一個Ajax請求的網址:

localhost/projectname/user/add (if you use urlrewrite) 
or 
localhost/projectname/user?action=add (if you dont) 
0

Servlet容器支持的Servlet以來3.0自定義Http方法。對於實施例,

public void doHello(HttpServletRequest req, HttpServletResponse res) { 
    //implement your custom method 
} 

在Servlet的上述方法可使用hello HTTP方法被調用。

但我不確定jquery是否支持調用自定義HTTP方法。

如果它沒有,那麼你唯一的選擇。

  • 使用GET和操作參數調用Servlet。
  • 讀取操作參數並使用反射調用該方法。