Friday, May 16, 2008

Parametry wysyłane GETem, polskie znaki i UTF-8

Ostatnio miałem problem w pracy z ukochanymi polskimi znakami, a konkretniej z wysyłaniem ich metodą GET. W projekcie kodowanie to UTF-8 przy przekazywaniu parametrów z polskim kodowaniem (zakodowanych oczywiscie do UTF-8)  w request-cie przychodziły krzaki.

Problemem okazało się, że przesyłanie znaków zakodowanych GETem niewiele daje bo serwer aplikacyjny ma w swojej konfiguracji zapiane w jakim kodowaniu są requesty i tak je przetwarza, zwykle jest to Latin-1.

Co należy zrobić ?
W przypadku JBoss'a:

W pliku %jboss-home%\server\%konfiguracja%\deploy\jboss-web.deployer\server.xml należy dodać atrybut URIEncoding="UTF-8" elementu Connector (dla portu 8080)

W przypadku gdy ruch do JBossa jest kierowany przez Apacha za pomocą mod_jk konieczne jest dodanie w server.xml do Connectora atrybutu URIEncoding="UTF-8" (tym razem dla portu 8009). I powinno śmigać

A tu troche literatury na temat kodowania polskich znaków:
http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/

http://www.warski.org/blog/?p=4

http://confluence.atlassian.com/display/DOC/Configuring+Tomcat's+URI+encoding

A z takich ciekawostek to kiedyś miałem też problem z PostgreSQL 8.1 (ale w innych wersjach było to samo) ponieważ baza była zainstalowana z innym niż UTF-8 domyślnym kodowaniem.
Problem był z polskimi znakami w bazie mającej kodowanie ustawione na UTF-8. Wyszystko było w porządku do momentu kiedy wywołało się w SQL funkcji tolower , toupper. Polskie znaki nie były traktowane wtedy jako litery tylko jako znaki specjalne i tym samym nie były "zmniejszane" i "zwiększane". Zainstalowanie bazy z domyślnym kodowaniem UTF-8 pomogło.

Wednesday, April 30, 2008

Wielomodułowy projekt w Maven 2

Oto prosty sposób jak zrobić w Maven 2 projekt wielomodułowy:

1. Z wiersza poleceń wykonaj:
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=mojeIdGrupy -DartifactId=mojArtefakt -DpackageName=  -Dversion=1.0

W wyniku wykonania tego polecenia zostanie utworzony katalog o nazwie "mojArtefakt" a w nim plik pom.xml oraz inne rzeczy które można (należy)  skasować.

2. W pliku pom.xml  "packaging" zmieniamy z jar na pom.

3. W katalogu mojArtefaktId wywołujemy polecenie:

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=mojeIdGrupy.myMultiProjectArtifactId -DartifactId=mojModul -DpackageName=mojeIdGrupy.myMultiProjectArtifactId.mojModul -Dversion=1.0

Tara!!!! i gotowe. Jeżeli chcemy mieć więcej modułów powielamy czynność w punkcie 3.

Ciekawszy i bez wątpienia pełniejszy opis problemu na:
Scriptalandia

The beginnig

Tak więc oto  mój blog... !
Będzie, a przynajmniej takie są założenia ma być o Javie i okolicach oraz IT.
Myślę, że zagadnienia poruszane tutaj nie będą porażały swoją oryginalnością i wyszukaniem, raczej ma być to chleb powszednie inżyniera oprogramowania.
Mam nadzieje, że nie będe jedynym czytającym :)