2016-01-29 71 views
0

我是一名大學生,目前正在開發模塊的Android應用程序。將它連接到服務器以執行登錄等。該部門給了我們一個服務器來使用並指示我們使用Servlet。我寧願做一個寧靜的方式,看起來這是一個行業標準。這是迄今爲止我所編寫的代碼:集成JAX-RS和Java Servlets

import javax.ws.rs.QueryParam; 

/** 
* 
* @author Tom 
*/ 
public class Login { 

    public boolean doLogin(@QueryParam("email") String email) { 
     return checkCredentials(email); 
    } 

    private boolean checkCredentials(String email){ 
     boolean result = false; 
     if (email != ""){ 
      try { 
       result = DBConnection.checkLogin(email); 
      } catch (Exception e) { 
       result = false; 
      } 
     } else { 
      result = false; 
     } 

     return result; 
    } 

} 

我寫了另一個類,DBConnection,但這似乎工作正常(使用JDBC連接到MySQL數據庫)。

我遇到的問題是,當我運行Web服務器(使用Jettyant是構建工具),並嘗試通過瀏覽器訪問服務器上的網頁,它只是給了我503,​​錯誤。我認爲這是因爲我沒有擴展HttpServlet課程?這裏是他們給了我們一些示例servlet代碼:

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.io.PrintWriter; 
public class Product extends HttpServlet 
{ 
    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException 
    { 
     httpServletResponse.setContentType("text/plain"); 
     PrintWriter out = httpServletResponse.getWriter(); 
     out.println("Hello"); 
     out.close(); 
    } 
} 

他們已經給了我們一個名爲JettyStart.java文件,當您運行這將啓動Web服務器螞蟻:

import org.mortbay.jetty.Server; 
import org.mortbay.jetty.servlet.ServletHttpContext; 

public class JettyStart 
{ 
    public static void main(String[] args) throws Exception 
    { 
     //A server running at http://localhost:8085 is created 
     Server server = new Server(); 
     server.addListener(":8085"); 

     ServletHttpContext context = (ServletHttpContext) server.getContext("/"); 
     context.addServlet("/path/to/Login", "package.name.Login"); 

     server.start(); 
    } 
} 

那麼我將如何去將Servlets集成到我的Restful方法中以與服務器/數據庫進行通信?或者我做錯了什麼?

回答

0

我不確定這是否是答案,但您可能會有更好的運氣,使您的項目基於Maven和使用jetty-maven-plugin。我有,親自。如果你有一個可以產生一個簡單的Maven原型的IDE,那麼設置起來很容易。您只需將該插件放入您的pom中,然後運行mvn jetty:從命令行運行。接線了JAX-RS Web服務是不是太複雜,你只要給他們正確的註釋,像這樣:

package com.my.project.services; 

// imports here 

@Path("/login") 
public class Login extends HttpServlet { 

    @GET 
    @Produces({"text/html", MediaType.TEXT_HTML}) 
    public String getLoginInfo(@QueryParam("email") String email) { 
     // ... 
    } 
} 

這應該足以讓他們在碼頭servlet容器,只要拿起作爲web.xml設置正確。如果你使用maven webapp原型,這可能會爲你完成,否則你將不得不徘徊一下,但是如果這有助於我的web.xml在我的一個項目中看起來像(相關部分):

<web-app> 

    <servlet> 
     <servlet-name>rest</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
      <init-param> 
       <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
       <param-value>true</param-value> 
      </init-param> 
      <init-param> 
       <param-name>com.sun.jersey.config.property.packages</param-name> 
       <param-value>com.my.project.services</param-value> 
      </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>rest</servlet-name> 
     <url-pattern>/myproject/rest/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

這裏的映射是說拿servlet的名字「休息」,並將其映射到我的所有JAX-RS服務生活包com.my.project.services,與附加到了@Path值結束(所以上面的登錄服務將位於/ myproject/rest/login)。您可以以任何您想要的方式設置映射路徑。

編輯:應該提我的項目也在使用澤西島。這裏有一個很好的指導建立這樣的項目:http://crunchify.com/how-to-build-restful-service-with-java-using-jax-rs-and-jersey/

+0

嗨,感謝您的答案。這聽起來比使用ant好,但不幸的是服務器與其他學生共享,所以如果我改變了構建過程,這意味着其他學生將無法使用它。儘管如此,我會進一步研究它,可能會有解決方法或其他方法。 –