4

私はStrutsが初めてで、知っている限り.do拡張によりTomcatがアクションサーブレットを呼び出し、アクションサーブレットには特定のアクションクラスを呼び出すリソースプロセスオブジェクトがあります

しかし、jsp ページがあるとします。

first.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が検出されるたびに、アクション サーブレットのリソース プロセス オブジェクトに actionclass を呼び出すように指示します。

しかし、アクション マッピングはサーブレット マッピングにどのように関連していますか (URL パターン .do がここで指定されているため)。

私はこの.doと混同しています。それはどのようにURLに追加されますか:(

助けてくださいありがとう!!

4

2 に答える 2

4

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-patternは、で終わるすべてのURL.doをアクションサーブレットにバインドします。次に、アクションサーブレットはすべての呼び出しを責任のあるアクションに委任します。

今、あなたが言及したようなアクションマッピングがあります:

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

アクションマッピングには、URLを指定するパスがあります。StrutsはURLが呼び出されたことをすでに「認識」しているため、URLに.doサフィックスは必要ありません。そうでない場合、アクションマッピング自体を実行できません。指定されたアクションが実行されると、それらのサフィックスを持つURLのみが一致するため、サイレントに.doサフィックスが追加されます。一致しない場合、次のリクエストが失われます。

于 2012-04-29T11:30:42.040 に答える
1

「返信ありがとうございます。url-pattern は .do で終わるすべての URL をアクション サーブレットにバインドすると書いてありました。どうやって .do を URL に追加するのか、まだ混乱しています。」

.do、Struts フレームの作業によってデフォルトで自動的に追加されます (それが単独で行われていることを願っていActionServletます)。拡張子 (.abc など) を変更する場合は、それに応じてアクションの値を変更する必要があります (のようにaction="actionsomthing.abcd")。

修正を歓迎します

于 2013-01-18T03:31:18.063 に答える