Struts2 中使用 Servlet 的正确方法之一

  • 格式:doc
  • 大小:34.00 KB
  • 文档页数:4

如果我们在web.xml中配置的struts2的接收请求的路径为:

struts2

/*

是可以用struts2中使用servlet的,只是必须让struts2的action来转发到servlet的url-pattern中的地址就可以了。我简单举例下:

例如定义了一个servlet:

validate

com.xxx.util.GeneratorValidateChar

validate

/tu

如果你在页面中使用该servlet,则要用action转发到/tu

的路径/tu.

如你的页面里有个 元素来显示图片,如果使用肯定不行,你必须定义一个action 如

package com.xxx.actions;

public class GotchaGraphics implements Action {

public String execute(){

return SUCCESS;

}

}

然后在struts.xml中配置该Action

....

/tu

....

最终在那个中这么使用,这样就可以用servlet了。

[color=#FF0000]总结下:如果在web.xml使用 “/*” 处理请求,则servlet需要用一个action来转发该servlet自己的路径。[/color]

在同一个项目中间,如果既用到servlet又用了struts2的框架,运行项目时可能无法正常使用servlet解决方法如下:

该类是定义了一个过滤器,当既用到struts2又用到servlet时,

必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。 同时在web.xml中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:

redisp

filters.ReDispatcherFilter(该过滤器的类名)

includeServlets

所有配置的servlet名字

redisp

/*

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 includes = new ArrayList();

public void init(FilterConfig config) throws ServletException {

this.includes.addAll( Arrays.asList(config.getInitParameter("includeServlets").split(",")));

}

}