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

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

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

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

サーブレット

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

フィルタ

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

Q&A

解決済

1回答

10765閲覧

認証フィルターを使い、パラメータの変化によって指定のページに遷移するサーブレットを作りたいのですが…

sarasa7

総合スコア13

Java

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

サーブレット

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

フィルタ

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

0グッド

0クリップ

投稿2015/08/10 14:53

編集2015/08/11 13:15

認証フィルタを作って、パラメータにparam=1が含まれている場合、リクエストで呼び出したサーブレットに遷移し、それ以外ならばエラーページに遷移するようにしたいです。下記のように書いたのですが、param=1以外でアクセスしてもエラーページに遷移しません。

フィルタのコード

package union; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SampleFilter1 implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String param = req.getParameter("param"); if (param != "1") { ((HttpServletResponse)response).sendRedirect("/html/error.html"); } chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { } }

param=1だった場合呼び出されるサーブレット

package union; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author * */ public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); String disp = "/html/sample.html"; RequestDispatcher dispatch = request.getRequestDispatcher(disp); dispatch.forward(request, response); } }

web.xml

<web-app> <filter> <filter-name>sampleFilter1</filter-name> <filter-class>sampleFilter</filter-class> </filter> <filter-mapping> <filter-name>sampleFilter1</filter-name> <url-pattern>/sampleServlet</url-pattern> </filter-mapping> <servlet> <servlet-name>sampleServlet1</servlet-name> <servlet-class>sampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sampleServlet</servlet-name> <url-pattern>/sampleServlet</url-pattern> </servlet-mapping> <!--エラーページ--> <error-page> <error-code>404</error-code> <location>/html/error.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/html/error.html</location> </error-page> </web-app>

以上になります。分かりづらくてすみません。
どなたかお分かりになる方がいらっしゃいましたら宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2015/08/11 01:05

質問の「うまくいきません」の部分をもう少し具体的に書いていただけませんか?例えば「/sampleServlet?param=1にアクセスしてもエラーページが表示されない」とかです。
sarasa7

2015/08/11 13:17

申し訳ありません。質問内容を更新致しました。
guest

回答1

0

ベストアンサー

java

1 String param = req.getParameter("param"); 2 3 if (param != "1") { 4 5 ((HttpServletResponse)response).sendRedirect("/html/error.html"); 6 }

の部分を

String param = req.getParameter("param"); if ("1".equals(param)) { // この行を変更 ((HttpServletResponse)response).sendRedirect("/html/error.html"); return; // 次のフィルタを呼び出すと別のURLにいくかもしれないため }

とするとFilterからリダイレクトできるのではないでしょうか?

Javaの場合、==!=はオブジェクトの同一性を確認する演算子です。param != "1"は同じオブジェクトの事がほぼないので、falseになります。

また、次のフィルタに処理を渡すと別のURLに遷移させる等処理が行われるので、

chain.doFilter(request, response);

を呼ばないようにしました。

投稿2015/08/11 13:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sarasa7

2016/03/24 07:41

遅くなってすみません。 無事解決できました。 どうもありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問