4

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

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

第一个.jsp

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

当我们提交此表格时

调用 struts.config.xml 中的 action-mapping 并从中选择:

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

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

但是动作映射如何与 servlet 映射相关(如 url 模式 .do 在这里给出?)

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

帮助请谢谢!

4

2 回答 2

4

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 将所有以结尾的 url 绑定.do到 Action Servlet。Action Servlet 反过来将所有调用委托给负责的操作。

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

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

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

于 2012-04-29T11:30:42.040 回答
1

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

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

更正表示赞赏

于 2013-01-18T03:31:18.063 回答