举个例子:正常请求应该是:http://localhost:8080/xxxx/book.do?method=bookList但,如果用户非法操作,将上面的URL截掉后面一部分,成为:
http://localhost:8080/xxxx/book.do?method=bookLi  也就是st被截掉就会报错:java.lang.NoSuchMethodException
请教:该怎样处理这样的问题呢?

解决方案 »

  1.   

    用户怎么可能直接通过URL来访问的程序?不明白……
      

  2.   

    两种处理方式:
    1 在反射调用方法的地方,用try{} catch(){}把当前异常捕获。
    2.写一个过滤器,截获当前访问路径的method方法,在数据库中做一个action与方法的对照表,将截获当前访问路径的method方法在数据库中查找,是否存在,存在则跳转到指定路径,否则,提示
      

  3.   

    struts可以配置全局的异常转发,你就在其中捕获java.lang.NoSuchMethodException 
      

  4.   

    struts的配置文件struts-config.xml中有个全局异常处理配置:
    <global-exceptions>
        <exception key="error" type="java.lang.NoSuchMethodException"  
            path="/error.jsp" scope="request">  
        </exception>
    </global-exceptions>  在资源文件下(扩展名为properties)下配置异常错误信息:
    java.lang.NoSuchMethodException=错误的请求
    在JSP文件中可以从request对象里拿到这个资源文件消息,并友好地呈现出来,其它的异常解决也类似。
      

  5.   

    棒哦..我刚想说在web.xml里配置呢 还好话到嘴边没有说出口..
      

  6.   


      <global-exceptions>写在struts-config.xml的什么位置?
      

  7.   


    什么位置都可以...
    <!-- 固定资产购置单记录审批后发送 -->
    <action path="/oa/supplies/fixed/fixedAppApproveSend"
    parameter="approveSend" name="fixedAppForm" scope="request"
    type="com.bluefish.oa.supplies.fixed.action.FixedAppAction">
    </action> <!-- 查看固定资产购置单记录历史 -->
    <action path="/oa/supplies/fixed/fixedAppHistory"
    parameter="history" name="fixedAppForm" scope="request"
    type="com.bluefish.oa.supplies.fixed.action.FixedAppAction">
    <forward name="success"
    path="/oa/supplies/fixed/fixedAppEdit.jsp" />
    </action>
    <!-- ************************ 固定资产购置审批 end *********************** -->
    </action-mappings>
    <message-resources parameter="ApplicationResources" />
    <global-exceptions>
    <exception key="" type=""></exception>
    </global-exceptions>
      

  8.   


    但是这样,后台还是会报错啊,怎么样捕获后台抛出的NoSuchMethodException的这个异常?即在后台打印出我想要的处理,求高人指点