1

サーブレットを使用したWeb開発の最初の一歩を踏み出しました。現在、サーブレットの初期化パラメータとコンテキストパラメータを取得しようとしています。これらは、web.xmlで次のように宣言されています。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>JediWebTutorial</display-name>
    **<context-param>
        <param-name>contextParam</param-name>
        <param-value>contextValue</param-value>
    </context-param>**
    <servlet>
        <servlet-name>GreeterServlet</servlet-name>
        <servlet-class>jedi.servlets.GreeterServlet</servlet-class>
        **<init-param>
            <param-name>servletParam</param-name>
            <param-value>servletValue</param-value>    
        </init-param>**
    </servlet>
    <servlet>
        <servlet-name>GetParameterValuesServlet</servlet-name>
...

次のように、GreeterServlet内のdoGetメソッドで取得しようとしています。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ServletConfig config = getServletConfig();
    ServletContext context = config.getServletContext();
    Enumeration<String> servletParams = config.getInitParameterNames();
    Enumeration<String> contextParams = context.getInitParameterNames();

    for (String param : Collections.list(servletParams)) {
        System.out.println(param);
    }

    for (String param : Collections.list(contextParams)) {
        System.out.println(param);
    }
...

予想どおり、コンソールには「contextParam」という名前が表示されます。ただし、「servletParam」名は出力されません。

私は何時間も苦労していて、ノードが内部にあり、GreeterServletのinit()メソッドをオーバーライドしていないことを確認しました(多くのディスカッションリストで問題の原因として報告されているため) 。私はウェブ上で同様のケースを見つけていません-多分それは私があまりにも初心者であるというのはあまりにも単純な問題だからです。とにかく、それを見てわざわざしてくれた人に感謝します!

ちなみに、役に立ったら、TomCat7.0.34とEclipseHeliosを使用しています。

4

2 に答える 2

1

この問題に取り組んでいると、サーブレットの init-parameters に次の方法でアクセスできることがわかりました (上記の問題の場合)。

ServletContext context = config.getServletContext();
ServletRegistration register = context.getServletRegistration("GreeterServlet");
String servletParam = register.getInitParameter("servletParam");
System.out.println(servletParam);

予想されるservletValueを出力するもの。

前の質問には答えていませんが、これは確かに解決策です。他の誰かが同様の問題に遭遇した場合は、試してみてください!そして、誰かが元の問題の解決策を見つけたとしても、それは間違いなく歓迎されるでしょう! ;-)

于 2013-01-11T05:10:08.513 に答える
-1

これをコメントとして追加する必要がありましたが、どういうわけか、この質問の「コメントを追加」リンクが表示されないため、回答として投稿します。

あなたが投稿した doGet() メソッドはどのサーブレットですか? GetParameterValuesServlet の一部のようで、GreeterServlet に init パラメータを追加しました。

于 2013-01-08T06:42:05.247 に答える