Hi Sebastien,
Thank you for your reply.
I think that maybe your last reply is concerned about the following.
---
if (appliPath != null && appliPath.endsWith(File.pathSeparator)) {
appliPath = appliPath + File.pathSeparator;
}
---
I see...
But, I think that definately, the following code is not correct.
---
mapping = urlPattern.substring(urlPattern.indexOf(sa.getServletPath()));
---
After you will review it, please let me know. :)
Thanks!
--
Bongjae Chang
----- Original Message -----
From: Survivant 00
To: dev_at_grizzly.dev.java.net
Sent: Thursday, August 27, 2009 6:59 PM
Subject: Re: servlet-mapping didn't work well in GrizzlyWebServerDeployer
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