论坛首页 Java企业应用论坛

怎样获取action的name或者method

浏览 7800 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-14  
过滤器不能处理吗?一定要用struts拦截器。如果没有用框架呢?
0 请登录后投票
   发表时间:2012-12-14  
yjl6691088 写道
过滤器不能处理吗?一定要用struts拦截器。如果没有用框架呢?

既然采用了struts2,为什么不直接采用它一套式的解决方案呢?而且可以肯定的是,写出的代码会更加简洁。如果我是后来的人看到有人用自带的filter解决了,我会在想,为什么之前这个人都用了struts2的框架,为什么不直接使用它自带的拦截器呢?是你,你不觉得奇怪吗?
0 请登录后投票
   发表时间:2012-12-14  
你的过滤器放的位置不对,应该放到StrutsPrepareFilter过滤器的后面,StrutsExecuteFilter过滤器的前面。这样应该就可以取到ActionMapping。

<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>你自定义的过滤器</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
0 请登录后投票
   发表时间:2012-12-15  
lz,明显对struts停留在用的层次上,对struts思想知道很少啊
0 请登录后投票
   发表时间:2012-12-16  
jyjava 写道
lz,明显对struts停留在用的层次上,对struts思想知道很少啊

正解,lz确实只会用,而不懂原理,建议读一读Struts源码,加深对其理解。
0 请登录后投票
   发表时间:2012-12-17   最后修改:2012-12-17
YLR_Really 写道
谢谢大家,我已经获取到我需要的东西了,用我这种方式可以获取到每个请求的路径,虽然后缀是“.html”,但后缀前面的名字和struts.xml文件里面的name属性是对应的,而且已经可以把每个请求页面里面的所有属性都获取到。但是还有几个小问题:
1.userId我只能在登录的时候获得一次,后面就获取不到了,这是为什么?
2.我现在是在用户登录,第一次获取到userId的时候,用map来保存sessionId和userId,然后每次操作我就通过sessionId去map里面找userId,map可以保存多少条记录?我想在session失效的时候从map里面把对应的记录删除掉,请问应该怎么处理?

package cn.com.faqm.tool;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class OpFilter implements Filter {

	protected Map<String, String> userSessionIdMap = new HashMap<String, String>();

	public void init(FilterConfig filterConfig) throws ServletException {
	}

		public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterchain) throws IOException, ServletException {

		HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
		HttpSession session = httpRequest.getSession();
		
		//actId为空时不进行处理
		if (servletRequest.getParameter("actId") != null && !servletRequest.getParameter("actId").equals("")) {
			String reqPath = httpRequest.getServletPath();
			//获取所有请求路径,只对".html"结尾的请求进行处理
			if(reqPath.endsWith(".html")){
				String userId = httpRequest.getParameter("userId");
				String sessionId = session.getId();
				//获取所有页面上传入的属性
				Enumeration en = servletRequest.getParameterNames();
				StringBuffer params = new StringBuffer();
				String paramName = "";
				String paramValue = "";
				while(en.hasMoreElements()){	//遍历所有属性,对有值的进行组装
					paramName = en.nextElement().toString();
					paramValue = servletRequest.getParameter(paramName);
					if(!paramName.equals("start")&&!paramName.equals("persize")){	//排除用于分页的两个属性
						if(paramValue!=null&&!paramValue.equals("")){
							 params.append("参数").append(paramName).append("->").append(paramValue).append(" - ");
						 }
					}
				}
				
				if(userId!=null&&!userId.equals("")){	//登录时才能获取到userId
					userSessionIdMap.put(sessionId, userId);	//保存对应的sessionId和userId
//					SysLogger.log(userId, "用户"+userId+"登录系统", params.toString().substring(0, params.toString().length()-3), sessionId);
				}else{
					//登录以后获取不到userId,通过sessionId从userSessionIdMap中获取userId
					if(userSessionIdMap.get(sessionId)!=null && !userSessionIdMap.get(sessionId).equals("")){
//						SysLogger.log(userSessionIdMap.get(sessionId), "发起请求->"+reqPath, params.toString().substring(0, params.toString().length()-3), sessionId);
					}
				}
			}
		}
		
		filterchain.doFilter(servletRequest, servletResponse);
	}

	public void destroy() {
	}
}

为什么非要在在过滤器上做手脚呢,建议可以是试试在过滤器下单独封装一个方法选择的类来实现,你这样做现在出现的问题很可能是session过期导致的
0 请登录后投票
   发表时间:2012-12-19  
yjl6691088 写道
过滤器不能处理吗?一定要用struts拦截器。如果没有用框架呢?



你为什么不每天走路上班而要座公交车呢?
0 请登录后投票
   发表时间:2012-12-21  
henghengdh 写道
yjl6691088 写道
过滤器不能处理吗?一定要用struts拦截器。如果没有用框架呢?



你为什么不每天走路上班而要座公交车呢?

今天公车停摆了 懂不? 在不走就迟到了
0 请登录后投票
   发表时间:2012-12-21  
freezingsky 写道
yjl6691088 写道
过滤器不能处理吗?一定要用struts拦截器。如果没有用框架呢?

既然采用了struts2,为什么不直接采用它一套式的解决方案呢?而且可以肯定的是,写出的代码会更加简洁。如果我是后来的人看到有人用自带的filter解决了,我会在想,为什么之前这个人都用了struts2的框架,为什么不直接使用它自带的拦截器呢?是你,你不觉得奇怪吗?

为了保持风格统一 后期维护的方便完全同意你的看法 可是lz现在不是用struts2搞不定了么?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics