JSPに関するQAスレッド

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

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

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

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

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

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

日本語おかしくない?
11 :02/03/12 20:18
なかなか盛り上がりませんね。

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

JAVAのAppletをとりあえず作って完成したので
サーバーサイドのJAVAプログラムを作ってみようと考えています。
何をしたいかは、XMLをサーバーにおいて
HTMLに変換した結果だけをクライアントに送りたいというもの。
簡単な実験のつもりで、いろいろサーブレット・JSPについて調べてみたら
サーバー側にJRunとJSDKが必要とか書いてあるし、
Apacheの設定なども必要らしい?
普通のプロバイダーで5MB容量でTelenet使えない我が環境では
どうすることもできないのだろうか?と悩んでる今日この頃。
もしかして普通のJAVAアプリ入れれば普通に動くとかいう落ちがあるかもしれないが
こんな環境の俺が、サーブレットとは言わないが
サーバーサイドでJAVAで書かれたプログラムを動かして
HTML変換や、XML書き換えなんかはできないのですか?
厨な環境は、CGIでもやってろということになるのですか?
(スレ・板違いならスマソ)
Tomcat4.0.3 辺りを Linux か WinNT/2000 コンソールで動かしてはいかが?
以下は、
(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 等をきちんと扱う必要がある.
*/
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);
  }
 }

 /**
  * 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]);
   }
  }
 }

 /**
  * 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;
 }

 /**
  * 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();

   } 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());
   }

  }
 }

 // 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;
   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);
  }

  public void setPIVector(java.util.Vector vec) {
   this.vec = vec;
  }

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

  public Document getDocument() {
   // SAX2DOM変換により、DOMを生成する.
   
  }
 }
}
----- ここまで -----
#花粉症で頭がぼーっとしたとはいえ、
変な事やっちゃった事に気付いた、、、スマソ
2311:02/03/12 21:10
>>12-22
とっても親切に感謝。

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

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

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


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

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

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. こういうやりかたでいいんでしょーか。

25デフォルトの名無しさん:02/03/20 00:00
>>24
あ〜一応答えます。

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

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

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

もし、sourceview.jsp?filename=/etc/passwd を実行されたらどうします?
2625:02/03/20 00:05
ついで・・・

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

ソースをまんま貼っちゃうとスレの可読性が失われちゃいますよ。
2724:02/03/20 00:54
>>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
(以下略)
となりました。…欝だ氏のう。

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

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

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

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

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

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

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

引数を直接使おうとすると、チェック関係が面倒くさいですよ。
最近ここら辺のセキュリティホールをチェックしてサイトを叩くのが
流行ってるみたいだし…
30!
31デフォルトの名無しさん:02/04/21 15:05
だれかJSPタグのXML書式バージョンの一覧みたいなドキュメントが
のってるURL知らない?
32xuras:02/04/24 12:51
>>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を利用するのが最も簡単です。
Servletの使えるWeb Hosting Serviceねぇ…(; ´Д`)
35デフォルトの名無しさん:02/04/24 15:44
Java ディベロッパ 待望の J2EE(TM)チュートリアル (日本語版)
PDFファイルダウンロード開始!!(全18章)
(※)J2EE チュートリアル日本語版のダウンロードには、SDC会員のIDとパスワ
ードが必要です。(無料)
http://jdc.sun.co.jp/j2ee/tutorial/

だってさ。
3633:02/04/24 18:36
>>34
お、どうもです。
でもやっぱり殆どが有料なのね(; ´Д`)
37デフォルトの名無しさん:02/05/23 23:19
あげぇ
38デフォルトの名無しさん:02/06/06 16:31
JSPでJavaScriptを使おうと思ったら動かないんですけど・・・

何故だかわかりますか?
JSP と JavaScript 、それぞれどんなものなのか分かってる?
40デフォルトの名無しさん:02/06/06 16:58
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が動かないんですねよね(>_<)
41Not 38:02/06/06 17:02
>>38 コンテナは何をご使用で?

>>39 JavaScriptからJSP内で使用の変数をいじくったりできます。
よって、39は死ね。 つーかね、死ね。
> JavaScriptからJSP内で使用の変数をいじくったりできます。

マジで言ってるのか誤解を覚悟で言ってるのかネタなのか...
>>40
ソースのコピペなのか?
だったらもう一度誤字脱字確認シル。
それでも動かなかったらまた聞け。
4438:02/06/06 17:20
コンテナですか?う〜んよくわかりませんm(__)m


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

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

http://000.000.000.000〜〜
で動かすと両方が実行されることがわかりました。
48デフォルトの名無しさん:02/06/07 12:52
名前とパスワード、メールアドレスの登録をする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例外の使いっぷりとかよくわかりません。
>>48 はどっかで見たことあるな。
Servlet スレだったか。
>>49
register.jsp/RegisterServlet ってフレームワークを語るスレにクラス図
載せてなかったっけ? 何だったのあの図は?
あったぞ。
http://pc.2ch.net/test/read.cgi/tech/1012728608/715
719 が応えてるみたいだが?
53デフォルトの名無しさん:02/06/14 12:10
JSPでデータベース使うときって、コネクションをその人用に
割り当てるにはどうしたらいいでしょう?
staticなクラスかなんかでコネクションを持っておいて、
(まあコネクションプーリングでも何でもして)、それで
コネクションを張って、そうすれば、そのコネクションは
ライフサイクルが終わるまで生きていて、それを使い回す
かんじになるんでしょうか?
前回その人が使ったコネクションだということは、クッキーか
なんかで判別
54デフォルトの名無しさん:02/06/14 13:04
>>53
ひょっとしてトランザクションを画面遷移に渡って維持しようとかんがえておまへんか。
それはデッドロックやフォーマンスの著しい劣化の原因になるのでやめれ。
>>53
何でコネクションを人に割り当てたいのか小一時間・・・
56デフォルトの名無しさん:02/06/14 22:46
あーそうか。別につながってればなんでもいいか。
でも同じコネクションを同時に複数の人が使ったら
まずーですよね?
57とある学生:02/06/14 23:53
Javaを覚えると、Script/Applet/Servlet/JSPに潰しがききそうなので、
最近勉強を始めたけど、この判断って間違い?

最終的には、JSPが扱えるようになりたいんですけど。
58デフォルトの名無しさん:02/06/15 00:08
>>57
2chで聞くって判断が間違ってる。
>>53
そういう VB みたいな蔵鯖設計はサーバサイド Java では通用しないので
あしからず。
60とある学生:02/06/15 00:39
>>58
かなり納得。
61デフォルトの名無しさん:02/06/15 12:17
>>57
基本的にはOKだと思うよ。ただ、Javaは難しい。
Cを知ってる人向けに作られてるからな。
62デフォルトの名無しさん:02/06/15 17:36
すみません、質問です。
何枚かのJSPの画面遷移をするシステムがあって、それらの
画面から一つの共通のJavaのインスタンスにアクセスしたい、
という場合はどうしたらいいんでしょう。
また、その共通のインスタンスはユーザごとに別にしたい、と
思ってます。例えば、ショッピングカートのようなモノを考えて
もらえればいいと思いますが。
そのような場合にはどのようにするのが一般的でしょうか?
ビーンは?
64デフォルトの名無しさん:02/06/15 17:57
ビーンってそういう風に使うためのモノだったんですか。
知らなかった……。これ普通のクラスとどう違うんだろ、と
思ってました。
これって、全部の画面から使えて、ユーザごとには別のモノが
使われる、ってものなんでしょうか。
もっと本読め。
その手の話題は大抵の Servlet & JSP 本にあるだろ。
>>65
この辺はろくな説明ないよ、マジで。
おまえが読んだ本教えてやれ。
Session を使えばいいんじゃないか?
JSP なら useBean で scope=session でもアリか。
68デフォルトの名無しさん:02/06/15 19:05
>>66
どうもです。
いや、マジでないです、ちゃんと解説してある本は。一応
一通り読んでるんですが、JavaBeansはこうすると使えるって
話は載ってるんですが、普通のクラスを使うのとどう違うのか
って話になると、まるで書いてないです。っていうか、引数なしの
デフォルトコンストラクタがあれば何でもいいんじゃないかって
気がしてます。まあプロパティがあればより便利、ってかんじで。
69デフォルトの名無しさん:02/06/15 19:08
あー、なるほど。scopeっていうのがありましたね。
あれはそのセッションの間、ずっと使えるって意味ですか?
で、他からは使えない、という。
ところで、(質問ばっかりで申し訳ないんですが)、JSPでいうところ
のセッションの寿命ってどうやって決まるんでしょう。
一ヶ月後にそのユーザがそのJSPアクセスしても、まだその
セッションって生きてるんでしょうか?
ほんとに本を読んでる?
7167:02/06/15 19:21
しかし、原田洋子のあの説明の下手くそさはなんとかならんのか。
73けま:02/06/15 19:34
すんませんTPC/IPとIPX/SPXの違いってなんでしょうか?
すれ違いです。
75デフォルトの名無しさん:02/06/15 19:40
>>69
普通死んでる。
大体のServletエンジンはsessionタイムアウトってやつを指定できる。
1ヶ月に指定すれば可能だけど、まずメモリ不足で落ちる。
普通はそういう情報はRDBMSとかファイルシステムに永続化する。
>>75
ありがとうございます。ちょっと本読みが足りないようなんで
さらに勉強します。
7776:02/06/15 19:45
>>72
同意です。
78デフォルトの名無しさん:02/06/15 19:51
>>76
WroxのProffesional JSPがServlet/JSP本の中では比較的まともだと思います。
7976:02/06/15 20:17
>>78
ありがとうございます。早速探してみます。
80デフォルトの名無しさん:02/06/15 21:06
JSP関係はマジでクソ本多い。俺もbeanのscopeの種類知りたくて
いろいろ読んだけど、避けてるんじゃないかと思うくらいにどれにも
載ってなかった。こんなのなんで説明しないんだ。信じられない。
結局Webで探してなんとかわかったって感じ。それも、説明してある
ページじゃなくて、いろんなソースを見て、あ、こんなのもあるんだ、
ってかんじで。
Web+DBプレスの「JSP+JavaBeans徹底活用」とかいう特集にも
載ってなかったからな。信じられん。
>>80
なんでJSPのspecを読まないのか。信じられん。
Web+DB屋は難しいことは理解できないのよ。
テンプレートに当てはめる単純作業にしてほしいと願ってるわけ。
scopeなんてどうでもいいよ。動けば。
83デフォルトの名無しさん:02/06/16 22:10
JSPの中でbean使ってて、そのJSPからサーブレットをサブミットで
呼び出すとします。
そのサーブレットから、JSPの中で使ってたbean使うには
どうしたらいいんでしょう?
>83
どうにもなりません。
session.setAttribute を使いましょう。
85デフォルトの名無しさん:02/06/16 23:55
え、beanのスコープがsessionやapplicationでも
ダメなんでしょうか。てっきりsessionオブジェクトの中に
暗黙で埋め込まれているかなんかだと思ってたんですが。
>85
JSP が .java ファイルに変換されて、それがコンパイルされる事は知ってるな?
その .java ファイルを読めば、どういう処理がされてるか一目瞭然。
TOMCAT だったら、 work ディレクトリの下に残ってるから読んでみそ。
87デフォルトの名無しさん:02/06/17 01:36
読んでみました。
なんかサーブレットからも使えそうな気がするんですが、
「こういう場合は使えないんだよ、ばぁーか」って罠が
ありそうなんで、諦めることにします。
88デフォルトの名無しさん:02/06/17 09:10
>>83
使えます。
sessionスコープで宣言すれば暗黙的にsessionオブジェクトに格納されます。
その後Servlet内でSessionオブジェクトを取得して問題なく処理できます。

>>84
>>86
コンパイル済みJSPを一度ご覧になってはいかがですか。
89デフォルトの名無しさん:02/06/17 12:44
質問があります。
セッションオブジェクト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というオブジェクトが存在してもエラーを出さないようにしたいのですが、良い方法はないでしょうか?
宜しくお願いします。
90デフォルトの名無しさん:02/06/17 13:14
>>89
スローされる例外を教えて
>>89

前半と後半の疑問文が噛み合っていないような気が…
9289:02/06/17 14:43
すみません、私、かなりの初心者だと思います。

%@ 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>

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

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

ちなみに
obj = session.getAttribute("aaa");
で、aaaというセッションオブジェクトが存在しない場合(値がNullではなく、何もない状態)
objにはNullって返ってくるのでしょうか?
ためしてみりゃわかるだろうに。
9693:02/06/17 16:23
>>94
nullだよ。
9789:02/06/17 16:34
>>96
ありがとうございます。
これで一安心です。
>>95
試した結果を仕様と思いこむタイプのヴァカ。
99!95:02/06/18 04:51
しかし、

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

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

試してみて、それが正しい動作なのか聞いているのなら、「null だよ」と
言われて、それで安心してしまうのもいかがなものかと。
100100:02/06/18 11:50
100
101101:02/06/18 23:04
101
>>98

仕様はわからんかもしれんけど実装はわかるんでないの…
nullを入れたらどうなるか(なるべきか)なんてとこまでServletAPIの「仕様」
で定義されてたっけ?
HttpSessionの入れ物としての実装にHashtableつかってるサーブレットコンテナ
もあればそうでないのもあるだろし
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.

仕様読めよ。頼むから。

な。
Spec読むだけで、世の中の分厚いJSP本やServlet本を読む意味はほとんどなくなる。
Servlet本くらいならちょっとあるかも。
>>104
最初の取っ掛かりにはそういう本は欲しいよ。
でも少しかじったらリファレンスなり仕様のほうがはやいね。
106デフォルトの名無しさん:02/06/22 13:09
そのspecつーのはどこで入手できるんですか?
SUNのサイトですか?
108デフォルトの名無しさん:02/06/24 17:21
質問です。
JSPに送信されるGET型のデータで

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

と、いうデータを全て取得したいのですが、get.Parameter("aaa")では、先頭以外は
取得できないのですが、なにか別の方法やいい方法はないでしょうか?
getParameters ってなかったっけ?
110108:02/06/24 17:30
>109
メソッド getParameters(java.lang.String) は interface javax.servlet.http.HttpServletRequest で見つかりません。
と、でましたが・・・
111109:02/06/24 17:42
getParameterValues か。
112108:02/06/24 18:00
>getParameterValues
出力される値が毎回変化しますが・・・(ワラ
String の配列で受け取って、数とか内容が毎回違うってこと?

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

こんなのOKなの?RFC的には。
どうなの言う前に読んできたらどうよ。
118116:02/06/24 20:50
>117

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

>>124
サンクス!
128デフォルトの名無しさん:02/06/25 12:50
>>127
そうか?
まずほとんどの実装で出現順とみなしていいと思うが。
129つうか:02/06/25 13:09
>>128
仕様と慣例は区別すべき
130デフォルトの名無しさん:02/07/05 20:06
すみません、質問です。
JSPでよく、↓こういうのやるじゃないですか?

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

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

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

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

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

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

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

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

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

って意味だったりしてな。
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 にリンクが何もないのはちょっと残念だったな。
財産="*"

豆特性にリクエスト・パラメーターの値をすべて格納します。豆特性の名前は、
リクエスト・パラメーターの名前と一致するに違いありません。豆特性は、
一致するゲッターおよび作曲家方法(より多くの情報用の、
http://java.sun.com/製品/javabeansを見る/docs/)を備えた可変宣言によって
通常定義されます。
>>141
あんたそれは優しすぎ。w
豆特性ってなんかいいよね
>>142
そうっすか、スマン。

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

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

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

だろ。この場合。
>>157

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

>>162
String param = application.getInitParameter("hoge");
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を呼べるような
つくりにできれば理想なのですが・・・

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

sendRedirect でやれや
>>164

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

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


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

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

JSPを隠して配置するにはおそらく/WEB-INF以下に置くことになるんだろうけど、
 ・これを通常のJSPとしてコンテナがコンパイルしてくれるやり方
 ・JSPをjarなりのリソースとして配置できるのかどうか
なんてことが知りたい。
拡張子 .jsp を JSPコンパイラ起動のスイッチにしてるようなコンテナの場合にもうまく動くのかな。
これでキマリ的な手法があればぜひ知りたいです。
171デフォルトの名無しさん:02/11/20 13:05
shr
172デフォルトの名無しさん:02/11/21 19:25
教えてください。下のコードはサーブレットの一部を取り出したものです。
フレームありの画面からこのサーブレットでフレーム無しの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>");
173デフォルトの名無しさん:02/11/21 23:11
>>172
HTMLの勉強して出直せ。
174U ◆CZtFsGiu0c :02/11/22 02:21
>>172
まず、なぜRefershを使うのか書いてください。フレーム内のページからリンクなり
ボタンなりでフレームなしのウィンドウに遷移するのならtarget属性を指定すれば
いいんですが、METAタグにはtargetは指定できません。
HTMLスレじゃん。
176デフォルトの名無しさん:02/12/01 14:18
チキイ
177デフォルトの名無しさん:02/12/01 14:44
>>170
自分で試せ&レポートしる
こんな便利なタグリブ作った!
って、人。情報くれ。
どんなタグリブなのか・・・
179デフォルトの名無しさん:02/12/02 00:41
>>172
BODYタグで『onLoad="top.location.href='http://www.2ch.net/';"』汁!






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

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

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

いままで Specification は差分しか読んでなかったけど、
改めて読むと発見がある。
ためになったよ。