2012-04-18 38 views
5

Cách lấy đường dẫn tuyệt đối của vị trí máy chủ trong máy của tôi?Java - Nhận đường dẫn tuyệt đối của máy chủ

Giả sử tôi đang sử dụng máy chủ glassfish sau đó tôi cần phải nhận được đường dẫn tuyệt đối của vị trí docroot glassfish như sau:

C:\glassfish3\glassfish\domains\domain1\docroot 

Vào lúc chạy, tôi cần phải tạo tập tin vào vị trí rằng việc sử dụng java io gói như:

C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt 
+5

Nhìn vào [ 'ServletContext'] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html) cho các phương pháp như' getRealPath (đường dẫn) '& 'getContextPath() '. –

+0

request.getRealPath ("") hoặc request.getServletContext(). GetRealPath ("") cho tôi C: \ Users \ Administrator \ Documents \ NetBeansProjects \ ServletExamples \ build \ web –

+1

@ user966709 ur nhận được đường dẫn đó có lẽ vì từ NetBeans u đã cấu hình triển khai nóng .. nhưng nếu u thực sự tạo ra một tập tin .war và triển khai nó, bạn có lẽ sẽ nhận được đường dẫn đến docroot –

Trả lời

-1

cho rằng bạn không cần phải đi cho con đường hoàn thành vì

khi bạn đang tạo tập tin hơn theo mặc định nó sẽ tạo ra tại ROOT o f you server

C:\glassfish3\glassfish\ tại đây.

hy vọng điều này sẽ giúp bạn.

+0

Hiện tại tôi đang sử dụng đường dẫn mã hóa cứng C: \ glassfish3 \ glassfish \ domains \ domain1 \ docroot để ghi tập tin trên vị trí đó, nhưng cần phải tự động vì nếu một số người khác sẽ sử dụng ứng dụng thì có thể máy chủ cá thủy tinh của anh ta tồn tại trong thư mục d: \ và trong trường hợp này, anh ta cần phải thay đổi đường dẫn theo cách thủ công. –

+0

Viết mã bằng java Tệp tin = tệp mới ("/ domains/domain1/docroot/myfile.txt"); điều này sẽ tạo tệp tại C: \ glassfish3 \ glassfish \ domains \ domain1 \ docroot \ myfile.txt ngay cả kính trong c: \ hoặc d: \ không quan trọng. –

0

Tôi đã có một vấn đề tương tự và kết thúc với việc sử dụng

path = getClass().getProtectionDomain().getCodeSource().getLocation() 

bởi vì tôi cần những con đường trên một hàm tĩnh. Điều này trỏ đến đâu đó trong thư mục WEB-INF/classes. Với điều này, bạn có thể trỏ đến một cái gì đó như path.subString(0,path.indexOf("WEB-INF")).

Một vấn đề mà tôi có với điều này: Khi chạy thử nghiệm từ Eclipse, nó chỉ cho tôi vào thư mục "xây dựng" của dự án.

0

Đây là một ý tưởng rất tồi. Nếu bạn đang chạy trong tệp WAR hoặc EAR, docroot sẽ không nằm trên hệ thống tệp có thể ghi. Giả sử đây là trường hợp có thể dẫn đến đau đầu sau đó.

Sử dụng một phương pháp khác, chẳng hạn như tham số khởi tạo servlet, để chỉ định vị trí hệ thống tệp có thể ghi.

3

Nếu bạn sử dụng GlassFish để bắt đầu GlassFish, tức là sử dụng asadmin start-domain|start-instance sau đó chúng tôi cung cấp đảm bảo chắc chắn sau:

Các thư mục làm việc hiện tại của JVM là hoàn toàn, tích cực đảm bảo được thư mục config của tên miền hay máy chủ. Trong trường hợp mặc định sẽ là:

c:/glassfish3/glassfish/domains/domain1/config 

Nếu bạn muốn viết một cái gì đó để (mặc định) docroot, bạn có thể làm điều này:

File f = new File("../docroot/yourfile"); 

Một tùy chọn khác là bảo đảm để luôn làm việc trong mọi hoàn cảnh ngay cả khi bạn khởi động máy chủ với java trực tiếp (ví dụ java -jar glassfish.jar) là sử dụng các giá trị của hệ thống tài sản như sau:

File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile"); 
0

Tôi không biết nếu điều này là cách tốt nhất, nhưng nó làm việc cho tôi :)

String path = new File("").getAbsolutePath() + File.separator + "docroot"; 
+1

Điều này nhận được đường dẫn của nơi bạn bắt đầu máy chủ ứng dụng, thường là nơi đặt startup.sh/startup.bat. Tập lệnh này có thể không nhất thiết phải nằm trong thư mục máy chủ. – Hoffmann

0

bạn có thể thử như sau:

System.getProperty("catalina.base"); 

Và bạn có thể tìm thấy các tài sản khác bằng cách xem sau biến trong chế độ gỡ lỗi.

Properties properties = System.getProperties(); 
+0

cụ thể cho máy chủ web cụ thể –

+0

nhưng như tôi có thể thấy, người hỏi câu hỏi sử dụng glassfish. vì vậy nó sẽ hữu ích cho anh ta/cô ấy. –

+0

Tôi đã cố gắng để làm điều này nhưng thật đáng buồn tôi đã không tìm thấy bất kỳ đường dẫn tuyệt đối để tiết lộ gốc của máy chủ của tôi. Bạn có biết cách xác định nó không? (Tôi đã sử dụng mã thứ hai và được in ra bằng cách đăng nhập). –

Các vấn đề liên quan