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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Q&A

解決済

3回答

3746閲覧

サーブレットでフィルタを追加したい

RyoM

総合スコア90

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

0グッド

0クリップ

投稿2016/06/19 19:46

編集2016/06/20 06:09

サーブレット初心者です。
フィルタを使ってutf-8の文字エンコードを掛けたいのですが上手くいきません。
フィルタの内容が以下の文です。

Java

1import java.io.IOException; 2 3import javax.servlet.Filter; 4import javax.servlet.FilterChain;//chainで使用 5import javax.servlet.FilterConfig;//initで使用 6import javax.servlet.ServletException; 7import javax.servlet.ServletRequest; 8import javax.servlet.ServletResponse; 9import javax.servlet.annotation.WebFilter; 10 11@WebFilter("/EncodingFilter") 12public class EncodingFilter implements Filter 13{ 14 public void init(FilterConfig filterConfig) 15 throws ServletException{} 16 17 public void doFilter(ServletRequest request, 18 ServletResponse response, 19 FilterChain chain) 20 throws IOException, ServletException 21 { 22 System.out.println("calls EncodingFilter#doFilter()"); 23 request.setCharacterEncoding("UTF-8"); 24 chain.doFilter(request, response); 25 } 26 27 public void destroy() {}//何もしない 28}

web.xmlの内容が、以下の文です。

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <display-name>Servlet1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>

何か間違いがあれば教えていただけると非常にありがたいです。
回答よろしくお願いいたします。

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

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

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

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

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

RyoM

2016/06/20 06:10

教えていただいてありがとうございます!!
guest

回答3

0

java

1package filter; 2 3import javax.servlet.Filter; 4import javax.servlet.FilterChain; 5import javax.servlet.FilterConfig; 6import javax.servlet.ServletException; 7import javax.servlet.ServletRequest; 8import javax.servlet.ServletResponse; 9import javax.servlet.annotation.WebFilter; 10 11@WebFilter(filterName="EncodingFilter", urlPatterns="/*") 12public class EncodingFilter implements Filter 13{ 14 public void init(FilterConfig fConfig) throws ServletException 15 { 16 } 17 public void doFilter(ServletRequest request, 18 ServletResponse response, 19 FilterChain chain) 20 throws java.io.IOException, ServletException 21 { 22 // place your code here 23 request.setCharacterEncoding("UTF-8"); 24 System.out.println("aiu"); 25 // pass the request along the filter chain 26 chain.doFilter(request, response); 27 } 28 public void destroy(){} 29 30 31} 32

java

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 6 id="WebApp_ID" version="3.0"> 7 8 <filter> 9 <filter-name> 10 EncodingFilter 11 </filter-name> 12 <filter-class> 13 filter.EncodingFilter 14 </filter-class> 15 </filter> 16 17 <filter-mapping> 18 <filter-name> 19 EncodingFilter 20 </filter-name> 21 <url-pattern /> 22 </filter-mapping> 23 <display-name>Servlet1</display-name> 24 25 <welcome-file-list> 26 <welcome-file>index.html</welcome-file> 27 <welcome-file>index.htm</welcome-file> 28 <welcome-file>index.jsp</welcome-file> 29 <welcome-file>default.html</welcome-file> 30 <welcome-file>default.htm</welcome-file> 31 <welcome-file>default.jsp</welcome-file> 32 </welcome-file-list> 33</web-app>

投稿2016/06/22 13:38

RyoM

総合スコア90

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

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

0

ベストアンサー

Filterクラスに付与している @WebFilter と、web.xmlに宣言する <filter-mapping>は同じ設定内容になりますので、どちらかのみ 設定しましょう。

投稿2016/06/21 06:42

A-pZ

総合スコア12011

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

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

RyoM

2016/06/22 13:34

回答ありがとうございます!! まさにここがおかしかったみたいです!! ありがとうございました!!
A-pZ

2016/06/22 13:38

d(・ω・
guest

0

状況としては、以下のどちらでしょうか?

  • WebFilterが動作しない(意図したように呼び出されない)
  • UTF-8でのエンコードが行われない

WebFilterが動作しないよう("calls EncodingFilter#doFilter()"がコンソールに出力されない)であれば、EncodingFilterクラスのパッケージがWeb.xmlで定義されているものと同様であるか確認してみてください。

UTF-8でのエンコードが行われないようであれば、サーブレット側でSystem.out.println(request.getCharacterEncoding());を追加して設定されているエンコードを確認してみてください。

投稿2016/06/21 01:33

takyafumin

総合スコア2335

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

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

RyoM

2016/06/21 06:26

状況としては、calls EncodingFilter#doFilter()"がコンソールに出力されないですが、 initメソッドの中でコンソールに対して出力要求をすると、そちらは出る状況です。 これはweb.filterが動作していないということになるのでしょうか?
takyafumin

2016/06/21 07:08

initメソッドはインスタンス化された時に1回だけ呼び出される仕様だったかと思います。 - https://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/Filter.html#init(javax.servlet.FilterConfig) 状態としてはEncodingFilterクラスはコンテナに登録されたが、リクエスト時に適用されていないようですね。 検証時にアクセスしているURLはどのようなものになりますか?またそのURLに対してFilterの適用URLが有効になっていますか? A-pZさまの回答にもあるように、Filterを適用するURLについてはソースコード(@WebFilter)、web.xml(<filter-mapping>)のいづれかで定義するようにしましょう。
RyoM

2016/06/22 13:33

回答ありがとうございます!! 解決しました!! 適用 takyafumin様のいう通り、@webFilterの定義の仕方が悪かったみたいです! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問