2

我想知道如何在 Struts 中找出文件的位置。文件所在的位置这是程序的一部分:

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>*.do</url-pattern>
 </filter-mapping>

 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
   </init-param>
   <load-on-startup>2</load-on-startup>
 </servlet>

我知道这.do将是项目中任何文件的扩展名,但我没有得到它的位置。我对struts一无所知。

提前致谢

4

2 回答 2

3

.do是你的 URL 模式(@Jigar Joshi 提到)要查看它的映射位置,你必须在浏览器上查看你的 URL:

假设你有http://localhost:8080/myapp/login.do,那么.do你的 web 容器就会看到它,它会调用你的 Struts Servlet org.apache.struts.action.ActionServlet

然后,StrutsActionServlet将看到您的相对路径/login(请参阅我如何忽略.do)并查看它是否映射到您的config文件(在您的情况下/WEB-INF/struts-config.xml)。

从那里,StrutsActionServlet检查是否有与您的相对路径匹配的操作路径,如下所示:

<action path="/login" type="com.myapp.action.LoginAction" name="LoginForm" scope="request">

</action>

如果<action>找到,Struts 将调用com.myapp.action.LoginAction类并调用execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception方法(如果该类只是一个简单的Action类)。

我希望这有帮助。


在您的<action>元素中,您可能会发现另一个名为 的元素<forward>,例如:

<forward name="FHome" path="/content/jsp/home.jsp" />

forwardname属性基本上是 Struts Action 在返回 时调用的ActionForward,代码如下:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
     return mapping.findForward("FHome");
}

请记住,元素中的forward内部称为本地前锋。全球前锋位于元素之外。actionstruts-config.xmlaction

元素的pathforwardStruts 必须调用(和 web/servlet 容器)来呈现的 jsp 页面的相对路径。

希望这可以为您解决问题。

于 2011-04-15T10:40:14.973 回答
0

我知道 .do 将是项目中任何文件的扩展名

.do将是 URL 模式。

每当您点击/yourapp/login.do特定动作时,都应该在 struts 中执行并且映射到struts-config.xml

于 2011-04-15T10:07:44.827 回答