1. 程式人生 > >關於SSH與百度ueditor整合的時候出現的問題

關於SSH與百度ueditor整合的時候出現的問題

  • ueditor的元件被struts2攔截下來導致ueditor不可用
  1. 檢查專案中是否使用了urlrewrite來重寫url,這會導致ueditor資源被重定向,導致不可用
  2. struts2本身的過濾器也會過濾ueditor的部分元件


通過瀏覽器除錯可以看到ueditor需要的元件會報404錯誤,然後根據所報錯的元件定位是被誰攔截了

第一種情況,如果是urlrewrite則修改轉發規則,或直接註釋掉。 第二種情況,需要重寫自定義的過濾器,方法如下:

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;

public class RequestParseWrapper extends JakartaMultiPartRequest {
    public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException
    {

    }
}



struts中加上這個bean
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
      name="myRequestParser" class="net.jeeshop.core.util.RequestParseWrapper"
      scope="default" optional="true" />
    <constant name="struts.multipart.handler" value="myRequestParser" />





import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.StrutsRequestWrapper;

public class UeditorFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String url = request.getRequestURI();
        if (decideURI(url)) {
            chain.doFilter(new StrutsRequestWrapper((HttpServletRequest) req), res);
        }else{
            chain.doFilter(req, res);
        }
    }

    @Override
    public void destroy() {

    }

    private boolean decideURI(String url){
        if(url.endsWith("controller.jsp")) {  // 主要是ueditor的這個請求被struts2攔截了,自定義過濾器中將本請求放行即可正常使用ueditor
            return true;
        }
        return false;
    }
}



在web.xml中struts2的過濾器前加上這個自定義的過濾器即可
<filter>
		<filter-name>ueditorFilter</filter-name>
		<filter-class>
			net.jeeshop.core.util.UeditorFilter
		</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>ueditorFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>




其實還有一個問題會導致ueditor不可用,就是jar包衝突,解決辦法就是以你下載的ueditor裡面的jar包版本為主,其他版本的jar包刪除即可。