首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

怎的获取action的name或者method

2012-12-25 
怎样获取action的name或者method我想实现一个功能,就是在页面每次发起请求的时候,我通过过滤器来获取这个a

怎样获取action的name或者method
我想实现一个功能,就是在页面每次发起请求的时候,我通过过滤器来获取这个action的name或者method。 

<action name="queryh" class="cn.com.norm.web.action.QueryAction" method="queryByHttp">
<result type="json" />
</action>


如果我在具体执行的方法中加入下面代码,是可以正确获取到这个属性的。 
String getName = ServletActionContext.getActionMapping().getName();
System.out.println("-----getName----->>"+getName);

输出的就是上面配置文件中name的值:“ queryhp ” 。
但是我把上面这个代码写到过滤器中,就不行了,会报错。
package cn.com.faqm.tool;

import java.io.IOException;

import javax.servlet.*;

import org.apache.struts2.ServletActionContext;

public class OpFilter implements Filter {

        protected FilterConfig filterConfig;

        public void init(FilterConfig filterConfig) throws ServletException {
                this.filterConfig = filterConfig;
        }

        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterchain) throws IOException, ServletException {
                if(servletRequest.getParameter("actId") != null && !servletRequest.getParameter("actId").equals("")){
                        String getName = ServletActionContext.getActionMapping().getName();
                        System.out.println("-----getName----->>"+getName);
                }
                
                        
                filterchain.doFilter(servletRequest, servletResponse);
        }

        public void destroy() {
                this.filterConfig = null;
        }
}

错误信息如下:
2012-12-12 15:00:19 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
        at org.apache.struts2.ServletActionContext.getActionMapping(ServletActionContext.java:85)
        at cn.com.faqm.tool.OpFilter.doFilter(OpFilter.java:19)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)


        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)


这个问题在网上找了下,有类似问题,说是servlet或jsp中,重复调用response的 getOutputStream(),response.getWriter()方法。 
请教一下,如果是上面这种说法导致的问题,应该怎么避免? 
或者有没有别的方法可以在每次发起请求的时候都把action的name或者method获取到?
[解决办法]
一次请求,一次会话。
[解决办法]
String getName = ServletActionContext.getActionContext((HttpServletRequest)servletRequest).getName(); 这样试试
[解决办法]
request.getRequestURI();用这个获取请求的URL 然后根据你请求的URL 截取判断你请求的是哪个action和method.
[解决办法]
执行的方法中可行,因为它知道Action是什么,因此能得到ActionMapping,在过滤器中无法得到,看图可能就清楚了:

怎的获取action的name或者method

4楼方法应该可行。

http://blog.csdn.net/panfanglin/article/details/7690218
[解决办法]
看楼主的配置应该url只有name 而没有method 
如果楼主把method去掉路径换成  将methodName写到url里面就可以很轻松获得了,

如4楼代码!
[解决办法]
OpFilter继承HttpServlet看看
public class OpFilter extends HttpServlet implements Filter 
[解决办法]
请使用拦截器

[解决办法]
struts的架构中,过滤器的的位置注定了它不可能知道ActionMapping的东西,所以只有换种方式去处理吧。比如:url上添加action的名字,然后通过获取url来获取action的名字
[解决办法]
使用拦截器。。

热点排行