2016-07-14 11 views
0

Ich habe die Aufgabe erhalten, meinen Dienst in der Service-Schicht eines anderen Entwicklers zu implementieren, aber ich kann den richtigen Weg nicht finden.
Zunächst meine Klasse unabhängig auf einem Tomcat-Server gearbeitet, hier ein Schnäppchen ist:Integrieren Sie eine Klasse, die HttpServlet in einem Projekt erweitert, indem Sie javax.ws.rs Notationen verwenden

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
public class fileServlet extends HttpServlet { 

    @Override 
    public void doGet(@Context HttpServletRequest request,@Context HttpServletResponse response) 
       throws IOException, ServletException { 
     OutputStream output = response.getOutputStream(); 
     String queryString = request.getQueryString(); 
//etcetera.... 

hier ein Schnipsel der von der anderen Person gemacht Klassen:

import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.QueryParam; 
import javax.ws.rs.core.MediaType; 

@Path("/CustomerService") 
public class SolrService { 

@GET 
@Path("/customers") 
@Produces(MediaType.APPLICATION_JSON) 
public List<Map<String,Object>> getCustomers(@QueryParam("mode") String mode,@QueryParam("query") String query,@QueryParam("fields") String fields){ 
    return get(mode,query,fields); 
} 

Ich bin ziemlich neu in das Servlet zu Umwelt und Web-Entwicklung Java, so die Suche nach einem einfachen Weg, dies mir

  • importiert javax.ws.rs zu tun, und die Bezeichnungen in meiner Klasse setzen , Etwa so:

    @Path("/FileManager") 
    public class fileServlet extends HttpServlet { 
    
    @GET 
    @Path("/fileGetter") 
    @Override 
    public void doGet(@Context HttpServletRequest request,@Context HttpServletResponse response) 
    
    
          throws IOException, ServletException { 
        OutputStream output = response.getOutputStream(); 
        String queryString = request.getQueryString(); 
    
  • zusammengestellt und die .class-Datei in dem in der web.info in TomCat angegebenen Ordner setzen, sowie die servlet.jar im lib hinzugefügt. Die web.info

    <servlet> 
        <servlet-name>CustomerServlet</servlet-name> 
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
        <param-name>jersey.config.server.provider.packages</param-name> 
        <param-value>company.rest</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    

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

    aber ich kann meinen Dienst im Anschluss an die Adresse nicht erreichen. Ich lese viele Antworten, aber es funktioniert sowieso nicht. Wie könnte ich es tun?

Antwort

0

Nun, es sieht aus wie ich es gemacht habe. So waren die Tags ein richtiger Schritt voraus:

@Path("/FileManager") 
public class fileServlet extends HttpServlet { 

    @GET 
    @Path("/fileGetter/{fileString}") 
    public void doGet(@Context HttpServletRequest request,@Context HttpServletResponse response,@PathParam("fileString") String fileName) 
       throws IOException, ServletException { 
     OutputStream output = response.getOutputStream(); 
     //Get the fileID.png 
     String fileString = fileName; 

Beachten Sie, dass das Verfahren ist immer noch ein doGet, aber es kann nicht @Override die HttpServlet Methode, da es einen neuen Parameter nimmt. Es funktioniert trotzdem, dank des Tags @GET. meine Klasse in der Belastung der web.xml
Der eigentliche Trick wurde hinzugefügt:

<init-param> 

    <param-name>javax.ws.rs.core.Application</param-name> 

    <param-value>gft.rest.FileServlet</param-value> 

</init-param> 

<load-on-startup>1</load-on-startup> 

Zwischen den <servlet>