MultiActionController を使用して、要求された URL から対応するコントローラーを見つけ、要求パラメーターに従ってコントローラー メソッドを照合する機能を実現します。

要件: 要求された URL から対応するコントローラーを見つけ、要求パラメーターに従ってコントローラー メソッドを照合します。

requestMapping: コントローラーで第 1 レベルの URL のマッピングを実装してから、対応するコントローラー メソッドで第 2 レベルの URL のマッピングを実装しますが、これでは要件を満たすことができません。

実装: ParameterMethodNameResolver を使用した SimpleUrlHandlerMapping を使用した MultiActionController

マルチアクションコントローラー

属性 methodNameResolver を介して ParameterMethodNameResolver コントローラーを注入すると、さまざまな要求パスが MultiActionController のさまざまなメソッドに対応することを認識できるため、関連する操作をクラスの関連するメソッドで完了することができます。
2つの構成方法があります

  1. リクエストパラメータに応じてメソッド test.do?action= メソッド名を決定する
  2. リクエスト パスに従ってメソッドを決定します。つまり、アドレス バーに /*.do と入力します。* は、このコントローラーのメソッド名のままです。
//重要属性methodNameResolver 
private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();
//get、set方法
public final void setMethodNameResolver(MethodNameResolver methodNameResolver) {
        this.methodNameResolver = methodNameResolver;
    }

    public final MethodNameResolver getMethodNameResolver() {
        return this.methodNameResolver;
    }

SimpleUrlHandlerMapping

SimpleUrlHandlerMapping は、Spring MVC の 4 つの主要なハンドラー マッピング クラスの 1 つで、適用性が高く、URL モードとハンドラーのマッピング関係を明確に指定できます。
オプションのプロパティ名が 2 つあります: mappings または urlMap で、SimpleUrlHandlerMapping で明確に定義されています。

//本质上,都是对urlMap进行插入
private final Map urlMap = new HashMap();
public void setMappings(Properties mappings) {
        this.urlMap.putAll(mappings);
    }
public void setUrlMap(Map urlMap) {
        this.urlMap.putAll(urlMap);
    }
public Map getUrlMap() {
        return this.urlMap;
    }

宣言するには、次の 2 つの方法があります。

  1. キーは URL パターンで、属性値は Handler の ID または名前です。
<bean id="urlMapping_test" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/test.do">TestAction</prop>
			</props>
		</property>
	</bean>
	//自定义控制器
	<bean id="TestAction" class="com.szlb.platform.action.TestAction">
	</bean>  
  1. 等号の左側は URL パターンで、右側は Handler の ID または名前です。
<beans>    
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
       <property name="mappings">
        <value>
           test.do=TestAction 
        </value>
       </property>
    </bean>
    
    <bean id="TestAction" class="com.szlb.platform.action.TestAction">
	</bean>        
</beans>

SimpleUrlHandlerMapping コンテンツの元のリンク: https://blog.csdn.net/qq_29290295/article/details/84317533

一連の考え

  1. SimpleUrlHandlerMapping を構成し、属性値は mapping であり、キーに従って対応するコントローラーを見つけます
<beans>
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>	
				<prop key="test.do">TestAction</prop>
			</props>
		</property>
	</bean>
  1. カスタム MultiActionController コントローラーを構成し、固定名 methodNameResolver を介して ParameterMethodNameResolver コントローラーを挿入します。
<bean id="TestAction" class="com.szlb.platform.action.TestAction">
		<property name="methodNameResolver">
			<ref bean="paraMethodResolver" />
		</property>
	</bean>
  1. ParameterMethodNameResolver のリクエストパラメータ名を設定します(指定したリクエストパラメータ名からパラメータを取得し、メソッド名に変換できます)
<bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<property name="paramName">
			<value>method</value>
		</property>
		<!-- 不带method参数时,默认执行list方法 -->
		<property name="defaultMethodName">
			<value>list</value>
		</property>
	</bean>
  1. カスタム コントローラーは MultiActionController クラスを継承し、各メソッド パラメーターは型 (HttpServletRequest 要求、HttpServletResponse 応答) である必要があり、戻り値は String、modeAndview、void のみにすることができます。
public class TestAction extends MultiActionController{
    
    
	public void copy(HttpServletRequest request, HttpServletResponse response) {
    
    
		//处理请求
	}
	public String test(HttpServletRequest request, HttpServletResponse response) {
    
    
		//处理请求
		return "";
	}
	public ModelAndView list(HttpServletRequest request, HttpServletResponse response) {
    
    
		//处理请求
		return modelAndView;
	}
}

フロントコールとバックコールのプロセス

リクエストURL

url:SYSTEM_WEB_ROOT +'/test.do?method=copy'

.do リクエストは、カスタム Action クラスを使用して処理されます

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!--SimpleUrlHandlerMapping-->
<beans>
    <bean id="urlMapping_jx" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>	
				<prop key="test.do">TestAction</prop>
			</props>
		</property>
	</bean>
	
	<bean id="TestAction" class="com.szlb.platform.action.TestAction">
		<property name="methodNameResolver">
			<ref bean="paraMethodResolver" />
		</property>
	</bean>
</beans>
public class TestAction extends MultiActionController{
    
    
	 public void copy(HttpServletRequest request, HttpServletResponse response) {
    
    
		//处理请求
	}
}

おすすめ

転載: blog.csdn.net/qq_43505762/article/details/122424959