tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yuval Schwartz <yuval.schwa...@gmail.com>
Subject Re: Mapping servlet to non English url pattern
Date Tue, 08 Mar 2016 20:47:50 GMT
Thanks again, see below...

On Tue, Mar 8, 2016 at 10:20 PM, Christopher Schultz <
chris@christopherschultz.net> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Yuval,
>
> On 3/8/16 12:38 PM, Yuval Schwartz wrote:
> > Hello Christopher, thanks, responses below.
> >
> > On Tue, Mar 8, 2016 at 6:23 PM, Christopher Schultz <
> > chris@christopherschultz.net> wrote:
> >
> > Yuval,
> >
> > On 3/8/16 3:14 AM, Yuval Schwartz wrote:
> >>>> Tomcat version: 8.0.22 Jdk: 1.8.0_05 Server: Amazon Linux
> >>>>
> >>>> Hello,
> >>>>
> >>>> I want to map my servlet to a Hebrew url pattern.
> >
> > Hmm.
> >
> >>>> I tried placing the hebrew url pattern both in the
> >>>> "@webservlet" annotation (urlpatterns attribute) and in the
> >>>> the web.xml file. In both cases it doesn't work, it's as if
> >>>> there's nothing mapped to the url specified.
> >>>>
> >>>> I though to specify the URIEncoding parameter of the
> >>>> connector but saw that this defaults to "utf-8" in tomcat 8.
> >
> > Yes, it does.
> >
> > So you are trying to set the url-pattern for a servlet mapping?
> >
> > When you do it -- either using @WebServlet or <servlet-mapping> --
> > can you connect via JMX to observe the pattern that's been read
> > into the configuration? First, I'd want to make sure that the
> > Hebrew characters haven't been destroyed by the loading process of
> > the XML file or by the compiler, or even by Tomcat.
> >
> >
> >> Can you give me some direction on how I would do this? Maybe a
> >> little more detail on jmx? There could be encoding/decoding going
> >> on in the browser (firefox) and in all the elements you mentioned
> >> on the server side. Any way to see the final String that the
> >> server is using to match the Url pattern?
>
> Yeah, that's why I was suggesting using JMX, since Tomcat exposes all
> the configuration through it.
>
> Launch Tomcat, then fire-up jconsole (or VisualVM, or any other tool
> that contains a JMX client... both jconsole and VisualVM require that
> you go to the "plug-ins" configuration and install an
> easy-to-find-and-install plug-in for JMX) on the same machine (it's
> easiest this way).
>
> (I just checked, and VisualVM calls the plug-in
> "VisualVM-MBeans".)visualvisual
>
> Then, connect to the Tomcat instance and go to the BMeans tab.
>
> You'll find your servlet under /Catalina/Servlet/host/context/[servlet].
> ..
>
>
> Aw, crap. The mappings themselves aren't actually published via JMX. Hmm
> .
>
> >> I've done a lot of guessing and checking. For example, I used
> >> the URLEncoder to get the encoded form of my urls and put that in
> >> the url pattern.
>
> Good. So you have some set of Unicode escapes like \u0fe64 or whatever
> in the url-pattern string in your annotation?
>

No, I don't have any unicode escapes. I have (for the purpose of testing)
two strings, one is the string with the utf-8 characters, the other is an
encoded form of the url (which is encoded into a series of "%" followed by
two English letters).
Do you recommend having something else here?

Some more info:
I placed a filter on pattern "/*".
When my request with the UTF-8 url comes in, I call
httpRequest.getServletPath() and httpRequest.getRequestURI().
As expected, I get the UTF-8 version of the servlet path (ie: decoded) and
the ASCII request URI (ie: encoded) respectively.

This means that the request is reaching my server. It's the next step, the
step where the servlet path is mapped to my specified url pattern, that I
want to explore. But I don't know how to explore this. Where can I control
how the url pattern is matched with the incoming url?
Although I can only conceive two options for how the incoming url is
matched with the url pattern and I've tried both (either the UTF-8 version
of the request url is matched against the pattern or the encoded version is
matched against the pattern).


>
> >> Therefore, the xml loading process/compiler/tomcat/netbeans
> >> shouldn't do anything to change it (in the case where I encode
> >> the pattern), but the servlet still isn't found.
>
> Well, if you use annotations, the XML shouldn't be a problem at all,
> of course. But you said you were having problems using the
> web.xml-based configuration, too, right?
>
> When you type the URL into your browser, are you just typing the
> Hebrew right into the browser, or have you UTF/URL-escaped it first
> and then copy/pasted it into the browser (or, better yet, provide a
> link from another page that isn't giving you any problems).
>

I load the url into the href attribute of an "a" tag.
I have tried placing the regular hebrew into the attribute as well as
placing the encoded form of the hebrew
(ie: /package/[some hebrew] & /package/%D7%99%D7... respectively).
The latter is how wikipedia does it, inspect the elements to see for
yourself (
https://he.wikipedia.org/wiki/%D7%9E%D7%9C%D7%97%D7%9E%D7%AA_%D7%94%D7%A2%D7%A6%D7%9E%D7%90%D7%95%D7%AA)
(...the browser automatically encodes the link when I copy it :)


>
> You might want to make sure that Tomcat is delivering all responses in
> UTF-8, so that the browser (hopefully) decides to send the URL for the
> *next* page in UTF-8 instead of some weird ISO-8859-1 mess.
>
>
I place a filter that sets the response encoding to UTF-8, doesn't help.

Thanks a lot for your help and time.


> - -chris
> -----BEGIN PGP SIGNATURE-----
> Comment: GPGTools - http://gpgtools.org
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iEYEARECAAYFAlbfNBIACgkQ9CaO5/Lv0PAEswCcD9K3iwDplOASR81WtIMQZVFb
> 77YAnisxPAcn8/vuAU1PNDQgnvGuLVlo
> =LmWf
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

On Tue, Mar 8, 2016 at 10:20 PM, Christopher Schultz <
chris@christopherschultz.net> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Yuval,
>
> On 3/8/16 12:38 PM, Yuval Schwartz wrote:
> > Hello Christopher, thanks, responses below.
> >
> > On Tue, Mar 8, 2016 at 6:23 PM, Christopher Schultz <
> > chris@christopherschultz.net> wrote:
> >
> > Yuval,
> >
> > On 3/8/16 3:14 AM, Yuval Schwartz wrote:
> >>>> Tomcat version: 8.0.22 Jdk: 1.8.0_05 Server: Amazon Linux
> >>>>
> >>>> Hello,
> >>>>
> >>>> I want to map my servlet to a Hebrew url pattern.
> >
> > Hmm.
> >
> >>>> I tried placing the hebrew url pattern both in the
> >>>> "@webservlet" annotation (urlpatterns attribute) and in the
> >>>> the web.xml file. In both cases it doesn't work, it's as if
> >>>> there's nothing mapped to the url specified.
> >>>>
> >>>> I though to specify the URIEncoding parameter of the
> >>>> connector but saw that this defaults to "utf-8" in tomcat 8.
> >
> > Yes, it does.
> >
> > So you are trying to set the url-pattern for a servlet mapping?
> >
> > When you do it -- either using @WebServlet or <servlet-mapping> --
> > can you connect via JMX to observe the pattern that's been read
> > into the configuration? First, I'd want to make sure that the
> > Hebrew characters haven't been destroyed by the loading process of
> > the XML file or by the compiler, or even by Tomcat.
> >
> >
> >> Can you give me some direction on how I would do this? Maybe a
> >> little more detail on jmx? There could be encoding/decoding going
> >> on in the browser (firefox) and in all the elements you mentioned
> >> on the server side. Any way to see the final String that the
> >> server is using to match the Url pattern?
>
> Yeah, that's why I was suggesting using JMX, since Tomcat exposes all
> the configuration through it.
>
> Launch Tomcat, then fire-up jconsole (or VisualVM, or any other tool
> that contains a JMX client... both jconsole and VisualVM require that
> you go to the "plug-ins" configuration and install an
> easy-to-find-and-install plug-in for JMX) on the same machine (it's
> easiest this way).
>
> (I just checked, and VisualVM calls the plug-in
> "VisualVM-MBeans".)visualvisual
>
> Then, connect to the Tomcat instance and go to the BMeans tab.
>
> You'll find your servlet under /Catalina/Servlet/host/context/[servlet].
> ..
>
>
> Aw, crap. The mappings themselves aren't actually published via JMX. Hmm
> .
>
> >> I've done a lot of guessing and checking. For example, I used
> >> the URLEncoder to get the encoded form of my urls and put that in
> >> the url pattern.
>
> Good. So you have some set of Unicode escapes like \u0fe64 or whatever
> in the url-pattern string in your annotation?
>
> >> Therefore, the xml loading process/compiler/tomcat/netbeans
> >> shouldn't do anything to change it (in the case where I encode
> >> the pattern), but the servlet still isn't found.
>
> Well, if you use annotations, the XML shouldn't be a problem at all,
> of course. But you said you were having problems using the
> web.xml-based configuration, too, right?
>
> When you type the URL into your browser, are you just typing the
> Hebrew right into the browser, or have you UTF/URL-escaped it first
> and then copy/pasted it into the browser (or, better yet, provide a
> link from another page that isn't giving you any problems).
>
> You might want to make sure that Tomcat is delivering all responses in
> UTF-8, so that the browser (hopefully) decides to send the URL for the
> *next* page in UTF-8 instead of some weird ISO-8859-1 mess.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Comment: GPGTools - http://gpgtools.org
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iEYEARECAAYFAlbfNBIACgkQ9CaO5/Lv0PAEswCcD9K3iwDplOASR81WtIMQZVFb
> 77YAnisxPAcn8/vuAU1PNDQgnvGuLVlo
> =LmWf
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message