i have been working on small application, learning exercise.
i have been introducing new things in stages. had working adding struts 2.
now, trying add tiles , keep having problems. if right click on project , "run as"
-> "run on server"
run expected.
if deploy application war file local tomcat instance deploy ok when try access application fails illegalargumentexception
in tiles definition file.
i have maven resources in web-inf/lib
directory. there still must missing when export war file. i've reviewed log files , can't see difference. server configured in eclipse points same server running separately. tomcat v7.0.70.
here output when try access webpage:
struts problem report struts has detected unhandled exception: messages: illegal character in path @ index 13: file:///c:/my programs/apache-tomcat-7.0.70/webapps/teaminfo/web-inf/classes/tiles-def.xml illegal character in path @ index 13: file:///c:/my programs/apache-tomcat-7.0.70/webapps/teaminfo/web-inf/classes/tiles-def.xml
stacktraces
java.lang.illegalargumentexception: illegal character in path @ index 13: file:///c:/my programs/apache-tomcat-7.0.70/webapps/teaminfo/web-inf/classes/tiles-def.xml java.net.uri.create(unknown source) org.apache.struts2.tiles.strutswildcardservletapplicationcontext.getresource(strutswildcardservletapplicationcontext.java:105) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:232) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:225) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:225) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loaddefinitionsfromresources(cachinglocaleurldefinitiondao.java:203) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loaddefinitions(cachinglocaleurldefinitiondao.java:192) org.apache.tiles.definition.dao.resolvinglocaleurldefinitiondao.loaddefinitions(resolvinglocaleurldefinitiondao.java:68) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.checkandloaddefinitions(cachinglocaleurldefinitiondao.java:174) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinitions(cachinglocaleurldefinitiondao.java:131) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinition(cachinglocaleurldefinitiondao.java:105) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinition(cachinglocaleurldefinitiondao.java:49) org.apache.tiles.definition.unresolvinglocaledefinitionsfactory.getdefinition(unresolvinglocaledefinitionsfactory.java:89) org.apache.tiles.impl.basictilescontainer.getdefinition(basictilescontainer.java:286) org.apache.tiles.impl.basictilescontainer.isvaliddefinition(basictilescontainer.java:273) org.apache.tiles.tilescontainerwrapper.isvaliddefinition(tilescontainerwrapper.java:88) org.apache.tiles.impl.mgmt.cachingtilescontainer.isvaliddefinition(cachingtilescontainer.java:100) org.apache.struts2.views.tiles.tilesresult.doexecute(tilesresult.java:139) org.apache.struts2.result.strutsresultsupport.execute(strutsresultsupport.java:208) com.opensymphony.xwork2.defaultactioninvocation.executeresult(defaultactioninvocation.java:366) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:270) com.opensymphony.xwork2.interceptor.logginginterceptor.intercept(logginginterceptor.java:68) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:240) com.opensymphony.xwork2.interceptor.timerinterceptor.intercept(timerinterceptor.java:121) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:240) org.apache.struts2.factory.strutsactionproxy.execute(strutsactionproxy.java:54) org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:556) org.apache.struts2.dispatcher.executeoperations.executeaction(executeoperations.java:81) org.apache.struts2.dispatcher.filter.strutsprepareandexecutefilter.dofilter(strutsprepareandexecutefilter.java:113) org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:241) org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208) org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:218) org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:122) org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:505) org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:169) org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103) org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:956) org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:116) org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:442) org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1082) org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:623) org.apache.tomcat.util.net.aprendpoint$socketprocessor.dorun(aprendpoint.java:2517) org.apache.tomcat.util.net.aprendpoint$socketprocessor.run(aprendpoint.java:2506) java.util.concurrent.threadpoolexecutor.runworker(unknown source) java.util.concurrent.threadpoolexecutor$worker.run(unknown source) org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61) java.lang.thread.run(unknown source) java.net.urisyntaxexception: illegal character in path @ index 13: file:///c:/my programs/apache-tomcat-7.0.70/webapps/teaminfo/web-inf/classes/tiles-def.xml java.net.uri$parser.fail(unknown source) java.net.uri$parser.checkchars(unknown source) java.net.uri$parser.parsehierarchical(unknown source) java.net.uri$parser.parse(unknown source) java.net.uri.<init>(unknown source) java.net.uri.create(unknown source) org.apache.struts2.tiles.strutswildcardservletapplicationcontext.getresource(strutswildcardservletapplicationcontext.java:105) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:232) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:225) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loadrawdefinitionsfromresources(cachinglocaleurldefinitiondao.java:225) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loaddefinitionsfromresources(cachinglocaleurldefinitiondao.java:203) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.loaddefinitions(cachinglocaleurldefinitiondao.java:192) org.apache.tiles.definition.dao.resolvinglocaleurldefinitiondao.loaddefinitions(resolvinglocaleurldefinitiondao.java:68) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.checkandloaddefinitions(cachinglocaleurldefinitiondao.java:174) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinitions(cachinglocaleurldefinitiondao.java:131) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinition(cachinglocaleurldefinitiondao.java:105) org.apache.tiles.definition.dao.cachinglocaleurldefinitiondao.getdefinition(cachinglocaleurldefinitiondao.java:49) org.apache.tiles.definition.unresolvinglocaledefinitionsfactory.getdefinition(unresolvinglocaledefinitionsfactory.java:89) org.apache.tiles.impl.basictilescontainer.getdefinition(basictilescontainer.java:286) org.apache.tiles.impl.basictilescontainer.isvaliddefinition(basictilescontainer.java:273) org.apache.tiles.tilescontainerwrapper.isvaliddefinition(tilescontainerwrapper.java:88) org.apache.tiles.impl.mgmt.cachingtilescontainer.isvaliddefinition(cachingtilescontainer.java:100) org.apache.struts2.views.tiles.tilesresult.doexecute(tilesresult.java:139) org.apache.struts2.result.strutsresultsupport.execute(strutsresultsupport.java:208) com.opensymphony.xwork2.defaultactioninvocation.executeresult(defaultactioninvocation.java:366) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:270) com.opensymphony.xwork2.interceptor.logginginterceptor.intercept(logginginterceptor.java:68) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:240) com.opensymphony.xwork2.interceptor.timerinterceptor.intercept(timerinterceptor.java:121) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:240) org.apache.struts2.factory.strutsactionproxy.execute(strutsactionproxy.java:54) org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:556) org.apache.struts2.dispatcher.executeoperations.executeaction(executeoperations.java:81) org.apache.struts2.dispatcher.filter.strutsprepareandexecutefilter.dofilter(strutsprepareandexecutefilter.java:113) org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:241) org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208) org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:218) org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:122) org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:505) org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:169) org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103) org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:956) org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:116) org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:442) org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1082) org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:623) org.apache.tomcat.util.net.aprendpoint$socketprocessor.dorun(aprendpoint.java:2517) org.apache.tomcat.util.net.aprendpoint$socketprocessor.run(aprendpoint.java:2506) java.util.concurrent.threadpoolexecutor.runworker(unknown source) java.util.concurrent.threadpoolexecutor$worker.run(unknown source) org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61) j ava.lang.thread.run(unknown source) seeing page because development mode enabled. development mode, or devmode, enables debugging behaviors , reports assist developers. disable mode, set:
struts.devmode=false in web-inf/classes/struts.properties file.
this web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>team info</display-name> <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/classes/config/springbeans.xml</param-value> </context-param> <context-param> <param-name>islog4jautoinitializationdisabled</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>tilesdefinitions</param-name> <param-value>/web-inf/classes/tiles-def.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <listener> <listener-class>org.apache.struts2.tiles.strutstileslistener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.strutsprepareandexecutefilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
struts.xml
<?xml version="1.0" encoding="utf-8" ?> <!doctype struts public "-//apache software foundation//dtd struts configuration 2.0//en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devmode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.tilesresult" /> </result-types> <interceptors> <interceptor name="authentication" class="com.teaminfo.interceptors.authenticationinterceptor" /> <interceptor-stack name="authstack"> <interceptor-ref name="timer" /> <interceptor-ref name="logger" /> <interceptor-ref name="authentication" /> <interceptor-ref name="defaultstack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="authstack" /> <default-action-ref name="dashboard" /> <global-results> <result name="need_login" type="tiles">login</result> <result name="exception">/jsp/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.exception" result="exception" /> </global-exception-mappings> <action name="login" class="com.teaminfo.action.loginaction"> <interceptor-ref name="defaultstack" /> <result name="success" type="redirectaction">dashboard</result> <result name="input" type="tiles">login</result> </action> <action name="dashboard" class="com.teaminfo.action.dashboard"> <result name="manager" type="tiles">manager</result> <result name="associate" type="tiles">associate</result> </action> </package> </struts>
tiles config
<?xml version="1.0" encoding="utf-8" ?> <!doctype tiles-definitions public "-//apache software foundation//dtd tiles configuration 2.0//en" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <definition name="maintemplate" template="/jsp/layout.jsp"> <put-attribute name="title" value="team info" /> <put-attribute name="header" value="/jsp/header.jsp" /> <put-attribute name="menu" value="/jsp/menu.jsp" /> <put-attribute name="body" value="/jsp/body.jsp" /> <put-attribute name="footer" value="/jsp/footer.jsp" /> </definition> <definition name="login" extends="maintemplate"> <put-attribute name="title" value="team info login" /> <put-attribute name="menu" value="/jsp/menu.jsp" /> <put-attribute name="body" value="/jsp/login.jsp" /> </definition> <definition name="admin" extends="maintemplate"> <put-attribute name="title" value="team info admin" /> <put-attribute name="menu" value="/jsp/admin/menu.jsp" /> <put-attribute name="body" value="/jsp/admin/body.jsp" /> </definition> <definition name="manager" extends="maintemplate"> <put-attribute name="title" value="team info manager" /> <put-attribute name="menu" value="/jsp/manager/menu.jsp" /> <put-attribute name="body" value="/jsp/manager/body.jsp" /> </definition> <definition name="associate" extends="maintemplate"> <put-attribute name="title" value="team info manager" /> <put-attribute name="menu" value="/jsp/associate/menu.jsp" /> <put-attribute name="body" value="/jsp/associate/body.jsp" /> </definition> </tiles-definitions>
it doesn't space in path. space should changed %20
in case. use replaceall(" ","%20")
;
otherwise, can use encoding using urlencoder.
string pathoffile = "file:///c:/my programs/apache-tomcat-7.0.70/webapps/teaminfo/web-inf/classes/tiles-def.xml"; pathoffile = urlencoder.encode(pathoffile, "utf-8");
update1:
for tiles, can replace param value below
<param-value> /web-inf/tiles-defs.xml,/org/apache/tiles/classpath-defs.xml </param-value>
instead of
<param-value>/web-inf/classes/tiles-def.xml</param-value>
for more, can go through this tutorial.
Comments
Post a Comment