Как расширение.do добавляется в URL в распорках?

Я новичок в Struts и насколько я знаю, что расширение.do заставляет tomcat вызывать сервлет действия, а сервлет действия имеет объект процесса ресурсов, который вызывает определенный класс действия

Но давайте предположим, что у нас есть страница JSP

First.jsp

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

когда мы отправляем эту форму

вызывается action-mapping в struts.config.xml, и он выбирается оттуда как:

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

всякий раз, когда встречается http://....myform.do, сообщайте объекту процесса ресурса сервлета действия, чтобы он вызывал actionclass

НО, каким образом отображение действий связано с отображением сервлета (как здесь указан шаблон URL.do?)

Я запутался с этим.do, вот как он добавляется в URL:(

ПОМОГИТЕ плз спасибо!!

2 ответа

Решение

Стандартное отображение сервлета действий для Struts определено в вашем web.xml, дескрипторе развертывания. Это выглядит так:

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

Имя сервлета определено ранее в дескрипторе развертывания:

<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 связывает все URL, заканчивающиеся на .do к сервлету Action. Сервлет Действия, в свою очередь, делегирует все вызовы ответственному действию.

Теперь есть сопоставления действий, подобные упомянутому вами:

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

У сопоставлений действий есть путь, который определяет их URL. URL не нуждается в суффиксе.do, потому что Struts уже "знает", что он был вызван, иначе само отображение действия не может быть выполнено. Как только указанное действие выполнено, оно молча добавляет суффикс.do, так как будет сопоставляться только URL с этими суффиксами - в противном случае следующий запрос будет потерян.

"Спасибо за ответ, но вы написали, что шаблон URL связывает все URL, заканчивающиеся на.do, с сервлетом действия. Я все еще не уверен, как.do будет добавлен к URL"

.do автоматически добавляется по умолчанию при работе с Struts Frame (надеюсь, это было сделано ActionServlet сам). Если вы хотите изменить расширение (скажем,.abc), то вам следует соответствующим образом изменить значение действия (как action="actionsomthing.abcd").

Исправления приветствуются

Другие вопросы по тегам