🧠 If you want to get the real file system path (actual location) of a servlet or a resource on the server, you don’t get it directly from the servlet class itself.
Instead, you use the ServletContext object, which represents the web application running on the server.
✅ You can use:
ServletContext context = getServletContext();
String realPath = context.getRealPath("/");
"/" means the root of your web application.
It will give you something like:
/opt/tomcat/webapps/YourApp/
or on Windows:
C:\Program Files\Tomcat 9.0\webapps\YourApp\
🎯 If you want a specific folder or file inside your app:
Example:
String realPath = context.getRealPath("/WEB-INF/config.properties");
This gives you the absolute server path to config.properties inside WEB-INF.
🚀 Full Example inside a Servlet:
public class LocationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = getServletContext();
String rootPath = context.getRealPath("/");
String configPath = context.getRealPath("/WEB-INF/config.properties");
response.setContentType("text/plain");
response.getWriter().println("Web app root path: " + rootPath);
response.getWriter().println("Config file path: " + configPath);
}
}
When you open the servlet, you’ll see actual file paths printed!
⚡ Some Important Notes:
- If you run your servlet in a packed WAR file (without unpacking), some servers (like Tomcat if configured not to unpack WARs) may return null from
getRealPath(). getRealPath()only works reliably if the app is exploded (unpacked into folders).- Servlet specification says
getRealPath()can returnnullif it can’t resolve the path.
If getRealPath() is null, and you need to load a file, you’d better use:
InputStream is = context.getResourceAsStream("/WEB-INF/config.properties");
instead of relying on file system paths.
🛠️ Quick Summary:
| You Want | You Use | Example |
|---|---|---|
| Root of web app | getRealPath("/") | /opt/tomcat/webapps/YourApp/ |
| Specific file | getRealPath("/WEB-INF/file.txt") | /opt/tomcat/webapps/YourApp/WEB-INF/file.txt |
| Stream resource (safe for packed WARs) | getResourceAsStream("/WEB-INF/file.txt") | Returns InputStream |