最近在弄 在线word编辑的一个东西 用的别人的控件. 其中有一个 OfficeServer.jsp 下面是我的web.xml 配置 里面配置里 *.jsp 过滤所有jsp 页面 但是我 OfficeServer.jsp这个页面不需要过滤 因为一过滤 它里面的 的 request对象 传值 会变成 struts2 里面的org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
而我需要的是
org.apache.catalina.connector.RequestFacade 这个
<!-- 定义Struts2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
</filter-mapping>
问题就是 只要 不过滤 OfficeServer.jsp 这个页面
在filter-mapping里面配置 很多 包下面的jsp 这样是最坏的打算 还有其他的么??
而我需要的是
org.apache.catalina.connector.RequestFacade 这个
<!-- 定义Struts2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
</filter-mapping>
问题就是 只要 不过滤 OfficeServer.jsp 这个页面
在filter-mapping里面配置 很多 包下面的jsp 这样是最坏的打算 还有其他的么??
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.ng.PrepareOperations;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.regex.Pattern;/**
* Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
protected PrepareOperations prepare;
protected ExecuteOperations execute;
protected List<Pattern> excludedPatterns = null; public void init(FilterConfig filterConfig) throws ServletException {
InitOperations init = new InitOperations();
try {
FilterHostConfig config = new FilterHostConfig(filterConfig);
init.initLogging(config);
Dispatcher dispatcher = init.initDispatcher(config);
init.initStaticContentLoader(config, dispatcher); prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
this.excludedPatterns = init.buildExcludedPatternsList(dispatcher); postInit(dispatcher, filterConfig);
} finally {
init.cleanup();
} } /**
* Callback for post initialization
*/
protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) {
} public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res; try {
prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
chain.doFilter(request, response);
} else {
request = prepare.wrapRequest(request);
ActionMapping mapping = prepare.findActionMapping(request, response, true);
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(request, response);
if (!handled) {
chain.doFilter(request, response);
}
} else {
execute.executeAction(request, response, mapping);
}
}
} finally {
prepare.cleanupRequest(request);
}
} public void destroy() {
prepare.cleanupDispatcher();
}
}
<constant name="struts.action.excludePattern" value="OfficeServer.*"/>
或 <constant name="struts.action.excludePattern" value="/oa/OfficeServer.jsp"/>
或 <constant name="struts.action.excludePattern" value="/oa/*"/>还有struts属性文件里面配置
struts.action.excludePattern=/oa/OfficeServer.jsp
等一下 都不行我现在只知道 在web.xml里面吧 <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>去掉才行的通
是的,你拦截了所有的jsp文件,你为什么要这样做?用struts2的话还是只拦截action的比较好要不就重写下过滤器
把那个类的源码改下就可以了,然后在web.xml中添加自己的过滤器
我自己写一个过滤器 拦截那个页面 <filter>
<filter-name>officeServer</filter-name>
<filter-class>com.zds.oa.filter.OfficeServerFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>officeServer</filter-name>
<url-pattern>/oa/OfficeServer.jsp</url-pattern>
</filter-mapping>已经进入过滤器了 但是怎么跳过 其他过滤器???
chain.doFilter(request, response); 过后还是去struts 里面去了
在 oFilter
里面 request.getRequestDispatcher("/oa/OfficeServer.jsp").forward(request, response); 谢谢各位