[英]Struts2 doesn't find jsp files
我一直試圖建立一個簡單的Struts2應用程序,所以我可以繼續學習框架。 基本上,我期望發生的是當觸發未定義的動作時,將顯示默認頁面。
這個應用程序正在Eclipse中開發。
我在WEB-INF / classes目錄中設置了一個非常簡單的struts.xml文件:
<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,但我仍然沒有運行Windows XP上的IBM Websphere和Application Server Toolkit(Eclipse衍生產品)。 我有點懷疑這可能與瀏覽器有關。
我只是嘗試將一個名為“other.action”的文件添加到與上面提到的其他JSP文件相同的目錄中。 現在,當我單擊鏈接到“其他”操作的提交按鈕時,操作將成功進入我的test.jsp頁面。 我可能是不正確的,但我不相信我應該為每個可能需要使用的“某些動作”提供名為“someaction.action”的文件(我知道我在OS X上不需要它)運行我的應用程序)。
更多更新 - 我剛剛在Firefox 3.5.2上嘗試並在該瀏覽器上運行給出了相同的結果 - 在Websphere上沒有找到“other.action”文件時找不到文件,所以現在我懷疑它是Websphere配置問題。
使用Firefox提供了確定此問題根源所需的密鑰 - 錯誤404:SRVE0190E消息告訴我問題是Websphere配置。
在以下鏈接中更詳細地解釋了該問題:
當收到文件系統上不存在的靜態文件的請求時,IBM Websphere WebContainer會拋出FileNotFoundException。
並且在此鏈接中解釋了解決方案(在這種情況下,設置com.ibm.ws.webcontainer.invokefilterscompatibility值= true):
為了完整起見,我將在這里提出如何糾正這個問題:
- 在管理控制台中,單擊“服務器”,然后在服務器下單擊“應用程序服務器”
- 單擊要應用自定義屬性的服務器
- 在“配置”和“容器設置”下單擊“Web容器設置”,然后在“Web容器設置”下單擊“Web容器”
- 在“配置”和“其他屬性”下單擊“自定義屬性”
- 在“自定義屬性”頁面中,單擊“新建”
- 在設置頁面中,在“名稱”字段中輸入要添加的自定義屬性的名稱,並在“值”字段中輸入要為自定義屬性設置的值。 請注意,某些屬性區分大小寫。 對於此問題,屬性為“com.ibm.ws.webcontainer.invokefilterscompatibility”,值為“true”
- 點擊“應用”或“確定”
- 在出現的“消息”框中單擊“保存”重新啟動服務器以使定制屬性生效
你肯定是在為你的應用程序找到上下文根 。 即在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>
<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 / classes / struts.xml應該在classes文件夾中,並且應該指向你的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
的文件夾中
我可能錯了,但對於每一個動作,都會轉到/test.jsp。 你剛剛創建了[app name] /index.jsp ?? 創建一個[app name] /test.jsp並指向那里!? (嘗試在test.jsp之前刪除xml文件中的斜杠?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.