GSPページのエンコードの問題を解決する(Grailsなし)

ある時点で、比較的重いGrails MVCフレームワークを使用せずに、PHPをWeb用のGroovyに完全に100%置き換えることができないという顕著な問題が1つありました。

これは、* .gspページ(Groovy Server Pages)に適用されます。これは、GroovyまたはJava、または元の言語の任意のコードを含む<%...%>の形式のHTMLページです。 JavaServer Pages)。



PHPのまったく同じ機能がinserts <?...?>によって実装されます(さらに、PHPの場合、クラスまたはビジネスロジックを実装する場合でも、そのようなブロックの存在は必須です。そのようなブロックの後に通常、不可視のスペースまたは改行がある場合、問題につながる可能性があります)。

グルーブサイトでは、「 GSPはスタンドアロンモジュールとして維持されていません。しかし、Grailsでフォークされ、再統合されています。」 しかし、それでも、グルーブサーブレットのように、gspページはGrailsなしで動作し、グルーブをアプリケーションに接続するだけです。

問題は、これらのgspページでロシア語のテキストが「曲がった髪」に変わったことでした。 「実際の」タイプとスクリプトタイプの両方のグルーブサーブレットでは、これは観察されませんでした。

科学的な突刺の方法により、ソースgspがシステムのデフォルトのエンコーディング(Windowsの場合はcp1251など)に転送された場合、問題は解決されることが判明しました(さらに、ページはすでにUTF-8に出力されています)。

これは純粋なヒントです。このようなページの解析を担当するサーブレットgroovy.servlet.TemplateServlet.javaのソースに移動し、そこで行を見つけます。

private static final String GROOVY_SOURCE_ENCODING = "groovy.source.encoding"; 


また、このパラメーターがReaderのインスタンスの作成にどのように影響するかを示します。

アプリケーションのweb.xmlで値「UTF-8」を使用してパラメータをサーブレットに書き込むと、問題は解決します。

web.xmlアプリケーションの全文。任意の* .groovyおよび* .gspファイルがすべてサーブレットにコンパイルされ、キリル文字が正しく出力されます。

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>GroovyServlet</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GroovyServlet</servlet-name> <url-pattern>*.groovy</url-pattern> <url-pattern>*.grv</url-pattern> </servlet-mapping> <servlet> <servlet-name>GSP</servlet-name> <servlet-class>groovy.servlet.TemplateServlet</servlet-class> <init-param> <param-name>groovy.source.encoding</param-name> <param-value>UTF-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>GSP</servlet-name> <url-pattern>*.gsp</url-pattern> </servlet-mapping> </web-app> 


また、URLで「グロー」する長い.groovy拡張子を、たとえば.grv(または.php-わずか4 fun)などの任意の短い拡張子に置き換える方法も示します。

GroovyでWebサイト、Webアプリケーション、フレームワークを迅速かつ簡単に作成できるようになりました。サーバーにJavaとTomcatをインストールするだけで済みます。

Source: https://habr.com/ru/post/J129285/


All Articles