作者:三八依依2010 | 来源:互联网 | 2023-09-25 13:04
如果我们在web.xml中配置的struts2的接收请求的路径为:struts2*是可以用struts2中使用servlet的,只是必须让struts2的action来转发到ser
如果我们在web.xml中配置的struts2的接收请求的路径为:
struts2
/*
是可以用struts2中使用servlet的,只是必须让struts2的action来转发到servlet的url-pattern中的地址就可以了。我们简单的举例如下:
例如定义了一个servlet:
Snippet
com.social.util.Snippet
Snippet
/Snippet
如果你在页面中使用该servlet,则要用action转发到/Snippet的路径/Snippet.
如你的页面里有个元素来显示图片,使用是肯定不行的,你必须定义一个action 如:
package com.social.action;
import com.opensymphony.xwork2.Action;
public class GetImg implements Action{
public String execute(){
return SUCCESS;
}
}
然后在该struts2中配置该Action
/Snippet
最终那个img中这么使用这样就可以用servlet了。
在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用
servlet,解决办法如下:
该类是定义了一个过滤器,当既用到struts2有用到servlet时,
必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。 同时在web.xml
中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:
redisp
filters.ReDispatcherFilter(该过滤器的类名)
includeServlets
所有配置的servlet名字
redisp
/*
package filters;
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=
target.lastIndexOf("?")>0?target.substring(target.lastIndexOf("/")+1,target.lastIndexOf("?")-target
.lastIndexOf("/")):target.substring(target.lastIndexOf("/")+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(",")));
}
}
最终web.xml中的配置如下:
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
Snippet
com.social.util.Snippet
Snippet
/Snippet
redisp
filters.ReDispatcherFilter
includeServlets
Snippet
redisp
/*
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
index.jsp
servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面,,
servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面