определить имя приложения Tomcat
От: А.Gрасоff http://fpestde.net
Дата: 16.02.05 11:32
Оценка:
файл web.xml (для некого отдельного приложения):


...
<web-app>
  <display-name>My Web Interface</display-name>
  ...
</web-app>


собственно, надо получить это в, например, сервлете
Re: определить имя приложения Tomcat
От: mihhon  
Дата: 16.02.05 15:53
Оценка:
реботающий код, я сделал на 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();
        }
    }
}
Re[2]: определить имя приложения Tomcat
От: A.Grаsоff http://fpestde.net
Дата: 17.02.05 06:06
Оценка:
то есть стандартными средствами (кроме того как это сделано в
/manager tomcat'а) никак?
Re[2]: определить имя приложения Tomcat
От: dshe  
Дата: 17.02.05 08:54
Оценка:
Здравствуйте, 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");
--
Дмитро
Re[3]: определить имя приложения Tomcat
От: mihhon  
Дата: 17.02.05 10:00
Оценка:
проверить, работает он или нет, очень просто , что я и сделал
Re[3]: определить имя приложения Tomcat
От: mihhon  
Дата: 17.02.05 10:36
Оценка:
war он тот же jar, все файлы внутри которого доступны как ресурсы
Re[4]: определить имя приложения Tomcat
От: dshe  
Дата: 17.02.05 12:09
Оценка:
Здравствуйте, 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
--
Дмитро
Re[5]: определить имя приложения Tomcat
От: mihhon  
Дата: 17.02.05 12:56
Оценка:
работает на 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.