dev@grizzly.java.net

Re: servlet-mapping didn't work well in GrizzlyWebServerDeployer

From: Survivant 00 <survivant00_at_gmail.com>
Date: Thu, 27 Aug 2009 05:59:21 -0400

it's to early in the morning to think about it.. will come back to you
later.

but here what's in the help

-a, --application=[path]* Application(s) path(s).

                              Application(s) deployed can be :
                              Servlet(s), war(s) and expanded war folder(s).
                              To deploy multiple applications
                              use File.pathSeparator

                              Example : -a /app.war:/servlet/web.xml:/warfolder/




2009/8/27 Bongjae Chang <carryel_at_korea.com>

> Hi,
>
> I deployed an web application with using GrizzlyWebServerDeploy, I found
> that the Servlet is not served because of wrong path mapping.
>
> Here is the example of web.xml
> ---
> <web-app>
> <servlet>
> <servlet-name>TestServlet</servlet-name>
> <servlet-class>my.test.TestServlet</servlet-class>
> </servlet>
> <servlet-mapping>
> <servlet-name>TestServlet</servlet-name>
> <url-pattern>/test/*</url-pattern>
> </servlet-mapping>
> ...
> </web-app>
> ---
>
> Assuming that context path is "/example",
>
> When I requested http://localhost:port/examples/test/abc, I expected that
> the TestServlet was serviced.
>
> When I debugged, I found some strange codes.
>
> In GrizzlyWebServerDeploy.java
> ---
> public String[] getAlias(ServletAdapter sa, Collection<String> aliases) {
> ...
> for( String urlPattern : aliases) {
> String mapping = "";
> if (!sa.getServletPath().equals(urlPattern) &&
> urlPattern.indexOf(sa.getServletPath()) > -1) {
> *mapping =
> urlPattern.substring(urlPattern.indexOf(sa.getServletPath()));*
> }
> String aliasTmp = sa.getContextPath() + sa.getServletPath() +
> mapping;
> }
> ...
> }
>
> When I deployed the web app, sa.getServletPath() is equal to "/test" and
> urlPattern is equal to "/test/*".
>
> Then mapping result is equal to "/test/*" , so aliasTmp result is equal to
> "/example/test/test/*".
>
> But I think that aliasTmp should become to be "/examples/test/*".
>
> When I edited the mapping code like this experimentally,
>
> ---
> *mapping = urlPattern.subString(urlPattern.indexOf(sa.getServletPath()) +
> sa.getServletPath().length());*
> ---
>
> I could know that my test servlet is served well.
>
> Could you please review this?
>
>
> And I saw another strange code. This is trivial.
>
> In GrizzlyWebServerDeployer.java
> ---
> public String appendWarContentToClassPath(String appliPath) throw ... {
> ...
> * if (appliPath != null && appliPath.endsWith(File.pathSeparator)) {*
> * appliPath = appliPath + File.pathSeparator;*
> * }*
> }
> ---
> File.pathSeparator is equal to ";" in Windows.
>
> Perhaps you mean File.separator "/" or "\". Is it right?
>
> Then, the proposed patch is here.
> ---
> public String appendWarContentToClassPath(String appliPath) throw ... {
> ...
> if (appliPath != null && *!*appliPath.endsWith(File.*separator*)) {
> appliPath = appliPath + File.*separator*;
> }
> }
> ---
>
> Is also Right? But, I am not sure. :)
>
> Thanks!
>
> --
> Bongjae Chang
>