質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

TERASOLUNA

TERASOLUNA(テラソルナ)はNTTデータの独自フレームワークです。 比較的大規模なシステム開発における 開発手順・フレームワーク・サポートなどの製品群により構成されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

0回答

3501閲覧

terasolunaのSetCharacterEncodingFilterのmoreパラメタについて

yuji38kwmt

総合スコア437

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

TERASOLUNA

TERASOLUNA(テラソルナ)はNTTデータの独自フレームワークです。 比較的大規模なシステム開発における 開発手順・フレームワーク・サポートなどの製品群により構成されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

1クリップ

投稿2016/07/31 09:39

背景

terasoluna serverでWeb開発をしています。

エンコーディングフィルタを設定するため、WEB-INF/web.xmlに下記を設定しました。
terasolunaの機能説明書 (AL008-02 エンコードフィルタ機能)を、参照しました。

xml

1<filter> 2 <filter-name>encodingFilter</filter-name> 3 <filter-class>jp.terasoluna.fw.ex.web.thin.SetCharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>Windows-31J</param-value> 7 </init-param> 8 <init-param> 9 <param-name>more</param-name> 10 <param-value>false</param-value> 11 </init-param> 12 <init-param> 13 <param-name>ignore</param-name> 14 <param-value>false</param-value> 15 </init-param> 16</filter> 17<filter-mapping> 18 <filter-name>encodingFilter</filter-name> 19 <url-pattern>/*</url-pattern> 20</filter-mapping>

質問1

jp.terasoluna.fw.ex.web.thin.SetCharacterEncodingFilterの、moreパラメタの意味を教えてください。

JavaDocを見ましたが、「フィルタの複数回処理フラグ」という情報までしか分かりませんでした。

http://terasoluna.osdn.jp/javadoc/server-web_2.0.5.2/teralib-filter-1.0.2/jp/terasoluna/fw/ex/web/thin/SetCharacterEncodingFilter.html

jp.terasoluna.fw.ex.web.thin.SetCharacterEncodingFilterも掲載します。

java

1/* 2 * Copyright (c) 2012 NTT DATA Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package jp.terasoluna.fw.ex.web.thin; 18 19import java.io.IOException; 20import java.nio.charset.Charset; 21import java.nio.charset.IllegalCharsetNameException; 22 23import javax.servlet.Filter; 24import javax.servlet.FilterChain; 25import javax.servlet.FilterConfig; 26import javax.servlet.ServletException; 27import javax.servlet.ServletRequest; 28import javax.servlet.ServletResponse; 29 30import org.apache.commons.logging.Log; 31import org.apache.commons.logging.LogFactory; 32 33/** 34 * <p>リクエストパラメータのエンコーディング設定を行う。</p> 35 * <p> 36 * 使用方法 37 * </p> 38 * <p> 39 * クライアントのリクエストに自動的に文字エンコード指定を行いたい場合、 40 * Webアプリケーション設定ファイル(web.xml)で 41 * 専用のサーブレットフィルタ(SetCharacterEncodingFilter)を登録する。<br> 42 * その際、初期化パラメータとして、 43 * リクエストの文字エンコード種別・フィルタの複数回処理フラグ・フィルター無効化フラグを指定する。<br> 44 * 文字エンコード種別の値が未入力、無効な値の場合はwarnレベルのログを出力し、エンコーディング設定は行われない。<br> 45 * 以下は、リクエストに自動的に文字エンコード指定を行う場合のencodingの指定例である。<br> 46 * <br> 47 * Webアプリケーション設定ファイル(web.xml)<br> 48 * <code> 49 * &lt;filter&gt;<br> 50 * &nbsp;&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br> 51 * &nbsp;&nbsp;&lt;filter-class&gt;<br> 52 * &nbsp;&nbsp;&nbsp;jp.terasoluna.fw.ex.web.thin.SetCharacterEncodingFilter<br> 53 * &nbsp;&nbsp;&lt;/filter-class&gt;<br> 54 * &nbsp;&nbsp;&lt;init-param&gt;<br> 55 * &nbsp;&nbsp;&nbsp;&lt;param-name&gt;encoding&lt;/param-name&gt;<br> 56 * &nbsp;&nbsp;&nbsp;&lt;param-value&gt;Windows-31J&lt;/param-value&gt;<br> 57 * &nbsp;&nbsp;&lt;/init-param&gt;<br> 58 * &nbsp;&lt;init-param&gt;<br> 59 * &nbsp;&nbsp;&lt;param-name&gt;more&lt;/param-name&gt;<br> 60 * &nbsp;&nbsp;&lt;param-value&gt;false&lt;/param-value&gt;<br> 61 * &nbsp;&lt;/init-param&gt;<br> 62 * &nbsp;&lt;init-param&gt;<br> 63 * &nbsp;&nbsp;&lt;param-name&gt;ignore&lt;/param-name&gt;<br> 64 * &nbsp;&nbsp;&lt;param-value&gt;false&lt;/param-value&gt;<br> 65 * &nbsp;&lt;/init-param&gt;<br> 66 * &lt;/filter&gt;<br> 67 * <br> 68 * &lt;filter-mapping&gt;<br> 69 * &nbsp;&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br> 70 * &nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br> 71 * &lt;/filter-mapping&gt;<br> 72 * </code> 73 */ 74public class SetCharacterEncodingFilter implements Filter { 75 76 /** 77 * ログクラス。 78 */ 79 private static Log log = LogFactory 80 .getLog(SetCharacterEncodingFilter.class); 81 82 /** 83 * フィルタ処理済みフラグ。 84 */ 85 private static final String THRU_FILTER_KEY = "THRU_FILTER_ENCODING"; 86 87 /** 88 * フィルタの複数回処理フラグ。 89 */ 90 private boolean moreFlag = false; 91 92 /** 93 * エンコーディング。 94 */ 95 private String encoding = null; 96 97 /** 98 * このフィルターを無効化するフラグ。 99 */ 100 private boolean ignoreFlag = false; 101 102 /** 103 * 初期化処理。 104 * 105 * @param filterConfig 106 * フィルター設定 107 * 108 * @throws ServletException 109 * 例外 110 */ 111 public void init(FilterConfig filterConfig) throws ServletException { 112 113 // Log 114 if (log.isDebugEnabled()) { 115 log.debug("init() called."); 116 } 117 118 String encode = filterConfig.getInitParameter("encoding"); 119 120 try { 121 if (!Charset.isSupported(encode)) { 122 log.warn(encode + " is unsupported encoding."); 123 } else { 124 this.encoding = encode; 125 } 126 } catch (IllegalCharsetNameException e) { 127 log.warn("The format of encoding is not correct."); 128 } catch (IllegalArgumentException e) { 129 log.warn("encoding can not be null."); 130 } 131 132 if (log.isDebugEnabled()) { 133 log.debug("this.encoding = " + this.encoding); 134 } 135 136 String ignoreValue = filterConfig.getInitParameter("ignore"); 137 if (ignoreValue != null) { 138 this.ignoreFlag = this.createFlag(ignoreValue); 139 } 140 141 String moreValue = filterConfig.getInitParameter("more"); 142 if (moreValue != null) { 143 this.moreFlag = this.createFlag(moreValue); 144 } 145 } 146 147 /** 148 * フィルター処理。 149 * 150 * <p> 151 * リクエストパラメータを指定されたエンコーディングに設定する。 152 * </p> 153 * 154 * @param request 155 * リクエスト 156 * @param response 157 * レスポンス 158 * @param chain 159 * フィルターチェーン 160 * 161 * @throws IOException 162 * 例外 163 * @throws ServletException 164 * 例外 165 */ 166 public void doFilter(ServletRequest request, ServletResponse response, 167 FilterChain chain) throws IOException, 168 ServletException { 169 170 if (!this.moreFlag && request.getAttribute(THRU_FILTER_KEY) != null) { 171 chain.doFilter(request, response); 172 return; 173 } 174 175 if (!ignoreFlag && encoding != null) { 176 // Log 177 if (log.isDebugEnabled()) { 178 log.debug("set encoding(" + encoding + ") to request."); 179 } 180 request.setCharacterEncoding(encoding); 181 } 182 183 // 処理済フラグを格納 184 request.setAttribute(THRU_FILTER_KEY, THRU_FILTER_KEY); 185 186 chain.doFilter(request, response); 187 } 188 189 /** 190 * 終了時処理。 191 */ 192 public void destroy() { 193 this.encoding = null; 194 } 195 196 /** 197 * 文字列より、フラグを生成する。 198 * 199 * @param value 200 * 対象文字列。 201 * @return 生成されたフラグ。 202 */ 203 private boolean createFlag(String value) { 204 if ("true".equalsIgnoreCase(value)) { 205 return true; 206 } else if ("yes".equalsIgnoreCase(value)) { 207 return true; 208 } 209 return false; 210 } 211}

質問2

Tomcatにも、エンコーディングフィルタorg.apache.catalina.filters.SetCharacterEncodingFilterがあります。
これと、tomcatのエンコーディングフィルタの違いを教えてください。

公式サイト: https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Set_Character_Encoding_Filter

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問