2009-08-26 136 views
2

我一直试图无法建立一个简单的Struts2应用程序,所以我可以继续学习框架。基本上,我期望发生的事情是,当一个未定义的动作触发时,将会显示一个默认页面。Struts2没有找到jsp文件

此应用程序正在Eclipse中开发。

我有一个非常简单的struts.xml文件中的WEB-INF/classes目录设置:

<struts> 
<!-- Include webwork default (from the Struts JAR). --> 
<include file="struts-default.xml" /> 

<!-- Configuration for the default package. --> 

<package name="default" extends="struts-default"> 
    <action name="*"> 
     <result>/test.jsp</result> 
    </action> 
</package> 
</struts> 

我有test.jsp的文件(只是被在Eclipse创建的默认JSP模板,即“在此插入标题”)在WebContent级别,并且欢迎页面(触发该操作)是index.jsp也处于同一级别并且在程序启动时显示。它的定义如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 

<html> 
    <head> 
    <title>GlassFish JSP Page</title> 
    </head> 
<body> 
<h1>Hello World!</h1> 
<s:form action="other"> 
    <s:submit value="Submit" /> 
</s:form> 
</body> 
</html> 

我也试图与其他动作的名称,不管是什么,我得到一个404页面未找到。我已经在GlassFish和Websphere 6.1.1上尝试了这一点,并得到了相同的结果,这让我怀疑我缺少的东西可能就在我面前,涉及到任何目录结构(是相对于struts的路径。 xml文件或上下文根?)或一些配置文件。

经过一番尝试之后,我能够使用Glassfish在Mac OS X 10.5.6上的Eclipse Ganymede上运行,但我仍然没有运用IBM Websphere和Application Server Toolkit(Eclipse衍生产品)在Windows XP上。我有点怀疑这可能与浏览器有关。

我刚刚尝试添加一个名为“other.action”的文件到我上面提到的其他JSP文件所在的同一目录中。现在,当我点击链接到“其他”动作的提交按钮时,该动作将成功进入我的test.jsp页面。我可能是不正确的,但我不认为我应该给每个可能需要使用的“someaction”命名一个名为“someaction.action”的文件(我知道我并不需要它在OS X上运行我的应用程序)。

更多更新 - 我刚刚在Firefox 3.5.2上试了一下,并且在该浏览器上运行得到了相同的结果 - 文件没有在Websphere上没有“other.action”文件找到,所以现在我怀疑这是一个Websphere配置问题。

回答

2

使用Firefox提供了我需要确定此问题源的关键 - 错误404:SRVE0190E消息告诉我问题是Websphere配置。

的课题在更好的细节在下面的链接解释:

IBM Websphere WebContainer throws a FileNotFoundException when a request is received for a static file which does not exist on the file system.

并将该溶液在此链路(在此情况下进行了说明,设置com.ibm.ws.webcontainer.invokefilterscompatibility值= TRUE):

Websphere setting up custom properties

为了完整起见,我把如何解决这个问题就在这里:

- 在管理控制台中,单击“服务器”和服务器下单击“应用程序服务器”

单击可将自定义属性将被应用

- 下层 - “配置”的服务器上,“集装箱设置“单击‘Web容器设置’下的Web容器设置单击‘Web容器’

- 下层 - ‘配置’和‘其他属性’,单击‘自定义属性’

- 在自定义属性页,单击”新“

- 在设置页面中,在“名称”字段中输入要添加的定制属性的名称,并在“值”字段中输入要为定制属性设置的值。请注意,有些属性区分大小写。对于这一问题,该属性是“com.ibm.ws.webcontainer.invokefilterscompatibility”和值将在“真”

- 点击“应用”或“确定”

- 点击“保存” “消息”框中出现 重新启动服务器的自定义属性生效

0

您是否明确打到您的应用程序的上下文根。即在web.xml中,应用程序有一个名称,通常与上下文根相同,除非您已将应用程序打包到具有不同名称的war文件中。

http://yourserver:8080/yourcontextroot 

我相信Stuts 2附带了一些样本Web应用程序和一些Maven原型。从其中一个开始,然后根据需要对其进行自定义总是一个好主意。

http://struts.apache.org/2.1.2/docs/struts-maven-archetypes.html

Struts 2中有一个名为struts-blank-2.x.xx.war的示例项目。 http://mirrors.dedipower.com/ftp.apache.org/struts/examples/struts2-blank-2.0.14.war

您可以下载它并将其重命名为.zip并查看他们如何设置项目。

WEB-INF/web。XML

应该有Struts2的servlet和过滤

...  
<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

WEB-INF /班/ struts.xml中应在类文件夹,应该指向你的Struts配置文件

... 
    <include file="yourconfig.xml"/> 

* WEB-INF/yourconfig.xml位于与struts.xml相同的文件夹中,并且包含您的操作的映射

... 
<package name="example" namespace="/example" extends="struts-default"> 

    <action name="*" class="example.ExampleSupport"> 
     <result>/example/test.jsp</result> 
    </action> 

    <!-- Add actions here --> 
</package> 

所有JSP文件名为/example

0

我可能是错误的文件夹中,但对于每一个动作,它进入/test.jsp。然而你刚刚创建了[app name] /index.jsp?创建一个[app name] /test.jsp并指向那里!? (尝试在test.jsp之前删除xml文件中的斜线?)

+0

好一点 - 虽然index.jsp的很可能是欢迎页'web.xml' – pjp 2009-08-26 22:12:22

+0

无论是index.jsp和测试。 jsp文件存在。 – Timbuck 2009-08-26 22:16:38