- - PR -
?を用いないURLでパラメータを渡す方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-11 23:56
amazon.co.jp を見ていて思ったのですが、
アマゾンでは本のリンク等のURLに?が含まれていません。 これまでリンクでパラメータを渡すには、url?id=xxx といった形式しかない と思っていたのですが、それ以外の方法もあったんですねぇ・・・。 ![]() servlet や JSP にも ? を用いないでパラメータを渡す方法があるのでしょうか? 知っている方がおられましたら、ご教授頂ければ幸いです。 よろしくお願い致します。<(_ _*)> | ||||||||||||
|
投稿日時: 2004-11-12 00:45
getParameter() メソッドでは ? で渡されたクエリやポストされたフォームデータしか受け取れません。
ただし、どのようなURLでリクエストされたかどうかは取得できますので自分でURLを分解することで同様のことは実現できます。 servlet-mappingで /somecontext/* といった形でサーブレットにマッピングすればあらゆる形式の URL でリクエストを受け取ることが出来ますので。 どんなメソッドを使う必要があるかは API リファレンスを見ましょう。 http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html | ||||||||||||
|
投稿日時: 2004-11-12 02:06
インギ様、ありがとうございます。
なるほど。自分でURLを解析すれば出来たのですね。 早速試してみた所、Servletでは思い通りに出来ました。 ![]() ところが、StrutsのActionで試してみるとうまくいきません・・・。 Strutsではやっぱり無理なんですかね〜。。。 ![]() | ||||||||||||
|
投稿日時: 2004-11-12 09:06
>ところが、StrutsのActionで試してみるとうまくいきません・・・。
どううまくいかないんでしょう? Servletで試したときとmappingが違うからでは? | ||||||||||||
|
投稿日時: 2004-11-12 11:48
普通の Servlet では、下記のようにすることで出来ました。
ところが、StrutsのActionに渡すために下記のように書き換えて、
struts-config にも test アクションを追加しましたが、
http://localhost:8080/hoge/somecontext/test/id=1234 とやってみると、 HTTP Status 404 が出てしまうのです。。。 ちなみに、http://localhost:8080/hoge/somecontext/test だと、 ちゃんと TestAction が実行されるので、Struts の場合は URL が struts-config の action path とマッチするものでないと、 受け付けてくれないのかなぁ?と思った次第です。 何か対策がありましたらご教授頂ければ幸いです。 | ||||||||||||
|
投稿日時: 2004-11-12 13:06
うーーん。
pathにワイルドカードが使えればねぇ・・・
っていうか、結局フロントコントローラパターンなんですよね。 で、パっと思い浮かんだのが 1.org.apache.struts.action.ActionServletを拡張する。 2.自分でURLを解析するServletを登録し、strutsのActionServletへフォワードする。 の2つぐらいです。 どっちも、やったことないのでアイデアぐらいで受け止めてください。 | ||||||||||||
|
投稿日時: 2004-11-12 14:04
Struts 1.2.x からは使えます。 http://struts.apache.org/userGuide/building_controller.html#action_mapping_wildcards で、クエリ文字列を使わずに何らかの値を受け渡すのは 普通の CGI やサーブレットなら PATH INFO 使いますね。 そもそも HTTP の仕様だったんじゃないかな。 Struts の場合は一筋縄にはいかないので、上に示した ワイルドカードをうまく使うことで似たような動作を実現できます。 ただし、getPathInfo() は効かないはずなので注意。 | ||||||||||||
|
投稿日時: 2004-11-12 15:46
皆さん、ありがとうございます♪
Struts1.1 を使っていたので、早速 Struts1.2.4 を落として実験してみました。 web.xml は先程とほとんど同じ。
struts-config はワイルドカードを使えるように変更。 ちなみに最初は /test* でやったのですが、URL に / が含まれているとダメでした。 アマゾンのように / だけで区切りたかったので /test** とすると、 URL 内で / を好きなだけ使えるようになりました。 ![]()
後は Action で request.getPathInfo() を実行すると、/test… が 取得できるので、解析してパラメータを取り出せばOKでした。 有用な情報をありがとうございました。<(_ _*)> |