2013-06-29 15 views
10

Realizuję usługi internetowe dla reszty za pomocą sieci Jersey. Potrzebuję obiektu ServletContext, aby zapisać plik w katalogu aplikacji. Proszę, pomóż mi zdobyć kontekst.Jak uzyskać serwis WWW ServletContext in Rest?

Dzwonię do tego serwisu z urządzenia z Androidem.

Z góry dziękuję.

@Path("notice") 
public class NoticeResources { 

    @Resource 
    private ServletContext context; 


    @POST 
    @Path("uploadphoto") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    @Produces("text/plain") 
    public String uploadNotices(@FormDataParam("file") InputStream uploadedInputStream) { 

     File photoDirectory = new File("\\photo"); 

     // if the directory does not exist, create it 
     if (!photoDirectory.exists()) { 
      boolean result = photoDirectory.mkdir(); 
      if(result){ 
       System.out.println("DIR created"); 
      } 
     } 

     String rootPath = photoDirectory.getAbsolutePath(); 

     String uploadedFileLocation = rootPath + "\\photo.jpg"; 
     // save it 
     try { 
      writeToFile(uploadedInputStream, uploadedFileLocation); 
     } catch(Exception e) { 
      return "no" + rootPath; 
     } 
     return "yes" + rootPath; 
    } 

    // save uploaded file to new location 
    private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws Exception { 
     OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } 
} 

Odpowiedz

28

Zastosowanie @Context, oto Jersey documentation

@Context 
private ServletContext context; 

AKTUALIZACJA - można również wstrzykiwać bezpośrednio do metod razie potrzeby

public String uploadNotices(@Context ServletContext context, ...) 
+0

+1 Wierzę, że można go również wstrzyknąć do metod jako parametry (przynajmniej w RESTEasy jest to możliwe, Jersey powinno być takie samo). – acdcjunior

+0

Masz rację, nie uwzględniłem go, ponieważ nie zostało to wyraźnie zadane w pytaniu OP - ale uwzględnię to. – ikumen

+0

+1. Ładne ... przydatne. –

3

użyć adnotacji @context (wtrysk poziomie metody)

public Response getContext(@Context HttpServletRequest req, @Context HttpServletResponse res)throws Exception 
{ 
    System.out.println("Context Path is:"+req.getRequestURL().toString()); 
    result=req.getRequestURL().toString(); 
    return Response.status(200).entity(result).build(); 
} 
Powiązane problemy