2012年6月20日水曜日

Pluto2.0の日本語文字化け対策

ApachePluto2.0をデフォルトのまま使うと、こんな文字化けが発生する。
  1. JSPやポートレットの日本語が文字化けする。
  2. 画面からPostした日本語が文字化けする。
で、その対策を書いておく。

対策としては、普通のWEBアプリ同様エンコードをUTF-8に統一すればOK。
今回、その対象となるのが、Plutoのフロントエンドとなるplutoアプリ。
この、plutoアプリのweb.xmlを修正する。
つまり、pluto-2.0.3/webapps/pluto/WEB-INF/web.xmlを修正する。

修正したのが下記XML。
修正内容としては、変更や削除は何もなく、サーブレットパラメータとエンコーディングフィルタの追加のみ。
  1. 青文字が、JSPやポートレットの文字化け対策。
    plutoPortalDriverサーブレットのcharsetパラメータにUTF-8を指定する。
    参考情報
    Pluto - Frequently Asked Questions
    http://portals.apache.org/pluto/faq.html
    How can I change the default encoding of the Pluto Portal
  2. 赤文字が、Postした日本語の文字化け対策。
    Tomcatが持ってるエンコーディングフィルタを使って、ブラウザと送受信するデータをUTF-8と指定する。
    昔はサンプルだったのに、いつのまにやら本体に入ってたのね。
エンコーディングフィルタはともかく、サーブレットパラメータはデフォルトをUTF-8にしてくれればいいのにね。

[web.xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

  <display-name>Apache Pluto Portal Driver</display-name>

    <filter>
        <filter-name>EncodeFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodeFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/pluto-portal-driver-services-config.xml</param-value>
  </context-param>

  <filter>
    <filter-name>plutoPortalDriver</filter-name>
    <filter-class>org.apache.pluto.driver.PortalDriverFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>plutoPortalDriver</filter-name>
    <url-pattern>/about.jsp</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>plutoPortalDriver</filter-name>
    <url-pattern>/about.jsp/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>org.apache.pluto.driver.PortalStartupListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>plutoPortalDriver</servlet-name>
    <display-name>Pluto Portal Driver</display-name>
    <description>Pluto Portal Driver Controller</description>
    <servlet-class>org.apache.pluto.driver.PortalDriverServlet</servlet-class>
    <init-param>
      <param-name>charset</param-name>
      <param-value>UTF-8</param-value>
   </init-param>
  </servlet>

  <servlet>
    <servlet-name>plutoPortalDriverLogout</servlet-name>
    <display-name>Pluto Portal Driver</display-name>
    <description>Pluto Portal Driver Logout</description>
    <servlet-class>org.apache.pluto.driver.PortalDriverLogoutServlet</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>portletApplicationPublisher</servlet-name>
    <display-name>Portlet Application Publisher</display-name>
    <description>Portlet Application Publisher Service</description>
    <servlet-class>org.apache.pluto.driver.PublishServlet</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>tckDriver</servlet-name>
    <display-name>Pluto TCK Driver</display-name>
    <description>Pluto TCK Driver Controller</description>
    <servlet-class>org.apache.pluto.driver.TCKDriverServlet</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>AboutPortlet</servlet-name>
    <servlet-class>org.apache.pluto.container.driver.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-name</param-name>
      <param-value>AboutPortlet</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>AdminPortlet</servlet-name>
    <servlet-class>org.apache.pluto.container.driver.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-name</param-name>
      <param-value>AdminPortlet</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>PlutoPageAdmin</servlet-name>
    <servlet-class>org.apache.pluto.container.driver.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-name</param-name>
      <param-value>PlutoPageAdmin</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>plutoPortalDriver</servlet-name>
    <url-pattern>/portal/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>plutoPortalDriverLogout</servlet-name>
    <url-pattern>/Logout</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>portletApplicationPublisher</servlet-name>
    <url-pattern>/admin/Publish</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>tckDriver</servlet-name>
    <url-pattern>/tck/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>AboutPortlet</servlet-name>
    <url-pattern>/PlutoInvoker/AboutPortlet</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>AdminPortlet</servlet-name>
    <url-pattern>/PlutoInvoker/AdminPortlet</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>PlutoPageAdmin</servlet-name>
    <url-pattern>/PlutoInvoker/PlutoPageAdmin</url-pattern>
  </servlet-mapping>

  <taglib>
    <taglib-uri>http://portals.apache.org/pluto</taglib-uri>
    <taglib-location>/WEB-INF/tld/pluto.tld</taglib-location>
  </taglib>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>portal</web-resource-name>
      <url-pattern>/portal</url-pattern>
      <url-pattern>/portal/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>pluto</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/login.jsp?error=1</form-error-page>
    </form-login-config>
  </login-config>

  <security-role>
    <role-name>pluto</role-name>
  </security-role>

</web-app>


0 件のコメント:

コメントを投稿