web-dev-qa-db-ja.com

Spring MVC ControllerでgetServletContext()を取得する方法

プロジェクトに画像をアップロードする必要があります。 SpringMVCでアップロードパスを取得する方法。パスは次のとおりです。

/home/cme/project/Eclipse/workspace_12_11/.metadata/.plugins/org.Eclipse.wst.server.core/tmp0/wtpwebapps/fileUploadTester/upload

次のエラー。

The method getServletContext() is undefined for the type HomePageController

このコードを使用すると表示されます。

String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;

私のコードは

public ModelAndView UploadPhoto(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response) throws IOException {
 final String UPLOAD_DIRECTORY = "upload";
 final int THRESHOLD_SIZE = 1024 * 1024 * 3; // 3MB
 final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
 final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB

 String value[] = new String[10];
 int i = 0;

 // checks if the request actually contains upload file
 if (!ServletFileUpload.isMultipartContent(request)) {
  PrintWriter writer = response.getWriter();
  writer.println("Request does not contain upload data");
  writer.flush();
  return; //here is error This method must return a result of type ModelAndView
 }

 DiskFileItemFactory factory = new DiskFileItemFactory();
 factory.setSizeThreshold(THRESHOLD_SIZE);
 factory.setRepository(new File(System.getProperty("Java.io.tmpdir")));

 ServletFileUpload upload = new ServletFileUpload(factory);
 upload.setFileSizeMax(MAX_FILE_SIZE); //here error The method setFileSizeMax(int) is undefined for the type ServletFileUpload
 upload.setSizeMax(MAX_REQUEST_SIZE);
 String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; // here error The method getServletContext() is undefined for the type Homepage Controller
 // creates the directory if it does not exist
 File uploadDir = new File(uploadPath);
 if (!uploadDir.exists()) {
  uploadDir.mkdir();
 }

 try {
  List < FileItem > items = upload.parseRequest(request); // request is HttpServletRequest
  for (FileItem item: items) {
   if (item.isFormField()) { // text fields, etc...
    String fieldName = item.getFieldName();
    System.out.print("fieldname" + fieldName);
    value[i] = item.getString();
    System.out.print("from uploader" + value[i]);
    i++;
   } else {
    //String fileName=new File(item.getName()).getName();   Use this to use default file name
    String name = value[0];
    System.out.println("file uploader name" + name);
    String filePath = uploadPath + File.separator + name;
    System.out.println(filePath);
    File storeFile = new File(filePath);
    try {
     item.write(storeFile);
    } catch (Exception ex) {
    }
   }
  }
  System.out.println("uploaded successfully");
 } catch (Exception ex) {
  System.out.println("error not uploaded");
 }
 return new ModelAndView("ChangePhoto");
}

3つのエラー

  1. このメソッドは、ModelAndView型の結果を返す必要があります
  2. メソッドServletFileUploadのメソッドsetFileSizeMax(int)は未定義です
  3. メソッドgetServletContext()は、Homepage Controllerタイプでは未定義です。
40
Priyanka Shaju
  1. 以下のコードを使用して、SpringMVCのServletContextオブジェクトを自動配線します

    @Autowired
    ServletContext context; 
    

    その後、次のようにコードを実行してください

    String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY;
    
  2. このようにコントローラーで取得できます。

    private ServletContext context;
    
    public void setServletContext(ServletContext servletContext) {
        this.context = servletContext;
    }
    

    ただし、このためにコントローラーはServletContextAwareインターフェイスを実装する必要があります

68
Nirav Prajapati

これを試して:

@Autowired
ServletContext servletContext;
20
Aleksey Bykov

これは単なる別の選択肢です

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())。getRequest()。getServletContext()
12
user3502676

ServletContextオブジェクトに渡したまたは設定したパラメーターは、HttpServletRequestオブジェクトに格納されます。アプリケーションのどこからでも次の方法でアクセスできます。

public void method(HttpServletRequest request){
    String email=request.getServletContext().getInitParameter(“email”);
}
1
Arun Raaj