Struts2 中使用 Servlet 的正确方法之一
- 格式:doc
- 大小:34.00 KB
- 文档页数:4
如果我们在web.xml中配置的struts2的接收请求的路径为:
是可以用struts2中使用servlet的,只是必须让struts2的action来转发到servlet的url-pattern中的地址就可以了。我简单举例下:
例如定义了一个servlet:
如果你在页面中使用该servlet,则要用action转发到
的路径/tu.
如你的页面里有个 元素来显示图片,如果使用
肯定不行,你必须定义一个action 如
package com.xxx.actions;
public class GotchaGraphics implements Action {
public String execute(){
return SUCCESS;
}
}
然后在struts.xml中配置该Action
....
....
最终在那个中这么使用
,这样就可以用servlet了。
[color=#FF0000]总结下:如果在web.xml使用 “/*” 处理请求,则servlet需要用一个action来转发该servlet自己的路径。[/color]
在同一个项目中间,如果既用到servlet又用了struts2的框架,运行项目时可能无法正常使用servlet解决方法如下:
该类是定义了一个过滤器,当既用到struts2又用到servlet时,
必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。 同时在web.xml中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class ReDispatcherFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest)req;
String target = request.getRequestURI(); target =
stIndexOf("?")>0?target.substring(stIndexOf("/")+1,stIndexOf("?")stIndexOf("/")):target.substring(stIndexOf("/")+1);
System.out.println(target);
if(this.includes.contains(target))
{
RequestDispatcher rdsp = request.getRequestDispatcher(target);
System.out.println("go..............."+rdsp);
rdsp.forward(req, resp);
}
else
chain.doFilter(req, resp);
}
private ArrayList
public void init(FilterConfig config) throws ServletException {
this.includes.addAll( Arrays.asList(config.getInitParameter("includeServlets").split(",")));
}
}