Struts2中如何得到请求来源地址

当jsp向action发送请求时,如何在action中得到该jsp的地址。
ServletActionContext.getRequest().getHeader("referer");
似乎不行

referer 太不可靠.
可以考虑用js构造一个当前url参数, 发给action

"action.do?ref="+window.location.href

ServletActionContext.getRequest().getRequestURI()。
如果jsp有参数用ServletActionContext.getRequest().getQueryString()取得;

然后在action中解析这个参数

HttpServletRequest request = ServletActionContext.getRequest();
System.out.println("URI=" + request.getRequestURI());// 返回/WebName/xxx.jsp
System.out.println("URL=" + request.getRequestURL());// 返回http://xxxxx/WebName/xxx.jsp
System.out.println("QueryString=" + request.getQueryString());// 返回aa=xxx&bb=ccc

struts2存储request response session机制和struts1一样,本质都是访问Servlet API。只是struts1 action的方法execute方法直接可以访问request和response,这显得冗余臃肿,并且耦合性高、难以单元测试。所以struts2的action去掉了直接访问request、response等。context即上下文,这是很多程序语言中一个概念。servlet context通俗的说是一个记录请求信息的对象,记录了请求的来源、去向、参数、地址等相关信息,所以request,respose都是和context相关的。action的属性的存取都是和context相关的。 stack即堆栈。记录着请求相关的一些参数和值等。