GWT Eclipse:使用其他项目中的类导致“服务器类...”无法在Web应用程序中找到,但在系统类路径

时间:2015-06-10 09:36:15

标签: java eclipse gwt

我是GWT开发新手。我开始维护GWT(2.7)应用程序并需要修改日志记录。所以我决定使用MDC(MappedDiagnosticContext)并编写一个servlet Filter来将用户名放在MDC中,如下所示:

public class MDCServletFilter implements Filter {

    /* (non-Javadoc)
     * @see javax.servlet.Filter#destroy()
     */
    public void destroy() {}

    /* (non-Javadoc)
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
    public void doFilter(ServletRequest aRequest, ServletResponse aResponse, FilterChain aFilterChain)
            throws IOException, ServletException {
        try {
            // get the session from the request ...
            HttpServletRequest tempRequest = (HttpServletRequest)aRequest;
            HttpSession tempSession = tempRequest.getSession();
            // get the currently logged in user ...
            String tempUser = (String)tempSession.getAttribute(Authorizer.USER_KEY);
            // if user is logged in, put the name into the MDC ...
            if (tempUser != null && tempUser.trim().length() > 0) {
                MDC.put(Authorizer.USER_KEY, tempUser);
            }
            // at least call the other filter ..
            aFilterChain.doFilter(tempRequest, aResponse);
        } finally {
            // finally remove the user name from the MDC ...
            MDC.remove(Authorizer.USER_KEY);
        }
    }

    /* (non-Javadoc)
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    public void init(FilterConfig arg0) throws ServletException {}

}

web.xml

<web-app>
    <!-- MDC Filter -->
    <filter>
        <filter-name>MDCServletFilter</filter-name>
        <filter-class>
            foo.bar.filter.MDCServletFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MDCServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- MDC Filter END -->

现在,当我在日食(6月)启动应用程序时,我收到警告:

[WARN] Server class 'foo.bar.filter.MDCServletFilter' could not be found in the web app, but was found on the system classpath

过滤器类驻留在“通用”项目中,而不是在GWT项目中,因为我们有更多的GWT项目可以使用一些常见的类。如果我将过滤器类放入GWT项目中,则不会发生警告。

那么,我如何设置GWT项目以使用其他项目的类而没有任何警告?

提前致谢!

2 个答案:

答案 0 :(得分:0)

详细信息取决于您的构建工具和/或IDE,但目标是将所有服务器端类放在webapp WEB-INF中(在WEB-INF/classes中,这可能是WEB-INF/lib您的GWT项目的案例,或 $('#sa_drag_block li').draggable({ helper: "clone", }); $('#sa_drop_block').droppable({ drop: function (e, ui) { $(ui.draggable).clone().appendTo($(this)); } }); 中的JAR。

在将webapp部署到servlet容器时,无论如何都是必要的(除非你打算将你的&#34; common&#34;项目部署为servlet容器中的共享库)。

答案 1 :(得分:0)

我通过将公共项目的源文件夹链接到GWT项目来解决它:

GWT项目的属性 - &gt; JavaBuild路径 - &gt; “链接来源......” - &gt;

将“链接文件夹位置:”设置为“WORKSPACE_LOC / someSecondProject / src”,然后将“文件夹名称:”从“src”重命名为例如“CommonGWT.src”。

此设置将其他项目的所有源代码编译为GWT项目的“WEB-INF / classes”,并且Eclipse GWT已满足。