最近在使用BAE的过程当中,有个问题始终解决不了,在配置struts2框架环境的时候,
若是拦截配置的是<url-pattern>/*</url-pattern>,
那这时候打开首页会报 504 错误,访问不了咱们在web.xml中配置的welcome-file-list页面,可是其余的struts配置能够访问,例如:index.do,index.action 均可以访问成功。 java
后来我查看BAE的帮助文档,发现他JAVA的环境使用的是jetty 服务器,而不是咱们日常的 tomcat。 web
因而我下载了jetty而且和BAE同样的版本在本地部署调试,发现也是会出一样的问题,当咱们访问项目首页时,会报出“Could not find action or result” 的错误信息
apache
[2013-09-13 03:40:53,968] Artifact test3:war exploded: Artifact is deployed successfully 2013-9-13 15:40:54 com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn 警告: Could not find action or result There is no Action mapped for namespace [/] and action name [] associated with context path [/test3_war_exploded]. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:662)这在咱们使用tomcat的时候从没有出现过,我查了一下之后发现这个 错误是 因为 我没有在struts 中配置 default-action-ref 致使的。。。。。
而后我在struts配置中加入了
tomcat
<package name="home" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <action name="index" > <result name="success">/index.jsp</result> </action> </package>结果? 成功了有木有!!!上传到BAE也成功了有木有!!!困扰了我一个星期的问题解决了有木有。。。。。
为何jetty+struts2会致使出现配置的welcome-file-list失效这种事情呢?难道如查到的那样是jetty的问题? 服务器
PS:解决方案
在struts2的配置中加入如下配置
session
<package name="home" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <action name="index" > <result name="success">/index.jsp</result> </action> </package>而后重启服务便可解决