我是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 谢谢!!
答案 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"
)。
赞赏更正