java - tomcat 9 jdk 1.8 上的 struts tiles 1.3 [错误] 找不到指定 url 的操作配置

标签 java tomcat java-8 tiles struts-1

我有一个应用程序在带有 1.6 JDK 的 JBoss 5.1 服务器上运行 struts 和 struts-tiles 1.3,没有问题。 一旦我迁移到带有 1.8 JDK 的 Tomcat 9 服务器,我就开始收到错误消息:

GRAVE: "Servlet.service()" pour la servlet [action] a lancé une exception
org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
    at org.apache.struts.chain.commands.AbstractSelectAction.execute(AbstractSelectAction.java:71)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:516)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:895)
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:497)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:129)
    at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:152)
    at org.apache.struts.tiles.taglib.InsertTag.doInclude(InsertTag.java:764)
    at org.apache.struts.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:896)
    at org.apache.struts.tiles.taglib.InsertTag.doEndTag(InsertTag.java:465)
    at org.apache.jsp.WEB_002dINF.pages.layout.layout_jsp._jspx_meth_tiles_005finsert_005f0(layout_jsp.java:2297)
    at org.apache.jsp.WEB_002dINF.pages.layout.layout_jsp._jspService(layout_jsp.java:647)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
....

有人能帮帮我吗?

当我访问应用程序 URL 时发生错误:http://localhost:8080/myapp/authentification.do

特别是当服务器在 tiles:insert 标记处呈现 layout.jsp 时:

<tiles:insert attribute="corner" />

页面使用tiles模板layout.jsp呈现 来自 layout.jsp 的片段:

<body>
        <div id="loading"></div>
        <c:set var="selectedTab" scope="request"><tiles:getAsString name="selectedTab"/></c:set>

        <c:if test="${sessionScope.utilisateur !=null}">
            <div id="bulle"><img src="${imgBulle}" border="0" /></div>
        </c:if>
                    <div id="corner"><tiles:insert attribute="corner" /></div>  

        <div id="container">
            <div id="top">
                <div id="title">                        
                    <h1><%@ include file="/WEB-INF/pages/include/title.jsp"%></h1>      
                    <div id="logo"><img src="${imgLogo}" border="0" /></div>



                </div>
            </div>

来自tiles.xml的相关配置:

    <definition name="page_corner" page="/WEB-INF/pages/layout/corner.jsp" />
<definition name="template" path="/WEB-INF/pages/layout/layout.jsp">
        <put name="title" value="" />
        <put name="corner" value="page_corner" />
        <put name="messages" value="Messages" />
        <put name="informations" value="Informations" />
        <put name="content" value="" />
        <put name="tabs" value="" />
        <put name="selectedTab" value="" />
    </definition>

最佳答案

我设法解决了我的问题,应用程序现在正在运行。
问题是由于 JSP 2.3 引擎引起的,因此当 tiles:insert 时调用用空值定义的属性会触发错误。

对我有用的解决方案是创建一个空的 jsp 文件 empty.jsp ,在图 block 中定义它并在我需要的任何地方使用它。

解决方法:

<definition name="page_empty" page="/WEB-INF/pages/layout/empty.jsp" />

和上面的(在问题中)模板配置是:

<definition name="template" path="/WEB-INF/pages/layout/layout.jsp">
    <put name="title" value="" />
    <put name="corner" value="page_corner" />
    <put name="messages" value="Messages" />
    <put name="informations" value="Informations" />
    <put name="content" value="page_empty" />
    <put name="tabs" value="page_empty" />
    <put name="selectedTab" value="page_empty" />
</definition>

附言:<put name="corner" value="page_corner" />template 中定义不是问题的根源,而是另一个<put name="corner" value="" />tiles_login 中定义延伸 template .

<definition name="tiles_login" extends="template">
    <put name="title" value="application.authentification.title" />
    <put name="corner" value="" />
    <put name="bandeau" value="" />
    <put name="content" value="" />
</definition>

关于java - tomcat 9 jdk 1.8 上的 struts tiles 1.3 [错误] 找不到指定 url 的操作配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45013595/

相关文章:

java - 如何在Java中序列化apache Spark的MatrixFactorizationModel

java - 为什么 Java StringBuilder 有一个用于 CharSequence 的构造函数和另一个用于 String 的构造函数?

java - 从 JavaFX 打印时设置要使用的 CSS

tomcat - 如果只显示数据的公共(public)网站需要设置 SSL

java - Log4j 删除后不重新创建日志文件

java - 在 Java 8 上从源代码编译 Groovy 进行打包是否有令人信服的案例?

java - 为什么list上stream操作时生成的map顺序不对

java - org.apache.commons.fileupload.FileUploadException : Processing of multipart/form-data request failed

java - 在 Mockito 中调用真实方法,但拦截结果

java - Tomcat:无法将 session 序列化到数据库中