0

私はstruts2が初めてです。アプリケーションには userLogin という Action があります。url に入るとhttp://servername:9090/appName/userLogin、リクエストを直接 /jsp/account/login.jsp に転送する必要があります。アクション メソッドを呼び出すべきではありません。リクエストがgetを介してからloginPageに進むとき、リクエストがPostの場合はアクションを呼び出す必要があることを確認するにはどうすればよいですか

Struts.xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" />
    <package name="default" extends="struts-default">
        <action name="index">
            <result>jsp/index.jsp</result>
        </action>    

        <action name="userLogin" class="com.ril.tc.action.LoginAction">
            <result>jsp/account/login.jsp</result>
            <result name="success">jsp/index.jsp</result>
            <result name="error">jsp/account/login.jsp</result>
        </action>

        <action name="ministatement" class="com.ril.tc.action.MiniStatementAction">
            <result>jsp/account/ministatement.jsp</result>
            <result name="success">jsp/account/ministatementdetails.jsp</result>
            <result name="error">jsp/account/ministatement.jsp</result>
        </action>
    </package>
</struts>
4

1 に答える 1

1

1. ビジネス メソッドが実行される前に、アクション メソッドでリクエスト メソッドを簡単に確認できます。

      It will add  2-3 lines of java code in action method and  a line modification in xml configuration.

2. または、インターセプターを使用して Action メソッドの実行を厳密に制限することもできます。

    Interceptor requires a seperate java class and a few lines of xml configuration.

方法 1

a) Java コード

public String execute (){  // or your method name

     if(ServletActionContext.getRequest().getMethod().equals("GET")){

        return  "getrequest";
     }

........
//your business logic

}

b) xml 構成

<action name="userLogin" class="com.ril.tc.action.LoginAction">
            <result name="getrequest">jsp/account/login.jsp</result>
            <result name="success">jsp/index.jsp</result>
            <result name="error">jsp/account/login.jsp</result>
        </action>

方法 2。

a) Java コード

public GetRequestFilterInterceptor extends AbstractInterceptor{
  @Override
    public void intercept (ActionInvocation action){
            if(ServletActionContext.getRequest().getMethod(). equals("GET")){
                    return "getrequest";
            }else{
                    action.invoke();
            }

    }
}

b) XML 構成

<struts>
  <package name="default" extends="struts-default">
        <interceptors>

        <interceptor name="getUrlFilter" class="packagename.GetRequestFilterInterceptor"/>

                    <interceptor-stack  name="requestFilter">

                        <interceptor-ref  name="getUrlFilter"/>
                        <interceptor-ref name="defaultStack"/>  

                     </interceptor-stack>

        </interceptors>
     ......

        <action name="userLogin" class="com.ril.tc.action.LoginAction">

            <interceptor-ref  name="requestFilter"/>

            <result name="getrequest">jsp/account/login.jsp</result>
            <result name="success">jsp/index.jsp</result>
            <result name="error">jsp/account/login.jsp</result>
        </action>    

     </package>

</struts>

多くのメソッドをフィルタリングしたい場合は、インターセプターを使用することをお勧めします。1 つのメソッドのみをフィルタリングする場合は、最初のメソッドの方が適しています。

于 2014-07-14T13:46:46.373 に答える