файл web.xml (для некого отдельного приложения):
...
<web-app>
<display-name>My Web Interface</display-name>
...
</web-app>
собственно, надо получить это в, например, сервлете
реботающий код, я сделал на struts сервлете, работает, конечно, и на HttpServlet
package xxx;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import org.apache.struts.action.ActionServlet;
/**
* Extend the Struts ActionServlet to perform your own special
* initialization.
*/
public class XxxActionServlet extends ActionServlet {
public void init() throws ServletException {
super.init();
try {
// читаем web.xml
InputStream in = getClass().getClassLoader().getResourceAsStream("WEB-INF/web.xml");
// и делаем с ним, что хотим, в твоём случае надо
// отпарсить xml и вынуть элемент web-app/display-name
BufferedReader inR = new BufferedReader(new InputStreamReader(in));
String str = null;
while ((str = inR.readLine()) != null) {
System.out.println(str);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Здравствуйте, mihhon, Вы писали:
M>реботающий код, я сделал на struts сервлете, работает, конечно, и на HttpServlet
M>M> . . .
M> // читаем web.xml
M> InputStream in = getClass().getClassLoader().getResourceAsStream("WEB-INF/web.xml");
M> // и делаем с ним, что хотим, в твоём случае надо
M> // отпарсить xml и вынуть элемент web-app/display-name
M>
Вообще-то странно, что он работающий, поскольку webapp класслоадер, обязан загружать ресурсы из WEB-INF/classes и из WEB-INF/lib/*.jar, но не из корня webapp. Если уж читать web-xml, пожалуй так:
InputStream in = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/web.xml");
проверить, работает он или нет, очень просто

, что я и сделал
Здравствуйте, mihhon, Вы писали:
M>проверить, работает он или нет, очень просто
, что я и сделал
Действительно!

Пожалуй и я не поленюсь и проверю...
package evil;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class BackdoorBaseServlet extends HttpServlet {
protected abstract InputStream getBackdoorStream(String path);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getParameter("path");
if(path != null) {
InputStream istream = getBackdoorStream(path);
if(istream != null) {
response.setContentType("text/plain");
OutputStream ostream = response.getOutputStream();
int ch;
while((ch = istream.read()) != -1)
ostream.write(ch);
ostream.flush();
istream.close();
}
else {
response.sendError(404); // Not Found
}
}
else {
response.sendError(204); // No Content
}
}
}
package evil;
import java.io.InputStream;
public class BackdoorClassLoaderServlet extends BackdoorBaseServlet {
protected InputStream getBackdoorStream(String path) {
return getClass().getClassLoader().getResourceAsStream(path);
}
}
package evil;
import java.io.InputStream;
public class BackdoorContextServlet extends BackdoorBaseServlet {
protected InputStream getBackdoorStream(String path) {
return getServletContext().getResourceAsStream(path);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>BackdoorClassLoaderServlet</servlet-name>
<servlet-class>evil.BackdoorClassLoaderServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>BackdoorContextServlet</servlet-name>
<servlet-class>evil.BackdoorContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BackdoorClassLoaderServlet</servlet-name>
<url-pattern>/ldr</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>BackdoorContextServlet</servlet-name>
<url-pattern>/ctx</url-pattern>
</servlet-mapping>
</web-app>
Структура каталогов
webapps
backdoor
WEB-INF
classes
evil
BackdoorBaseServlet.class
BackdoorClassLoaderServlet.class
BackdoorContextServlet.class
hello.txt
web.xml
root.txt
такие запросы работают:
http://www.host.com/backdoor/ctx?path=/WEB-INF/web.xml
http://www.host.com/backdoor/ctx?path=/WEB-INF/classes/hello.txt
http://www.host.com/backdoor/ctx?path=/root.txt
такие запросы не работают:
http://www.host.com/backdoor/ldr?path=/WEB-INF/web.xml
http://www.host.com/backdoor/ldr?path=WEB-INF/web.xml
зато работает
http://www.host.com/backdoor/ldr?path=/hello.txt
Проверял на Tomcat 4.1 и на Tomcat 5.0
работает на WSAD 5.1 — WAS TE 5.1
package xxx;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import org.apache.struts.action.ActionServlet;
/**
* Extend the Struts ActionServlet to perform your own special
* initialization.
*/
public class XxxActionServlet extends ActionServlet {
public void init() throws ServletException {
super.init();
printRes("WEB-INF/web.xml");
printRes("index.jsp");
printRes("WEB-INF/classes/xxx/XxxActionServlet.class");
}
private void printRes(String path) {
try {
InputStream in =
getClass().getClassLoader().getResourceAsStream(path);
BufferedReader inR = new BufferedReader(new InputStreamReader(in));
String str = null;
while ((str = inR.readLine()) != null) {
System.out.println(str);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
человек понял, надеюсь, как ему читать web.xml