トップページ⇒tech
180コメント74KB

JSPに関するQAスレッド

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Javaサーブレットスレッドはありますが、JSPに絞ったスレッドは
なぜかありません。
JSPのみで構成されるWebアプリケーションもある昨今、
・JSP1.0,1.1,1.2の細かな仕様の違いに混乱している人
・ServletとEJBとのうまい連携の仕方に苦労している人
・XML記述形式のJSPに慣れそうもない人
・便利なtaglibを自慢したい人
などなど、皆さんマターリ語り合いましょう。
0002デフォルトの名無しさんNGNG
2
0003デフォルトの名無しさんNGNG
昔は1000番目のキリ番を目指すなどあったが、今では2を取ることに彼らは
必死だ。その理由には次のようなことが考えられる。
    
まず「1000まで待てない」ということが挙げられるだろう。
辛抱・我慢といった観念は既になく、思ったことをそのまま行動に繋げる計画性
のなさがある。これは最近の「すぐキレる若者」の特徴に類似している。

次に、例えば1000だった場合、1000レス目が最後の書き込みとあり、1001番目は
反映されない。これはまさに「成功か失敗か」の問題だったのだ。
しかし「2」は違う。2をとれなくても3や4、もしくは5〜までの書き込みに
、自らのレスが反映される。成功しなくても自分の行為が反映されるのだ。
そこにはもはや「成功と失敗」といった、片方だけの存在はない。
1000では失敗すれば誰も自分の書き込みを見てくれず、表示される警告文を一人
見るだけだったが、2を取れなくても、自分のしたことが反映されるため
「2じゃなかったけど、まあいいか」といった気持ちに繋がる。これは現在増え
ている「フリーター」の心理に他ならない。

そして多くのものは、「なぜ2番目のレスを取ることの速さを競うのか」を考え
たことはないだろう。他人がやっているから自分もやる。または、他人の2を取る
のを邪魔してやりたい、といったことがあると考えれる。これはまさに「明確な
自己意識がなく他人に振り回される」「人の足を引っ張ることに快感を覚える」
という、現代若者の特徴を描き出しているのだ。

問題の真相は後回しにし、内容のない書き込みを続ける。さながらワイドショー
並みの愚かさが、そこにはあるのだ。
0004デフォルトの名無しさんNGNG
ジサクジエン?
晒しage
0005デフォルトの名無しさんNGNG
正直、厨房なのでServletとJSPの違いがわかりません。
0006デフォルトの名無しさんNGNG
本を読め。
0007デフォルトの名無しさんNGNG
JSPはクソだ。
Teaの方が、良い。
0008デフォルトの名無しさんNGNG
>>7 はオライリーの Servlet 本を読んだ直後。
0009デフォルトの名無しさんNGNG
>>7

JSPばかりが選択肢でないのは確かだろう。
しかし、DreamWeaverとかでHTMLを編集できるのは現時点ではJSPだけ。
0010デフォルトの名無しさんNGNG
>>9
どういうこと?

>DreamWeaverとかでHTMLを編集できるのは現時点ではJSPだけ。

日本語おかしくない?
0011 NGNG
なかなか盛り上がりませんね。

ここで、目先をかえて質問(マジレス)

JAVAのAppletをとりあえず作って完成したので
サーバーサイドのJAVAプログラムを作ってみようと考えています。
何をしたいかは、XMLをサーバーにおいて
HTMLに変換した結果だけをクライアントに送りたいというもの。
簡単な実験のつもりで、いろいろサーブレット・JSPについて調べてみたら
サーバー側にJRunとJSDKが必要とか書いてあるし、
Apacheの設定なども必要らしい?
普通のプロバイダーで5MB容量でTelenet使えない我が環境では
どうすることもできないのだろうか?と悩んでる今日この頃。
もしかして普通のJAVAアプリ入れれば普通に動くとかいう落ちがあるかもしれないが
こんな環境の俺が、サーブレットとは言わないが
サーバーサイドでJAVAで書かれたプログラムを動かして
HTML変換や、XML書き換えなんかはできないのですか?
厨な環境は、CGIでもやってろということになるのですか?
(スレ・板違いならスマソ)
0012デフォルトの名無しさんNGNG
Tomcat4.0.3 辺りを Linux か WinNT/2000 コンソールで動かしてはいかが?
0013デフォルトの名無しさんNGNG
以下は、
(1) CGIパラメータ"URL" で与えられたURLからXMLファイルを取得し、
(2) XMLファイル内の stylesheet指定(絶対URL)から
  スタイルシート(XSLファイル)を取得し、
    <?xml-stylesheet type="text/xsl" href="http://host/style.xsl"?>
(3) XSL変換(XSLTranslate)した結果を返す、サーブレット

----- ここから -----
*/
//import java.io.*;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;

//import java.util.*;
import java.util.Vector;

import javax.servlet.*;
import javax.servlet.http.*;

//import org.w3c.dom.*;
//import org.xml.sax.*;
//import org.xml.sax.helpers.*;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import org.apache.xalan.xslt.XSLTProcessor;
import org.apache.xalan.xslt.XSLTInputSource;
import org.apache.xalan.xslt.XSLTResultTarget;
import org.apache.xalan.xslt.XSLTProcessorFactory;

import org.apache.xalan.xpath.xml.TreeWalker;
import org.apache.xalan.xpath.xml.FormatterToXML;

/**
* リモートWebサーバ上のXMLコンテンツをXSL処理して返す PROXY Servlet.
*
* 別バージョンとして、Servlet chainning / RequestDispatcher対応版が
* 考えられる.
* ToDo: PROXY版では、CGI GET parameter, anchor 等をきちんと扱う必要がある.
*/
0014デフォルトの名無しさんNGNG
public class XSLServlet extends HttpServlet {
 static String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";

 public void init(ServletConfig config)
  throws ServletException {
  //
 }

 /**
  * Servletのservice実行
  */
 public void service(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {

  String urlString = req.getParameter("URL");
  if (urlString==null) {
   urlString = req.getParameter("url");
  }
  if (urlString==null) {
   error(res, urlString, "URL not given.");
  } else {
   java.net.URL url = new java.net.URL(urlString);
   xslproxy(req, res, url);
  }
 }

 /**
  * PROXY + XSL処理
  */
 void xslproxy(HttpServletRequest req, HttpServletResponse res,
        java.net.URL url)
 throws IOException, ServletException {
  try {
   // Requestの転送
   java.net.URLConnection remoteCon = getRemoteConnection(req, url);

   // Response headerの転送
   copyResponseHeader(remoteCon, res);

   // Response contentのXSL変換
   doXslt(remoteCon.getInputStream(), res.getOutputStream(),
       isXmlDocument(remoteCon));

   // 後始末
   remoteCon.close();

  } catch (Exception ex) {
   ex.printStackTrace();
   error(res, url, ex);
  }
 }
0015デフォルトの名無しさんNGNG

 /**
  * PROXY先への接続と、要求内容の転送.
  */
 java.net.URLConnection getRemoteConnection(HttpServletRequest req,
                       java.net.URL url)
 throws IOException {
  
  java.net.URLConnection con = url.openConnection();

  // Request headerのコピー
  copyRequestHeader(req, con);

  // Request contentsのコピー
  copyStream(req, con);
  int contentLength = req.getContentLength();
  if (contentLength>0) {
   ServletInputStream in = req.getInputStream();
   OutputStream out = con.getOutputStream();
   copyStream(in, out);
  }

  // Request実行
  // method指定できない. Outputの有無でGET/PUTを切り替える程度.
  // また、Authenticationもできない様子.
  con.connect();

  // 後は、Responseを処理するだけ.
  return con;
 }

 /**
  * Request元からの要求ヘッダーを、PROXY先へのrequestにコピーする.
  */
 void copyRequestHeader(HttpServletResponse res, java.net.URLConnection con)
 throws IOException, ServletException {
  for (java.util.Enumeration e=req.getParameterNames();
     e.hasMoreElements();) {
   String hname = (String)e.nextElement();
   String values[] = req.getParmeterValues(hname);
   for (int i=0; values!=null && i<values.length; i++) {
    con.setRequestProperties(hname, values[i]);
   }
  }
 }

0016デフォルトの名無しさんNGNG
 /**
  * PROXY先からの応答ヘッダーを、Request元へのresponseにコピーする.
  */
 void copyResponseHeader(java.net.URLConnection con, HttpServletResponse res)
 throws IOException, ServletException {

  // URLConnectionのresponse headerを、HttpServletResponseにコピー.
  for (int i=0; ; i++) {
   String key = con.getHeaderFieldKey(i);
   String val = con.getHeaderField(i);
   if (key==null || val==null) { break; }
   res.setHeader(key, val);
  }
 }

 /**
  * Streamのコピー.
  */
 void copyStream(InputStream in, OutputStream out)
 throws IOException {
  byte buff[] =new byte[contentLength<BUFFSIZE ? contentLength : BUFFSIZE];
  for (i=0; i<contentLength; i+=buff.length) {
   in.read(buff);
   out.write(buff);
  }
 }


 /**
  * URLConnection の応答が XML文書かどうか
  */
 boolean isXmlDocument(java.net.URLConnection con)
 throws IOException {
  String contentType2 = con.guessContentTypeFromStream();
  if (contentType2!=null && contentType2.equalsIgnoreCase(XML_CONTENT_TYPE)){
   return true;
  }
  String contentType1 = con.getContentType();
  if (contentType1!=null && contentType1.equalsIgnoreCase(XML_CONTENT_TYPE)){
   return true;
  }
  return false;
 }

0017デフォルトの名無しさんNGNG
 /**
  * PROXY先からの応答本体を、XSLプロセッサー処理する.
  *
  * ToDo: charset設定 (proxy res, xsl, response)
  */
 void doXslt(java.net.URLConnection )
 throws IOException
     org.xml.sax.SAXException {

  boolean done = false;
  try {
   if (!isXmlDocument(con)) {
    return;
   }

   InputStream in = con.getInputStream();
   OutputStream out = res.getOutputStream();
   InputStream xslIn = null;
   Document inDoc = null;

   // XSL取得
   // XML文書先頭の、以下のような定義を取得したい.
   //    <?xml version="1.0" charset="Shift_JIS"?>
   //    <?xml-stylesheet type="text/xsl" href="..."?>
   // 戦略:
   //    ・XML parserで取得.
   //    ・XSL処理用入力の考慮.
   //     - InputStreamを保存するか、
   //     - XML parser解析結果をDOM化して XSLTInputSourceを作成するか
   try {
    // PI xml-stylesheet の取得
    Parser parser = ParserFactory.makeParser(DEFAULT_PARSER_NAME);
    PiHandler handler = new PiHandler();
    parser.setDocumentHandler(handler);
    //parser.setErrorHandler(handler);

    parser.parse(new InputSource(in));

    Vector pis = parser.getPIVector();
    if (pis==null || pis.size() <= 0) {
     System.err.println("PI xml-stylesheet not found.");
     return;
    }

    // xsl hrefの切出しとURLConnection作成
    String href = parsePIdata(((Hashtable)pis.elementAt(0)).get("data"));
    xslIn = new URL(href).openStream();

    // xsl 入力の確保
    inDoc = parser.getDocument();
0018デフォルトの名無しさんNGNG

   } catch (Exception ex) {
    System.err.println("Exception in pre parse.");
    throw ex;
   }

   // XSLT処理
   // 参考: Xalan/samples/dom1/transform.java
   // 参考: Xalan/docs/Stylebook.java
   try {
    Document outDoc = new org.apache.xerces.dom.DocumentImpl();
    XSLTProcessorFactory.getProcessor()
     .process(new XSLTInputSource(inDoc),
          new XSLTInputSource(xslIn),
          new XSLTResultTarget(outDoc));

    (new TreeWalker
     (new FormatterToXML
     (new PrintWriter(out)
      , true)))
     .traverse(outDoc);

   } catch (Exception ex) {
    System.err.println("Exception in XSL Translation.");
    throw ex;
   }

   done = true;
   return;

  } catch (Exception ex) {
   ex.printStackTrace();

  } finally {
   if (!done) {
    // PROXY without XSL
    // XML文書でないか、XSL処理中にエラーが発生した.
    copyStream(con.getInputStream(), res.getOutputStream());
   }

  }
 }

0019デフォルトの名無しさんNGNG
 // processingInstrucition(target,data); のdata部分のparse
 //  'type="text/xsl" href="data/personal.xsl"' という形式
 public Properties parsePIdata(String data) {
  // RE: /^\s*([^=]+)\s*=\s*"([^"]+)"\s*/ "という感じのものを indexで処理.
  Properties props = new Properties();
  int nstart, nend, vstart, vend;

  for (int i=0; data!=null && i<data.length(); i++) {
   char c = data.indexOf(i);
   if (0<=c && c<' ') { continue; }
   nstart = i;
   nend =
   props.put();
  }
  return props;
 }

 public Properties parsePIdata_0(String data) {
  // 1文字ずつ確実に処理する.
  Properties props = new Properties();

  StringBuffer vals[] = new StringBuffer[2];
  for (int i=0; i<2; i++) { vals[i] = new StringBuffer(); }
  boolean valSide = false;
  boolean assignArrived = false;

  for (int i=0; data!=null && i<data.length(); i++) {
   int c = data.charAt(i);
   switch (c) {
   default:
    if (0<=c && c<' ') { continue; }
    if (assignArrived && !valSide) {
     System.err.println("parsePIdata(): illegal char between "+
               "'=' and '\"': "+c);
    }
    vals[valSide?1:0].append((char)c);
    break;
   case '=':
    assignArrived = true;
    break;
0020デフォルトの名無しさんNGNG
   case '"':
    // 注:value内部の'"'を考慮していない. (エスケープ・ルール未確認)
    if (!valSide) { valSide = true; }
    else {
     // end of 'name="value"'
     String name = vals[0].toString();
     String val = vals[1].toString();
     if (name.length()>0) { props.put(name, val); }
     else {
      System.err.println("parsePIdata(): name is null. "+
                "(name='"+name+"', value='"+val+"')");
     }
     // clear
     vals[0].setLength(0);
     vals[1].setLength(0);
     assignArrived = false;
     valSide = false;
    }
    break;
   }
  }
  return props;
 }

 static class PiHandler extends org.xml.sax.HandlerBase {
  // Vector to save PI
  java.util.Vector vec = new java.util.Vector();

  public PiHandler() {
   super();
   setPIVector(new java.util.Vector());
  }

  public PiHandler(java.util.Vector vec) {
   super();
   setPIVector(vec);
  }

  public void processingInstruction(String target, String data)
   throws org.xml.sax.SAXException {

   //System.err.println("PI:target='"+target+"', data='"+data+"'");
   if (target==null) { target = new String(); }
   if (data==null) { data = new String(); }
   java.util.Hashtable hash = new java.util.Hashtable();
   hash.put(target, data);
   vec.addElement(hash);

   super.processingInstruction(target, data);
  }

0021デフォルトの名無しさんNGNG
  public void setPIVector(java.util.Vector vec) {
   this.vec = vec;
  }

  public java.util.Vector getPIVector() {
   return this.vec;
  }

  public Document getDocument() {
   // SAX2DOM変換により、DOMを生成する.
   
  }
 }
}
0022デフォルトの名無しさんNGNG
----- ここまで -----
#花粉症で頭がぼーっとしたとはいえ、
変な事やっちゃった事に気付いた、、、スマソ
002311NGNG
>>12-22
とっても親切に感謝。

でも、別のスレ「初心者歓迎! Java相談室 その6 」で私の環境での
結論は出てしまいました。

291 :消防 :02/03/12 20:59
>>288

HPで動かしてみたいのです。
(なんというワガママぶり)


292 :デフォルトの名無しさん :02/03/12 21:01
>291
じゃ、無理。

とにかく、いつの日かホスティングなどで
自分のサーバーを手に入れたら、
このコード参考にしてやってみます。
0024デフォルトの名無しさんNGNG

OS: debian GNU/Linux sid
tomcat: tomcat 4.0.3 (jakarta.apache.org から持ってきたバイナリ)
で JSP の勉強をしています。

勉強のため、JSP の source を表示する JSP を作ってみたのですが、上手くいきませんでした。

以下 source。
-------------------
<%@ page contentType="text/html; charset=euc-jp" import="java.io.*" %>
<%

// filename パラメータを取得
String filename = request.getParameter("filename");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>source file を表示する</title></head>
<body>
filename = <%= filename %>
<p>
<%
String l;
File f = new File(filename);
if ( f.exists() ) {
//いろいろ
} else {
out.print(f.getAbsolutePath()+"<br>");
out.print("ファイルが見付かりません。<br>");
}
%>
</p>
</body>
</html>
-------------------
●上記の jsp に access したところ、
filename = sourceview.jsp

/var/www/sourceview.jsp
ファイルが見付かりません。

と出力されました。/var/www/sourceview.jsp を探しているようです。
/var/www といって思いつくのは、debian に付属している apache の
DOCUMENT_ROOT ですが、apache と連携させずに、tomcat の
http server をアクセスしているのに、こうなってしまいます。

TOMCAT_HOME/conf 以下のファイルにも、特に "/var/www" といったキーワードが
書かれているファイルはありません。

1. なんでこうなるのかわかりません。だれか教えてちょんまげ。

●ttp://www02.u-page.so-net.ne.jp/qa2/masa_o/tsjsp/jsp/st02.htm
を参考に、
File f = new File(application.getRealPath(filename));
として、目的は逹しました。

2. こういうやりかたでいいんでしょーか。

0025デフォルトの名無しさんNGNG
>>24
あ〜一応答えます。

/var/www うんぬんはdebian使いでも無いし、実際にconf以下のファイルを
みてるわけでは無いので何とも言えないですが、ファイルパスについては
相対パスで考えているのが問題かと思います。
普通 /ローカルアドレス/sourceview.jsp って感じで絶対パスで書きません?

あと、蛇足ですけど↓の部分は危険なんで絶対実装しちゃだめですよ。

> String filename = request.getParameter("filename");

もし、sourceview.jsp?filename=/etc/passwd を実行されたらどうします?
002625NGNG
ついで・・・

>>12-22
ソースが公開されているのであればリンクを貼っておくだけで
良いと思います。
公開されていないものであっても、全部貼るのではなく要所だけ
ピックアップにしてもらえると助かります。

ソースをまんま貼っちゃうとスレの可読性が失われちゃいますよ。
002724NGNG
>>25
絶対パスっていうのは、server.xml の <Context> の docBase と同じものを、
jsp 中に記入しておけ、ということでしょうか? んなわけないよなー。

File f = new File(application.getRealPath(filename)); で絶対パスに変換してからやってるのだけど、
そういうアプローチで良いでしょうか?

>> String filename = request.getParameter("filename");
>もし、sourceview.jsp?filename=/etc/passwd を実行されたらどうします?
/usr/local/tomcat/webapps/test/etc/passwd
ファイルが見付かりません。

となりました。が、

../../../../../../../../../etc/passwd
とやったら、
root:x:0:0:root:/root:/bin/zsh-static
(以下略)
となりました。…欝だ氏のう。

最後の / から前は捨ててから処理すれ、ということですね。
実装は明日。帰って寝よう。
002812-22NGNG
>>26 どうも、、、
 花粉症でグシュグシュして、頭がボーっとして、
 気付いたらソースを全部張り終えていたんですぅー。

#3年近く前のソースだし、Xalan と Xerces直呼びだし、参考になんないっすよねー。
002925NGNG
>>File f = new File(application.getRealPath(filename)); で絶対パスに変換してからやってるのだけど、
>>そういうアプローチで良いでしょうか?

考え方的にはそれでオッケーだと思います。
あらかじめファイル置き場を限定しておくならアプリケーションパス
わざわざ通さないで、定数でやっちゃった方がやりやすい気が・・・

>>/usr/local/tomcat/webapps/test/etc/passwd ファイルが見付かりません。

application.getRealPath(filename) ←の処理やってるの忘れてました。
まあ、でもばれちゃいますよね。

>>最後の / から前は捨ててから処理すれ、ということですね。

ここら辺の処理ってファイル名を引数で渡さないで、パターン分け
使うとかでは駄目ですか?単なるアプローチの違いだけですけど…
※引数が1の時はaのファイル、2の時はbのファイルとか

引数を直接使おうとすると、チェック関係が面倒くさいですよ。
最近ここら辺のセキュリティホールをチェックしてサイトを叩くのが
流行ってるみたいだし…
0030デフォルトの名無しさんNGNG
30!
0031デフォルトの名無しさんNGNG
だれかJSPタグのXML書式バージョンの一覧みたいなドキュメントが
のってるURL知らない?
0032xurasNGNG
>>11
>>何をしたいかは、XMLをサーバーにおいて
>>HTMLに変換した結果だけをクライアントに送りたいというもの。
サーバサイドXSLTということですね。Cocoonを使うのが一般的だと思いますが、
ここは折角JSPスレですので、JSPでXSLTというところに話しを絞りましょう。
JSPですから、もちろん自分でJDOM等でタグハンドラを書いても良いですが、
世の中にはしっかりOpenSourcesとして公開している人がいるので、
利用してみてはいかがですか? OpenSymphonyというプロジェクトです
ttp://www.opensymphony.com/transformtags/

利用に当たっては、以下のように記述するだけです。
<%@ page contentType='text/html; charset=Shift_JIS' %>
<%@ taglib uri="http://www.opensymphony.com/tags/xsl-tags.jar" prefix="xsl" %>
<xsl:xml xsl='/library/stylesheets/xuras.xsl' xslEncoding="Shift_JIS">
〜〜 XMLのソース 〜〜〜
</xsl:xml>

ただ、パーサやXSLTのライブラリのレベルに注意して下さい。DOM2レベルが
必要ですから、Tomcat3.2.x以下ですと、コンテナのLib配下にあるparser.jar,
jaxp.jarを削除して、xalan.jar、xerces.jar等を導入して下さい。

>>普通のプロバイダーで5MB容量でTelenet使えない我が環境では
>>どうすることもできないのだろうか?と悩んでる今日この頃。
容量的に無理だと思います。JREだけでも厳しいと思います。
shが使えないのもかなり不便です。Javaコマンドをどうやってたたきますか?
まあ、CGI経由でシェルコマンドを使えば何とかなりますが・・・。

>>サーバーサイドでJAVAで書かれたプログラムを動かして
>>HTML変換や、XML書き換えなんかはできないのですか?
Servletコンテナを使わずにやるのは、かなり難しいです。
たとえば、容量の件がクリアできたとして、JREを入れてJVMを起動できた
としても、問題になるのはWebServerへのHTTPリクエストを、どうやって
Javaクラスに通知するかというということです。C++レベルのCGIモジュール
を書いて、JNIでコールするとか、Javaクラスでサーバソケットを作って
待ち受けておいて、C++レベルのCGIモジュールからソケット経由で送るとか・・。
いずれにしても、Servletの何倍も難しいですし、高度なネイティブの
プログラミングスキルも必要です。

Servletの使えるWeb Hosting Serviceを利用するのが最も簡単です。
0033デフォルトの名無しさんNGNG
Servletの使えるWeb Hosting Serviceねぇ…(; ´Д`)
0034デフォルトの名無しさんNGNG
>>33
レン鯖板より。
http://pc.2ch.net/test/read.cgi/perl/1016218662/
0035デフォルトの名無しさんNGNG
Java ディベロッパ 待望の J2EE(TM)チュートリアル (日本語版)
PDFファイルダウンロード開始!!(全18章)
(※)J2EE チュートリアル日本語版のダウンロードには、SDC会員のIDとパスワ
ードが必要です。(無料)
http://jdc.sun.co.jp/j2ee/tutorial/

だってさ。
003633NGNG
>>34
お、どうもです。
でもやっぱり殆どが有料なのね(; ´Д`)
0037デフォルトの名無しさんNGNG
あげぇ
0038デフォルトの名無しさんNGNG
JSPでJavaScriptを使おうと思ったら動かないんですけど・・・

何故だかわかりますか?
0039デフォルトの名無しさんNGNG
JSP と JavaScript 、それぞれどんなものなのか分かってる?
0040デフォルトの名無しさんNGNG
JSPで

<%@ page contentType="text/html;charset=shift_jis" %>

<HTML>

<HEAD>
<TITLE</TITLE>
<META HTTP-EQUIV="Conten-Script-Type" CONTENT="text/JavaScript">
<SCRIPT LANGUAGE="JavaScript">
<%
out.println("function test(s){");
out.println("alert(s);");
out.println("}");
%>
</SCRIPT>
</HEAD>
<BODY onload="test(2)">

Javaのテスト<BR>
<INPUT TYPE="checkbox" onclick="test(1)">
</BODY>
</HTML>

こんな感じに作るとJavaScriptが動かないんですねよね(>_<)
0041Not 38NGNG
>>38 コンテナは何をご使用で?

>>39 JavaScriptからJSP内で使用の変数をいじくったりできます。
よって、39は死ね。 つーかね、死ね。
0042デフォルトの名無しさんNGNG
> JavaScriptからJSP内で使用の変数をいじくったりできます。

マジで言ってるのか誤解を覚悟で言ってるのかネタなのか...
0043デフォルトの名無しさんNGNG
>>40
ソースのコピペなのか?
だったらもう一度誤字脱字確認シル。
それでも動かなかったらまた聞け。
004438NGNG
コンテナですか?う〜んよくわかりませんm(__)m


一応ソフトとしては
Tomcat4.0.1
Java2SDK
が入っていてるのですけど・・・
0045デフォルトの名無しさんNGNG
>40=44
吐き出されたHTMLは、意図したモノか?
つーか、貼れ。
できれば、HTTP ヘッダも貼れ。
0046デフォルトの名無しさんNGNG
>>44
さくっと動いたけど???
環境はWindows2000/Tomcat 4.0.3/JDK1.4。
ちなみにブラウザはIEコンポーネント使用(IE6.0)のタブブラウザ。
0047デフォルトの名無しさんNGNG
さきほど動かした結果

http://localhost〜〜
で動かすとHTMLは出力されるのですが、JavaScriptがまったく動かず

http://000.000.000.000〜〜
で動かすと両方が実行されることがわかりました。
0048デフォルトの名無しさんNGNG
名前とパスワード、メールアドレスの登録をするWeb

register.jsp(HTMLフォームがある)
1↓
RegisterServletでrequest.getParameter〜 4→ registerOK.jsp or registerFailure.jsp
2↓ 3↑
RegisterBeans(データベースにアクセス)

んで、
名前、パス、メールがヌルだったら、エラー
名前が既に登録されていたら、エラー
ってどうやんの? 

今は、RegisterBeansで、
if else if else ,,,で判定して、
RegisterErrorというenumクラスのエラーをRegisterBeansが持ってるのですが。
(Name_is_null...Mail_is_null...etc)

これらは例外にするべき?
jsp,servlet,beansの分業というか、Java例外の使いっぷりとかよくわかりません。
0049デフォルトの名無しさんNGNG
>>48 はどっかで見たことあるな。
Servlet スレだったか。
0050デフォルトの名無しさんNGNG
>>49
register.jsp/RegisterServlet ってフレームワークを語るスレにクラス図
載せてなかったっけ? 何だったのあの図は?
0051デフォルトの名無しさんNGNG
あったぞ。
http://pc.2ch.net/test/read.cgi/tech/1012728608/715
719 が応えてるみたいだが?
0052デフォルトの名無しさんNGNG
これか?
http://pc.2ch.net/test/read.cgi/tech/1001950590/372
0053デフォルトの名無しさんNGNG
JSPでデータベース使うときって、コネクションをその人用に
割り当てるにはどうしたらいいでしょう?
staticなクラスかなんかでコネクションを持っておいて、
(まあコネクションプーリングでも何でもして)、それで
コネクションを張って、そうすれば、そのコネクションは
ライフサイクルが終わるまで生きていて、それを使い回す
かんじになるんでしょうか?
前回その人が使ったコネクションだということは、クッキーか
なんかで判別
0054デフォルトの名無しさんNGNG
>>53
ひょっとしてトランザクションを画面遷移に渡って維持しようとかんがえておまへんか。
それはデッドロックやフォーマンスの著しい劣化の原因になるのでやめれ。
0055デフォルトの名無しさんNGNG
>>53
何でコネクションを人に割り当てたいのか小一時間・・・
0056デフォルトの名無しさんNGNG
あーそうか。別につながってればなんでもいいか。
でも同じコネクションを同時に複数の人が使ったら
まずーですよね?
0057とある学生NGNG
Javaを覚えると、Script/Applet/Servlet/JSPに潰しがききそうなので、
最近勉強を始めたけど、この判断って間違い?

最終的には、JSPが扱えるようになりたいんですけど。
0058デフォルトの名無しさんNGNG
>>57
2chで聞くって判断が間違ってる。
0059デフォルトの名無しさんNGNG
>>53
そういう VB みたいな蔵鯖設計はサーバサイド Java では通用しないので
あしからず。
0060とある学生NGNG
>>58
かなり納得。
0061デフォルトの名無しさんNGNG
>>57
基本的にはOKだと思うよ。ただ、Javaは難しい。
Cを知ってる人向けに作られてるからな。
0062デフォルトの名無しさんNGNG
すみません、質問です。
何枚かのJSPの画面遷移をするシステムがあって、それらの
画面から一つの共通のJavaのインスタンスにアクセスしたい、
という場合はどうしたらいいんでしょう。
また、その共通のインスタンスはユーザごとに別にしたい、と
思ってます。例えば、ショッピングカートのようなモノを考えて
もらえればいいと思いますが。
そのような場合にはどのようにするのが一般的でしょうか?
0063デフォルトの名無しさんNGNG
ビーンは?
0064デフォルトの名無しさんNGNG
ビーンってそういう風に使うためのモノだったんですか。
知らなかった……。これ普通のクラスとどう違うんだろ、と
思ってました。
これって、全部の画面から使えて、ユーザごとには別のモノが
使われる、ってものなんでしょうか。
0065デフォルトの名無しさんNGNG
もっと本読め。
その手の話題は大抵の Servlet & JSP 本にあるだろ。
0066デフォルトの名無しさんNGNG
>>65
この辺はろくな説明ないよ、マジで。
おまえが読んだ本教えてやれ。
0067デフォルトの名無しさんNGNG
Session を使えばいいんじゃないか?
JSP なら useBean で scope=session でもアリか。
0068デフォルトの名無しさんNGNG
>>66
どうもです。
いや、マジでないです、ちゃんと解説してある本は。一応
一通り読んでるんですが、JavaBeansはこうすると使えるって
話は載ってるんですが、普通のクラスを使うのとどう違うのか
って話になると、まるで書いてないです。っていうか、引数なしの
デフォルトコンストラクタがあれば何でもいいんじゃないかって
気がしてます。まあプロパティがあればより便利、ってかんじで。
0069デフォルトの名無しさんNGNG
あー、なるほど。scopeっていうのがありましたね。
あれはそのセッションの間、ずっと使えるって意味ですか?
で、他からは使えない、という。
ところで、(質問ばっかりで申し訳ないんですが)、JSPでいうところ
のセッションの寿命ってどうやって決まるんでしょう。
一ヶ月後にそのユーザがそのJSPアクセスしても、まだその
セッションって生きてるんでしょうか?
0070デフォルトの名無しさんNGNG
ほんとに本を読んでる?
007167NGNG
>69
自分で調べろ
http://www.google.com/search?hl=ja&q=Servlet+Session+Timeout&lr=lang_ja
0072デフォルトの名無しさんNGNG
しかし、原田洋子のあの説明の下手くそさはなんとかならんのか。
0073けまNGNG
すんませんTPC/IPとIPX/SPXの違いってなんでしょうか?
0074デフォルトの名無しさんNGNG
すれ違いです。
0075デフォルトの名無しさんNGNG
>>69
普通死んでる。
大体のServletエンジンはsessionタイムアウトってやつを指定できる。
1ヶ月に指定すれば可能だけど、まずメモリ不足で落ちる。
普通はそういう情報はRDBMSとかファイルシステムに永続化する。
0076デフォルトの名無しさんNGNG
>>75
ありがとうございます。ちょっと本読みが足りないようなんで
さらに勉強します。
007776NGNG
>>72
同意です。
0078デフォルトの名無しさんNGNG
>>76
WroxのProffesional JSPがServlet/JSP本の中では比較的まともだと思います。
007976NGNG
>>78
ありがとうございます。早速探してみます。
0080デフォルトの名無しさんNGNG
JSP関係はマジでクソ本多い。俺もbeanのscopeの種類知りたくて
いろいろ読んだけど、避けてるんじゃないかと思うくらいにどれにも
載ってなかった。こんなのなんで説明しないんだ。信じられない。
結局Webで探してなんとかわかったって感じ。それも、説明してある
ページじゃなくて、いろんなソースを見て、あ、こんなのもあるんだ、
ってかんじで。
Web+DBプレスの「JSP+JavaBeans徹底活用」とかいう特集にも
載ってなかったからな。信じられん。
0081デフォルトの名無しさんNGNG
>>80
なんでJSPのspecを読まないのか。信じられん。
0082デフォルトの名無しさんNGNG
Web+DB屋は難しいことは理解できないのよ。
テンプレートに当てはめる単純作業にしてほしいと願ってるわけ。
scopeなんてどうでもいいよ。動けば。
0083デフォルトの名無しさんNGNG
JSPの中でbean使ってて、そのJSPからサーブレットをサブミットで
呼び出すとします。
そのサーブレットから、JSPの中で使ってたbean使うには
どうしたらいいんでしょう?
0084デフォルトの名無しさんNGNG
>83
どうにもなりません。
session.setAttribute を使いましょう。
0085デフォルトの名無しさんNGNG
え、beanのスコープがsessionやapplicationでも
ダメなんでしょうか。てっきりsessionオブジェクトの中に
暗黙で埋め込まれているかなんかだと思ってたんですが。
0086デフォルトの名無しさんNGNG
>85
JSP が .java ファイルに変換されて、それがコンパイルされる事は知ってるな?
その .java ファイルを読めば、どういう処理がされてるか一目瞭然。
TOMCAT だったら、 work ディレクトリの下に残ってるから読んでみそ。
0087デフォルトの名無しさんNGNG
読んでみました。
なんかサーブレットからも使えそうな気がするんですが、
「こういう場合は使えないんだよ、ばぁーか」って罠が
ありそうなんで、諦めることにします。
0088デフォルトの名無しさんNGNG
>>83
使えます。
sessionスコープで宣言すれば暗黙的にsessionオブジェクトに格納されます。
その後Servlet内でSessionオブジェクトを取得して問題なく処理できます。

>>84
>>86
コンパイル済みJSPを一度ご覧になってはいかがですか。
0089デフォルトの名無しさんNGNG
質問があります。
セッションオブジェクトaaaの値がOKだったら処理1を行うというロジックです。
この時、aaaというセッションオブジェクトが作成されてないとエラーになりますか?
jspでこのソースを書いているのですが、aaaに入ってる文字列がOKの場合とNGの場合はエラーになりません。
aaaというオブジェクトがない場合はどうやらJavaのエラーが出るみたいです。

Object obj = null;
obj = session.getAttribute("aaa");
if (obj != null) {
if ((String)obj.toUpperCase().equals("OK"));
    処理1
  }
}

aaaというオブジェクトが存在してもエラーを出さないようにしたいのですが、良い方法はないでしょうか?
宜しくお願いします。
0090デフォルトの名無しさんNGNG
>>89
スローされる例外を教えて
0091デフォルトの名無しさんNGNG
>>89

前半と後半の疑問文が噛み合っていないような気が…
009289NGNG
すみません、私、かなりの初心者だと思います。

%@ page info="xxx.jsp" %>
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%
response.setHeader("Pragma", "no-cache"); //for HTTP/1.0
response.setHeader("Cache-Control", "no-cache"); //for HTTP/1.1
response.setHeader("Cache-Control", "private"); // Proxy対策
response.setDateHeader("Expires", 0);

Object obj = null;
obj = session.getAttribute("aaa");
if (obj != null) {
if ((String)obj.toUpperCase().equals("OK"));
    処理1
  }
}
%>
<html><head>

こんな感じで書いてます。
スローさせる例外って分からないです。
0093デフォルトの名無しさんNGNG
>>92
そもそもキャストの仕方がおかしいね。
>>(String)obj.toUpperCase().equals("OK")
こうだ。
((String)obj).toUpperCase().equals("OK")

Nullチェックめんどくさいならこうしたら。
"OK".equal(obj);
009489NGNG
>>93
おお、裏技っぽいやり方ですね!!
"OK".equal(obj);ですか!!凄くためになります。

ちなみに
obj = session.getAttribute("aaa");
で、aaaというセッションオブジェクトが存在しない場合(値がNullではなく、何もない状態)
objにはNullって返ってくるのでしょうか?
0095デフォルトの名無しさんNGNG
ためしてみりゃわかるだろうに。
009693NGNG
>>94
nullだよ。
009789NGNG
>>96
ありがとうございます。
これで一安心です。
0098デフォルトの名無しさんNGNG
>>95
試した結果を仕様と思いこむタイプのヴァカ。
0099!95NGNG
しかし、

>objにはNullって返ってくるのでしょうか?

仕様かどうかはともかく、このくらいは試してみればすぐわかるだろうに。

試してみて、それが正しい動作なのか聞いているのなら、「null だよ」と
言われて、それで安心してしまうのもいかがなものかと。
0100100NGNG
100
0101101NGNG
101
0102デフォルトの名無しさんNGNG
>>98

仕様はわからんかもしれんけど実装はわかるんでないの…
nullを入れたらどうなるか(なるべきか)なんてとこまでServletAPIの「仕様」
で定義されてたっけ?
HttpSessionの入れ物としての実装にHashtableつかってるサーブレットコンテナ
もあればそうでないのもあるだろし
0103デフォルトの名無しさんNGNG
getAttribute
public java.lang.Object getAttribute(java.lang.String name)
Returns the object bound with the specified name in this session, or null if no object is bound under the name.

仕様読めよ。頼むから。

な。
0104デフォルトの名無しさんNGNG
Spec読むだけで、世の中の分厚いJSP本やServlet本を読む意味はほとんどなくなる。
Servlet本くらいならちょっとあるかも。
0105デフォルトの名無しさんNGNG
>>104
最初の取っ掛かりにはそういう本は欲しいよ。
でも少しかじったらリファレンスなり仕様のほうがはやいね。
0106デフォルトの名無しさんNGNG
そのspecつーのはどこで入手できるんですか?
SUNのサイトですか?
0107デフォルトの名無しさんNGNG
>>106

http://java.sun.com/products/jsp/technical.html
とか?
0108デフォルトの名無しさんNGNG
質問です。
JSPに送信されるGET型のデータで

ttp://〜〜?aaa=1&aaa=2&aaa=3&aaa=4&aaa=5&aaa=8...

と、いうデータを全て取得したいのですが、get.Parameter("aaa")では、先頭以外は
取得できないのですが、なにか別の方法やいい方法はないでしょうか?
0109デフォルトの名無しさんNGNG
getParameters ってなかったっけ?
0110108NGNG
>109
メソッド getParameters(java.lang.String) は interface javax.servlet.http.HttpServletRequest で見つかりません。
と、でましたが・・・
0111109NGNG
getParameterValues か。
0112108NGNG
>getParameterValues
出力される値が毎回変化しますが・・・(ワラ
0113デフォルトの名無しさんNGNG
String の配列で受け取って、数とか内容が毎回違うってこと?

0114デフォルトの名無しさんNGNG
>>112
内部でHashMap(table)使ってるからじゃん。
実装によっては、カスタマイズしたMapを使って順序を保存しているのもあると思うよ。
(未確認)
0115デフォルトの名無しさんNGNG
getParameterValues() は順序情報まで保証されていない。サーブレット
コンテナの実装依存 (たとえば今の WebSphere 3.5.3 は QUERY_STRING 順に
なるし)。順序も重要なら全部同じ名前にしない。
0116デフォルトの名無しさんNGNG
>aaa=1&aaa=2&aaa=3&aaa=4&aaa=5&aaa=8...

こんなのOKなの?RFC的には。
0117デフォルトの名無しさんNGNG
どうなの言う前に読んできたらどうよ。
0118116NGNG
>117

なんかカン違いしてない?
それがメンドいから2chで聞いてんじゃねーか。
調べる気があればとっくに調べてるっつーの。
0119デフォルトの名無しさんNGNG
勘違いしてるのはおめーのような気がするけど。
0120デフォルトの名無しさんNGNG
自分で調べるのめんどいんだよ。、お前ら暇だろうから
調べてこいや、ってわけか。
0121116NGNG
>120
その通り!分かったらとっとと調べてきてください。
ていうかぁー、優秀な2ちゃんねらー様なら調べるまでも無いんでしょ?w
ほら教えろよ。
0122デフォルトの名無しさんNGNG
>>121
氏ね
0123デフォルトの名無しさんNGNG
>>116
RFC 的に OK。名前をユニークしなければならないということはどこにも書かれていない。
便乗だけど空白を '+' に変換するって記述した RFC ってあったっけ?
0124デフォルトの名無しさんNGNG
RFC1866 の 8.2.1. The form-urlencoded Media Type に space characters are replaced by `+' って、これかな?
0125114NGNG
>>108
良く考えたら自分でQueryStringパースしたら100%確実じゃん。どうよ?
0126デフォルトの名無しさんNGNG
好きにせい。
0127デフォルトの名無しさんNGNG
>>125
そもそも QUERY_STRING がどういう順序で渡されるかはブラウザの実装依存。
大抵は HTML 内での出現順序だと思うが、そうなると今度は HTML のレイアウト
依存という意味になる。

>>124
サンクス!
0128デフォルトの名無しさんNGNG
>>127
そうか?
まずほとんどの実装で出現順とみなしていいと思うが。
0129つうかNGNG
>>128
仕様と慣例は区別すべき
0130デフォルトの名無しさんNGNG
すみません、質問です。
JSPでよく、↓こういうのやるじゃないですか?

<jsp:setProperty name="hoge" property="*" />

これって具体的に何をやってるんでしょう。
コメントアウトしても問題なく動作するし、生成された
Javaのソースをみても、該当するところがみつからない
んですけど。。

いろいろ本を読んで調べたんだけど、載ってません。
よろしくお願いします。
0131デフォルトの名無しさんNGNG
サーブレット、jspとxmlを使うシステムって何が主流なの?
以下の3つのうちから選んでください。

1.クライアントでxmlを変換
jspはxmlを記述しておき
xmlをクライアント側でxslとcssで変換する

もちろんクライアント側で変換するから
IE5.x以上でないと見れないっていう欠点はある。

2.サーバサイドでxmlを変換
Cocoonを使う
サーバ側でxmlをhtmlに変換するので
あんまりブラウザに依存しない

3.その他
・・・
0132デフォルトの名無しさんNGNG
>>130
とりあえずJSPをコンパイルしたソースが残るようにしてソース見れ
0133デフォルトの名無しさんNGNG
>>132
見たんですが、どうも該当するところが見つかりません。
0134デフォルトの名無しさんNGNG
>>133

132じゃないけど,んなあほな。
それに,答え的にはJSPの仕様をみれ。
<jsp:setProperty>タグのproperty属性に"*"を指定したときの
振る舞いがちゃんと記述されてる。
0135デフォルトの名無しさんNGNG
JSPに「仕様見ろ房」が多いのは、やはり英語のドキュメントしか
ないからだろうな。
0136デフォルトの名無しさんNGNG
>>135
その文の前半部と後半部がなぜ「やはり」で繋がる?
関連性がないと思うが

0137デフォルトの名無しさんNGNG
「仕様書読めよ(英語しかないけどね、あ、僕? 当然読んだよ
すらすらとね。キミだってわかるでしょ、あのくらいの英語。簡単だよね
アハーン?)」
ってこったろ。
0138デフォルトの名無しさんNGNG
「仕様書嫁(英語しかないけどね。え、俺?
英語わからないから説明してやれないんだよ。
スマソ。回線切って(以下略)」

って意味だったりしてな。
0139デフォルトの名無しさんNGNG
property="*"

Stores all of the values of request parameters in bean properties.
The names of the bean properties must match the names of the request parameters.
A bean property is usually defined by a variable declaration with matching getter and
setter methods (for more information, see http://java.sun.com/products/javabeans/docs/).


ごちゃごちゃ言わずに読めと。
http://java.sun.com/products/jsp/tags/12/syntaxref1216.html

いまさらだが、>1 にリンクが何もないのはちょっと残念だったな。
0140デフォルトの名無しさんNGNG
財産="*"

豆特性にリクエスト・パラメーターの値をすべて格納します。豆特性の名前は、
リクエスト・パラメーターの名前と一致するに違いありません。豆特性は、
一致するゲッターおよび作曲家方法(より多くの情報用の、
http://java.sun.com/製品/javabeansを見る/docs/)を備えた可変宣言によって
通常定義されます。
0141デフォルトの名無しさんNGNG
おまいら、ついでに Web 翻訳も載せてやるやさしさは無いのでスカ?

http://www.excite.co.jp/world/url/body/?wb_url=http%3A%2F%2Fjava.sun.com%2Fproducts%2Fjsp%2Ftags%2F12%2Fsyntaxref1216.html+&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=ENJA&wb_dis=2&wb_co=excitejapan
0142デフォルトの名無しさんNGNG
>>141
あんたそれは優しすぎ。w
0143デフォルトの名無しさんNGNG
豆特性ってなんかいいよね
0144デフォルトの名無しさんNGNG
>>142
そうっすか、スマン。

ところでさ、JSP ってサーブレットにコンパイルしてメモリ上に常駐するっつーのが
定番だよね。ってことは 1 ページあたり数百 kB のコンテンツを数百ページも作る
場合に (たいしたことしてないのに) すべて JSP にするのってめちゃくちゃ無駄に
メモリを圧迫するよね。サーブレットのアンロードはコンテナ依存だし、大げさに
したくないのでデータベースとか使いたくないし、うーんどうしようかな。
いや、ただの日記とか Tip とか読み物とか載せるサイトなんだけど、ブラウザの
挙動に依存したくないのでなるべくサーバサイドで処理させたいし、という悩み
なんだけどね。
0145デフォルトの名無しさんNGNG
動的な日記というのはおもしろいアイディアですな。
0146デフォルトの名無しさんNGNG
>動的な日記というのはおもしろいアイディアですな。

腐るほどあるかと。
0147デフォルトの名無しさんNGNG
そうなん?
読むたびに内容が変わってるとか?
0148デフォルトの名無しさんNGNG
>>147
ファイルの最終更新日とか (画像じゃない) アクセスカウンタとか。
またはページ共通ヘッダ・フッタを別ファイルにしたり広告入れたりとか。
何かの値や URL を設定ファイルに出しておきたいとか。
多分そんな話だろうと思う。
0149デフォルトの名無しさんNGNG
age
0150動的日記NGNG
今日、営業サボってパチンコ行って時間つぶしたけど、
上司には、たまたま飛び込みで行った会社の社長が、
自分の高校の同級生だったから、とウソをついた。

今まで、「子供と買い物に行った」ことが書いてあった3年後の日記が、
「滞納した家賃をやっと1月分払った」に変わっていた…
0151デフォルトの名無しさんNGNG
未来予想図 III
0152デフォルトの名無しさんNGNG
保守としてあげておく
0153デフォルトの名無しさんNGNG
メニューに表示する情報がDBに入っているのですが、
この情報の読込みをservletのinitのように最初の一回
だけにすることをJSPで実現する方法はありますか?
0154デフォルトの名無しさんNGNG
<%!
  static{
    ...
  }
%>
0155デフォルトの名無しさんNGNG
>154
これは、可変のデータにもつかえるのでしょうか?
固定の文字の場合、よく使いますが、最初の一回だけ、
DBのデータを動的に設定したいのですが。できます?
0156デフォルトの名無しさんNGNG
>>155
先にスタティックイニシャライザについて検索して濃い。
0157名無しさん@XEmacsNGNG
<%!
public void jspInit(){
}
%>

だろ。この場合。
0158デフォルトの名無しさんNGNG
>>157

狂おしく同意
0159デフォルトの名無しさんNGNG
なんかカン違いしてない?
それがメンドいから2chで聞いてんじゃねーか。
調べる気があればとっくに調べてるっつーの。
0160デフォルトの名無しさんNGNG
じゃ教えない
0161デフォルトの名無しさんNGNG
>>159
こういう奴には教えたくない、な?>>all
0162デフォルトの名無しさんNGNG
jspからweb.xmlの<web-app>〜<context-param>のパラメータを得ようと思います
getServletContext().getInitParameter()を使えば出来るようですが、
これをサーブレットではなくjspから使うことはできるのでしょうか?

0163デフォルトの名無しさんNGNG
>>162
String param = application.getInitParameter("hoge");
0164デフォルトの名無しさんNGNG
Servlet <---> jspの連動絡みで質問があります。

下のようにServletとjspを呼ぶようにしてアプリをつくろうと思っているのですが、
1から2に進むところでIEのアドレスバーに表示されるURLと画面表示の内容がずれてしまい
詰まっています。

1. Servlet(aaa.java)--->jsp(bbb.jsp)
2.--->Servlet(bbb.java)--->jsp(ccc.jsp)
3.--->Servlet(ccc.java)--->jsp(ddd.jsp)

各画面ではボタンやリンクをHTMLで記述して
次の処理を選択できるようにします。

まず最初にaaa.javaのdoGetでaaa.jspを呼んでトップ画面を表示
1.ではボタンを押したらaaa.javaのdoPostでbbb.jspを呼んで次の画面に切り替わる
2.ではボタンを押したらbbb.javaのdoPostでccc.jspを呼んで次の画面に切り替わる
という処理をイメージしているのですが、実際これをやると
IEのアドレスバーに表示されるURLと画面表示の内容がずれてしまいます。
アドレスバーはjspを呼ぶだけでは変わるはずもなく
Servletが呼ばれたときに変わっているようで
このつくりでは仕方ないことなのかも知れませんが・・・

この問題をなんとかしたいのですがうまい解決策はあるでしょうか?
要はjspで画面を切り替える(書き換えるときに)servletのdoGetを呼べるような
つくりにできれば理想なのですが・・・

ご助言どうぞよろしくお願いします。

0165デフォルトの名無しさんNGNG
sendRedirect でやれや
0166デフォルトの名無しさんNGNG
>>164

165に同意。明示的にブラウザから投げなおさせないとそういう
ことはできない。sendRedirectでHTTPステータスコード302を返すか,
ダミーのページ+JavaScript送ってやるか
0167デフォルトの名無しさんNGNG
>>165-166
助言有難うございます。当面の問題は解決できたようです。
9末から悩んでいましたが、164のままではどうあがいてもだめだったのですね。

sendRedirectを使う手法が一般的かどうか、
それ以前に>>164の作りが一般的といえるのかは分かりませんが、
このままもう少し進めてみます。


0168デフォルトの名無しさんNGNG
からage からage!
0169デフォルトの名無しさんNGNG
未来予想図 III
0170デフォルトの名無しさんNGNG
ビューとして使うJSPを、ユーザーから直接参照させないようにしたい。
(MVC2モデルで言うところのビューです)

たとえばStruts関連のドキュメントで「/WEB-INF以下に配置する」とか書いてあったのを見かけたけど、
これはどのServletコンテナでも共通に使えるのかな。

JSPを隠して配置するにはおそらく/WEB-INF以下に置くことになるんだろうけど、
 ・これを通常のJSPとしてコンテナがコンパイルしてくれるやり方
 ・JSPをjarなりのリソースとして配置できるのかどうか
なんてことが知りたい。
拡張子 .jsp を JSPコンパイラ起動のスイッチにしてるようなコンテナの場合にもうまく動くのかな。
これでキマリ的な手法があればぜひ知りたいです。
0171デフォルトの名無しさんNGNG
shr
0172デフォルトの名無しさんNGNG
教えてください。下のコードはサーブレットの一部を取り出したものです。
フレームありの画面からこのサーブレットでフレーム無しのtest.jsp
を表示させたいのですが、この中にどういうコードを埋め込めばフレーム無し
の画面を表示させることができるのでしょうか。
詳しい方、ご教授お願いします。
out.println("<HTML>");
out.println("<HEAD><TITLE> </TITLE>");
out.println("<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"0;URL=http://localhost:8080/jsp10/syorui_jsp/test.jsp\">");
out.println("</HEAD>");
out.println("</HTML>");
0173デフォルトの名無しさんNGNG
>>172
HTMLの勉強して出直せ。
0174U ◆CZtFsGiu0c NGNG
>>172
まず、なぜRefershを使うのか書いてください。フレーム内のページからリンクなり
ボタンなりでフレームなしのウィンドウに遷移するのならtarget属性を指定すれば
いいんですが、METAタグにはtargetは指定できません。
0175デフォルトの名無しさんNGNG
HTMLスレじゃん。
0176デフォルトの名無しさんNGNG
チキイ
0177デフォルトの名無しさんNGNG
>>170
自分で試せ&レポートしる
0178デフォルトの名無しさんNGNG
こんな便利なタグリブ作った!
って、人。情報くれ。
どんなタグリブなのか・・・
0179デフォルトの名無しさんNGNG
>>172
BODYタグで『onLoad="top.location.href='http://www.2ch.net/';"』汁!






ってこりゃ、HTMLかJSの質問だ罠。
0180170NGNG
JSPファイルを直接リクエストから隠す方法について。

調べてみたら、JavaServlet 2.3 Specification には明確に
「WEB-INFのファイルもサーブレットのコードからアクセスできる」
旨のことが書いてあった。

2.2 準拠のサーブレットコンテナの中には、アクセスできないものもあるらしい。
それが2.3で明確に仕様上 OK だとされた。

いままで Specification は差分しか読んでなかったけど、
改めて読むと発見がある。
ためになったよ。
■ このスレッドは過去ログ倉庫に格納されています