如何将.do扩展名附加到struts中的URL中?

时间:2012-04-29 11:18:55

标签: struts1

我是struts的新手,据我所知,.do扩展导致tomcat调用动作servlet,动作servlet具有调用特定动作类的资源流程对象

但我们假设我们有一个jsp页面

first.jsp

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="s" %>
 <s:form action="myform">... 

当我们提交此表格时

调用struts.config.xml中的

动作映射,并从那里选择:

<action input="/first.jsp" name="actionformbean" path="/myform" scope="session"
   type="actionclass"/>

遇到http://....myform.do时,告诉操作servlet的资源进程对象调用actionclass

但是动作映射如何与servlet映射相关(如此处给出了url模式.do)。

我对这个.do感到困惑,它是如何附加到url :(

帮助PLZ 谢谢!!

2 个答案:

答案 0 :(得分:2)

Struts的标准Action Servlet映射在web.xml(部署描述符)中定义。它是这样的:

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

servlet-name先前在部署描述符中定义:

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
     ...
  </init-param>
  <load-on-startup>2</load-on-startup>
  ...
</servlet>

url-pattern将以.do结尾的所有url绑定到Action Servlet。 Action Servlet依次将所有调用委托给负责任的操作。

现在,有一些动作映射就像你提到的那样:

<action input="/first.jsp" name="actionformbean" path="/myform" scope="session"
   type="actionclass"/>

动作映射具有指定其URL的路径。 URL不需要.do后缀,因为Struts已经“知道”它被调用,否则无法执行动作映射本身。执行指定的操作后,它会以静默方式附加.do后缀,因为只有匹配这些后缀的URL才会匹配 - 否则下一个请求将丢失。

答案 1 :(得分:1)

  

“感谢您的回复,但是您已经写过url-pattern将所有以.do结尾的url绑定到action servlet。我仍然感到困惑的是.do将如何附加到url”

默认情况下,Struts框架工作会自动附加.do(希望它由ActionServlet本身完成)。如果您希望更改扩展名(例如.abc),则应相应地修改操作值(action="actionsomthing.abcd")。

赞赏更正