2012-12-14 23 views
7

Tôi đang sử dụng phiên bản 2.4 của Servlet và tôi cần phải nhận được ContextPath qua init() phương pháp được gọi là ngày bắt đầu máy chủ, vì vậy tôi không có bất kỳ Yêu cầu đối tượng có thể gọi getContextPath() và vì phiên bản Servlet tôi không có phương thức getContextPath() trong số ServletContext.Làm thế nào để có được ContextPath trong init() của phiên bản 2.4 Servlet

Có cách nào để có được điều này ContextPath() bằng cách nào đó không?

+0

[ServletContext.getServletContextName()] (http://docs.oracle.com/javaee/1.4/api/javax/servlet/ServletContext.html#getServletContextName()) - ServletConfig.getServletContext(). GetServletContextName() –

+0

trường hợp này là null trong trường hợp của tôi:/ – Lama

Trả lời

-1

Hãy thử mã này:

class demo extends HttpServlet { 
     public void init(ServletConfig config) { 
      String path = config.getServletContext().getRealPath("/"); 
     } 
} 

Nó sẽ làm việc

+1

Điều đó sẽ cung cấp đường dẫn hệ thống tệp thực tới thư mục webapp (ví dụ: '/ var/tomcat/webapps/foo'), chứ không phải đường dẫn ngữ cảnh mà tại đó ứng dụng được triển khai ('/foo') . Như krampstudio nói, Servlet 2.5 đã thêm 'getContextPath()' vào 'ServletContext', trả về đường dẫn ngữ cảnh" chính "cho ứng dụng, nhưng trong 2.4 hoặc trước đó bạn chỉ có thể lấy đường dẫn cho một yêu cầu cụ thể. –

1

Bạn đang ngay trong Servlet 2.4 đối tượng ServeltContext không có phương thức getContextPath.

Tôi có thể đề nghị hai lựa chọn:

  1. Đặt đường dẫn bối cảnh như tham số của servlet:

    <servlet>

    <servlet-name>initServlet</servlet-name> 
    
    <servlet-class>net.cirrus-it.InitServlet`</servlet-class> 
    
    <init-param> 
         <param-name>contextPath</param-name> 
         <param-value>/myApp</param-value> 
    </init-param> 
    

    </servlet>

  2. Cố gắng xác định đường dẫn ngữ cảnh từ t anh phương pháp getRealPath()

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

Theo tài liệu:

Trả về một chuỗi chứa con đường thực sự cho một con đường ảo nhất định. Ví dụ: đường dẫn "/index.html" trả về đường dẫn tệp tuyệt đối trên hệ thống tệp của máy chủ sẽ được phân phát theo yêu cầu cho "http: //host/contextPath/index.html", trong đó contextPathđường dẫn ngữ cảnh của ServletContext này.

2

Một ứng dụng web có thể được công bố tại đường dẫn bối cảnh khác nhau, vì vậy các đường dẫn ngữ cảnh (số ít) chỉ có ý nghĩa trong bối cảnh của một yêu cầu cụ thể. Servlet 2.5 đã thêm getContextPath() vào ServletContext, được chỉ định để trả lại đường dẫn ngữ cảnh "chính" cho ứng dụng web này, nhưng không có cách nào độc lập với vùng chứa để truy cập thông tin này trong các phiên bản thông số trước đó.

Có thể có các thủ thuật hoạt động đối với một số vùng chứa nhất định, ví dụ trên phương thức Tomcat theo phương pháp ServletContext.getResource() trả về URL có lược đồ tùy chỉnh, theo mẫu jndi://hostname/context/....Vì vậy bạn có thể sử dụng

ctx.getResource("/").getPath() 

để có được những đường dẫn ngữ cảnh trên Tomcat (hoặc có thể getResource("/WEB-INF/web.xml") và cắt bỏ đuôi, như getResource() được quy định để trở null nếu bạn hỏi nó cho một tập tin không tồn tại) . Bạn sẽ phải thử nghiệm với các vùng chứa khác nhau để tìm các thủ thuật tương tự hoạt động trên các vùng chứa đó.

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