java - サーブレットの実行により例外を投げました - 重大: サーブレット がload()例外を投げました



サーブレットJSPのServlet.service()がこの例外をスローしたのはなぜですか? (4)

次のようなエラーが表示されますが、何が問題なのでしょうか?

私のコンテキスト記述子:

<?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_2_5.xsd" id="WebApp_ID" version="2.5">
   <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>controller.UploadServlet</servlet-class>
  </servlet>
   <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:159)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)
Feb 23, 2010 11:35:28 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:159)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)

https://code.i-harness.com


あなたのJSPに問題があります。実行時にnullのオブジェクトに対してメソッドを呼び出す可能性が最も高いです。

_jspInit()呼び出しで起こっていますが、もう少し珍しいことです...問題コードはおそらく<%! %>ようなメソッド宣言<%! %> <%! %>

更新:私は_jspInit()メソッドをオーバーライドすることでこれを再現しました。 それはあなたがやっていることですか? もしそうなら、それはお勧めではありません。それが_で始まる理由です。


あなたのプロジェクトがMavenベースの場合は、servlet-api、jsp-apiなどの依存関係のためにscopeを設定することを忘れないでください。 そうしないと、これらのjarはWEB-INF / libにエクスポートされ、Tomcatサーバーのジャーナルに混入します。 それは痛い問題を引き起こす。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>

私はこのエラーがあった。 それはやや自発的に起こり、ページはHTMLタグの途中でブラウザで停止するでしょう(コードのセクションではありません)。 それは困惑していた!

私は変数をスコープから外し、ガベージコレクタがそれを掃除してから、それを使用しようとしました。 したがって、一見無作為なタイミング。

もっと具体的な例を与えるには...メソッドの中で、私は次のようなものを持っていました:

Foo[] foos = new Foo[20];
// fill up the "foos" array...
return Arrays.asList(foos); // this returns type List<Foo>

今私のJSPページでは、そのメソッドを呼び出し、それによって返されたListオブジェクトを使用しました。 Listオブジェクトはその "foos"配列によってサポートされています。 しかし、メソッドから返されたとき(ローカル変数であるため)、配列は範囲外になりました。 戻り直後、ガベージコレクタは "foos"配列を払い落としました。リストにアクセスするとNullPointerExceptionが発生しました。

私は実際に、上記の方法を書いたように、それが起こるかどうか、本当に不思議でした。

さらに深い根底にある問題は時期尚早の最適化でした。 私はリストが欲しかったが、正確に20の要素があることを知っていたので、私はnew ArrayList<Foo>(20)よりも効率的にしようと思った。私が使った方法。 もちろん、それを修正するために、私はArrayListを作成し、それを埋めて返しました。 もう奇妙なエラーはありません。


私は上記の答えに従うことを最善の努力をしました。 しかし、私は同じ理由の下にあります。

注:これはmaven + eclipse + tomcatの配備であり、特にspring mvcに直面しています。

1-サーブレットとJSP依存関係を含める場合は、スコープ内で指定されたものに印を付けてください。

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
  1. jstlを依存関係として含める可能性があります。 したがって、 jsp-api.jarservlet-api.jarが一緒に含まれます。 したがって、以下に示すように、必要なlibをターゲットに、または「WEB-INF / lib」にデプロイするservlet-apiとjsp-apiを除外する必要があります。

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
        <exclusions>
            <exclusion>
                <artifactId>servlet-api</artifactId>
                <groupId>javax.servlet</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jsp-api</artifactId>
                <groupId>javax.servlet.jsp</groupId>
            </exclusion>
        </exclusions>
    </dependency>