2017-10-29 4 views
0

私はこの種の問題(this one)をアプリエンジンで持っています。IllegalStateExceptionを取得する:このようなサーブレットはありません:jspは、Google App EngineにデプロイされたJavaアプリケーションにアクセスするとき

私はちょうど始めて、ローカルホスト(tomcat-serverとAppエンジンの標準ローカルホスト)で少なくとも100回テストした後、Eclipseプラグインを使用してJavaエンジンをApp Engineにデプロイしようとしました。

しかし、私はApp Engineの標準としてそれを展開するとき、私はすべてのサーブレットにアクセスしようとしているとき、私はこのエラーを得た:

java.lang.IllegalStateException:いいえ、そのようなサーブレット:org.eclipseでJSP を.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1535) at org.eclipse.jetty.servlet.ServletHandler.doStart(ServletHandler.java:157) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131) at org.eclipse.jetty.util.component.Conta (AbstractHandler.java:61) at org.eclipse.jetty.security.SecurityHandler.doStart(SecurityHandler.java:SecurityHandler.java: (AbstractLifeCycle.java:68) at org.eclipse。 jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105) at org.eclipse.jetty.server.handler。 AbstractHandler.doStart(AbstractHandler.java:61) at org.eclipse.jetty.server.handler.ScopedHandler.doStart(ScopedH andler.java:120) at org.eclipse.jetty.server.session.SessionHandler.doStart(SessionHandler.java:116) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105) at org.eclipse。 (org.eclipse.jetty.server.handler.ScopedHandler.java:120) で、 ContextHandler.startContext(ContextHandler.java:809) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:345)(WebAppContext.java:1406) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1368) at org.eclipse.jetty.server。 (WebAppContext.java:WebAppContext.java:WebAppContext.java:)のWebアプリケーション・コンテキスト・ハンドラ.ContentHandler.doStart(ContextHandler.java:778) (org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) (AbstractLifeCycle.java:68) at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:244) google.apphosting.runtime.jetty9.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:182) at com.google。 apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:97) (com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchServletRequest(JavaRuntime.java:680) 、com.google.apphosting.runtime.JavaRuntime $) RequestRunnable.dispatchRequest(JavaRuntime。java:642) com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.run(JavaRuntime.java:612) at com.google.apphosting.runtime.JavaRuntime $ NullSandboxRequestRunnable.run(JavaRuntime.java:806) at java.lang.Thread.runでcom.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:274) (Thread.java:745)

私は他のファイルにアクセスすることができ、画像、* .html。

私はその重要ならば、私はアプリエンジンで私のweb.xmlファイルは私の*のすべてのためにサーブレットserveltマッピング(私が考えるクラウドストレージへのマッピング)を加えることによって修正されていることに気づいたか分かりません.jspファイルではなく、localhostにはありません。

「この要求によってアプリケーションで新しいプロセスが開始され、アプリケーションコードが初めて読み込まれるようになりました。あなたのアプリケーションの典型的な要求 "と、私は試用アカウントにリンクされているかどうかわかりません。

私はdatanucleus(datanucleus-api-jdo-5.1.0-release)ライブラリを使用しています。私はweb.xmlにもいくつかのフィルタ、インデックスファイル、エラーページjspを持っています。

Eclipseプロジェクトファセット:
App Engineの標準envirement:JRE8
サーブレットAPI:2.5
JAVA:1.8
JPA:1.0私は本当に助けを必要と

、感謝します。

のappengine-web.xmlファイル:

<?xml version="1.0" encoding="UTF-8"?> 
 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
 

 
    <threadsafe>true</threadsafe> 
 
    <sessions-enabled>true</sessions-enabled> 
 

 
    <runtime>java8</runtime> 
 
</appengine-web-app>

web.xmlファイル:

<?xml version="1.0" encoding="UTF-8"?> 
 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
 
    <display-name>my_project</display-name> 
 
    
 
    <welcome-file-list> 
 
    <welcome-file>index.jsp</welcome-file> 
 
    </welcome-file-list> 
 
    
 
    <!-- SERVLETS DEFs --> 
 
    
 
    <servlet> 
 
    <servlet-name>Welcome</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Welcome</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>Statistic</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Statistic</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>Genea_Tree</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Genea_Tree</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>Genea_TreeEdit</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Genea_TreeEdit</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>New_event</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.New_event</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>Inscription</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Inscription</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>InscriptionStep1</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.InscriptionStep1</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>InscriptionStep2</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.InscriptionStep2</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>InscriptionConfirm</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.InscriptionConfirm</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>About</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.About</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.AdminDashboard</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>AdminAuthentification</servlet-name> 
 
    <servlet-class>my_root_package.servlets.secutity.controllers.AdminAuthentification</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>AdminPassReset</servlet-name> 
 
    <servlet-class>my_root_package.servlets.secutity.controllers.AdminPassReset</servlet-class> 
 
    </servlet> 
 
    <servlet> 
 
    <servlet-name>Search</servlet-name> 
 
    <servlet-class>my_root_package.servlets.controllers.Search</servlet-class> 
 
    </servlet> 
 
    
 
<!-- SERVLETS MAPPING --> 
 

 
    <servlet-mapping> 
 
    <servlet-name>Welcome</servlet-name> 
 
    <url-pattern>/welcome</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Statistic</servlet-name> 
 
    <url-pattern>/statistic</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Genea_Tree</servlet-name> 
 
    <url-pattern>/genea_tree</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Genea_TreeEdit</servlet-name> 
 
    <url-pattern>/genea_tree/DetailEdit</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Genea_TreeEdit</servlet-name> 
 
    <url-pattern>/genea_tree/DetailEditMore</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>New_event</servlet-name> 
 
    <url-pattern>/new_event</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Inscription</servlet-name> 
 
    <url-pattern>/inscription</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>InscriptionStep1</servlet-name> 
 
    <url-pattern>/inscription/step1</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>InscriptionStep2</servlet-name> 
 
    <url-pattern>/inscription/step2</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>InscriptionConfirm</servlet-name> 
 
    <url-pattern>/inscription/Confirmation</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>About</servlet-name> 
 
    <url-pattern>/about</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminAuthentification</servlet-name> 
 
    <url-pattern>/admin/Authentification</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminPassReset</servlet-name> 
 
    <url-pattern>/admin/PassReset</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/dashboard</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/dashboard/insertionCommit</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/dashboard/updateCommit</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/dashboard/deleteCommit</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/InsertionCommitPost</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/updateCommitPost</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>AdminDashboard</servlet-name> 
 
    <url-pattern>/admin/deleteCommitPost</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Search</servlet-name> 
 
    <url-pattern>/AdvancedSearch</url-pattern> 
 
    </servlet-mapping> 
 
    <servlet-mapping> 
 
    <servlet-name>Search</servlet-name> 
 
    <url-pattern>/search</url-pattern> 
 
    </servlet-mapping> 
 

 
\t <!-- ERROR PAGES --> 
 

 
\t <error-page> 
 
\t \t <exception-type>java.lang.Exception</exception-type> 
 
\t \t <location>/WEB-INF/errorManagement.jsp</location> 
 
\t </error-page> 
 
\t <error-page> 
 
\t \t <error-code>404</error-code> 
 
\t \t <location>/WEB-INF/404ErrorManagement.jsp</location> 
 
\t </error-page> 
 

 
\t <jsp-config> 
 
\t \t <jsp-property-group> 
 
\t \t \t <url-pattern>*.jsp</url-pattern> 
 
\t \t \t <page-encoding>UTF-8</page-encoding> 
 
\t \t \t <include-prelude>/WEB-INF/taglibs.jsp</include-prelude> 
 
\t \t </jsp-property-group> 
 
\t </jsp-config> 
 
\t 
 
\t 
 
\t <filter> 
 
\t \t <filter-name>encodingfilter</filter-name> 
 
\t \t <filter-class>my_root_package.filters.EncodingFilter</filter-class> 
 
\t \t <init-param> 
 
\t \t \t <param-name>encoding</param-name> 
 
\t \t \t <param-value>UTF-8</param-value> 
 
\t \t </init-param> 
 
\t </filter> 
 

 
<!-- \t FILTERS DEFs --> 
 
\t <filter> 
 
\t \t <filter-name>multipartFilter</filter-name> 
 
\t \t <filter-class>my_root_package.filters.MultipartFilter</filter-class> 
 
\t \t <init-param> 
 
\t \t \t <param-name>maxFileSize</param-name> 
 
\t \t \t <param-value>360000</param-value> 
 
\t \t </init-param> 
 
\t </filter> 
 

 
\t <!-- \t FILTERS MAPPING --> 
 
\t <filter-mapping> 
 
\t \t <filter-name>encodingfilter</filter-name> 
 
\t \t <url-pattern>/*</url-pattern> 
 
\t </filter-mapping> 
 

 
\t <filter-mapping> 
 
\t \t <filter-name>multipartFilter</filter-name> 
 
\t \t <url-pattern>/*</url-pattern> 
 
\t </filter-mapping> 
 
\t 
 
</web-app>

+0

スペルが修正されました – Heri

+0

あなたの 'web.xml'と' appengine-web.xml'を含めることができますか?理想的にはデータニュークリアスがない、小さな自己完結型の例であっても良いでしょう。 –

+0

ok、私はちょうどappengine-web.xmlとweb.xmlファイルを編集して追加します。 – alibaba

答えて

0

申し訳ありませんが、私はあなたを見ていません更新。あなたのweb.xmlには*.jsp URLパターンを参照するjsp-configセクションがありますが、サーブレットマッピングにはjspという接尾辞はありません。

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
     <include-prelude>/WEB-INF/taglibs.jsp</include-prelude> 
    </jsp-property-group> 
</jsp-config> 

GAEは、展開プロセスの一部として、JSPをプリコンパイルするので、私はこの種の処理がうまくいくか分かりません。あなたのJSP内のtaglibs.jspへの参照をインライン展開してみてください。

<%@ include file="/WEB-INF/taglibs.jsp" %> 

更新:あなたのような何かを行うことができるはず私はあなたのような<jsp-config>のオプションが動作するはずですしたことを発表し、Googleのエンジニアからa postに出くわしました。インクルージョンが機能する場合は、open a bug on the issue trackerが最適です。

+0

こんにちはブライアン、私は遅く応答して申し訳ありません、私は昨日まで前回から展開を再試行しませんでした。 – alibaba

+0

あなたが提案したように、それは本当にによって引き起こされたバグでした。私はそれも信じられませんでした。これは、私がjspファイルをたくさん持っているので、私のテストの遅延を説明しています。 – alibaba

1

新しいJava 8ベースのGAEでは、前述の問題はまだ解決されていませんが、すべてのターゲットjspファイルに手動でインクルードタグを適用する必要はありません。 問題の本当の原因は、リモートGAEが、jspサーブレット仕様を、Java用のGoogle Cloud Runtime上の実際のサーブレットクラスにマップできないことです。一言で言えば

、2つのソリューションオプション(私はオプションBをお勧めします)があります。

OPTION A(ショートカット溶液):

1..Giveサーブレット注釈付きの名前jspが。あなたのweb.xml

@WebServlet(
    name = "jsp", 
    urlPatterns = {"/hello", "/"} 
) 
public class HelloAppEngine extends HttpServlet { 

2..Thenあなたは自由にあなたのjsp-configルールを適用することができます。

... 
    <jsp-config> 
     <jsp-property-group> 
      <description>JSP configuration for the open app</description> 
      <url-pattern>/WEB-INF/*</url-pattern> 
      <include-prelude>/WEB-INF/header.jspf</include-prelude> 
      <include-coda>/WEB-INF/footer.jspf</include-coda> 
     </jsp-property-group> 
    </jsp-config> 
... 

このアプローチの問題は、ローカルに開発をチェックすることができないかもしれないので(それがリモートGAEのために働くが)ローカル実行時に、それは、(原因ローカルjspサーブレットクラスの競合に)クラッシュするということです。

はあなたに次の依存関係を追加し、達人で構築している1..Assuming:jspハックとの競合がOPTION B.

オプションB(適切な解決策)で以下の手順を使用OPTIONを回避するために、 pom.xml

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>apache-jsp</artifactId> 
    <version>9.4.8.v20171121</version> 
</dependency> 

2. web.xmlに次の設定を追加します。

<servlet> 
    <servlet-name>jsp</servlet-name> 
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
</servlet> 

3..Andもweb.xml以内にご自由にお使いjsp-configルールを適用することができます。

... 
    <jsp-config> 
     <jsp-property-group> 
      <description>JSP configuration for the open app</description> 
      <url-pattern>/WEB-INF/*</url-pattern> 
      <include-prelude>/WEB-INF/header.jspf</include-prelude> 
      <include-coda>/WEB-INF/footer.jspf</include-coda> 
     </jsp-property-group> 
    </jsp-config> 
... 

これがあなたの問題を解決することを願っています。ハッピーコーディング:)

関連する問題