JSPに関するQAスレッド
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGなぜかありません。
JSPのみで構成されるWebアプリケーションもある昨今、
・JSP1.0,1.1,1.2の細かな仕様の違いに混乱している人
・ServletとEJBとのうまい連携の仕方に苦労している人
・XML記述形式のJSPに慣れそうもない人
・便利なtaglibを自慢したい人
などなど、皆さんマターリ語り合いましょう。
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG必死だ。その理由には次のようなことが考えられる。
まず「1000まで待てない」ということが挙げられるだろう。
辛抱・我慢といった観念は既になく、思ったことをそのまま行動に繋げる計画性
のなさがある。これは最近の「すぐキレる若者」の特徴に類似している。
次に、例えば1000だった場合、1000レス目が最後の書き込みとあり、1001番目は
反映されない。これはまさに「成功か失敗か」の問題だったのだ。
しかし「2」は違う。2をとれなくても3や4、もしくは5〜までの書き込みに
、自らのレスが反映される。成功しなくても自分の行為が反映されるのだ。
そこにはもはや「成功と失敗」といった、片方だけの存在はない。
1000では失敗すれば誰も自分の書き込みを見てくれず、表示される警告文を一人
見るだけだったが、2を取れなくても、自分のしたことが反映されるため
「2じゃなかったけど、まあいいか」といった気持ちに繋がる。これは現在増え
ている「フリーター」の心理に他ならない。
そして多くのものは、「なぜ2番目のレスを取ることの速さを競うのか」を考え
たことはないだろう。他人がやっているから自分もやる。または、他人の2を取る
のを邪魔してやりたい、といったことがあると考えれる。これはまさに「明確な
自己意識がなく他人に振り回される」「人の足を引っ張ることに快感を覚える」
という、現代若者の特徴を描き出しているのだ。
問題の真相は後回しにし、内容のない書き込みを続ける。さながらワイドショー
並みの愚かさが、そこにはあるのだ。
0004デフォルトの名無しさん
NGNG晒しage
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGTeaの方が、良い。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGJSPばかりが選択肢でないのは確かだろう。
しかし、DreamWeaverとかでHTMLを編集できるのは現時点ではJSPだけ。
0010デフォルトの名無しさん
NGNGどういうこと?
>DreamWeaverとかでHTMLを編集できるのは現時点ではJSPだけ。
日本語おかしくない?
0011
NGNGここで、目先をかえて質問(マジレス)
JAVAのAppletをとりあえず作って完成したので
サーバーサイドのJAVAプログラムを作ってみようと考えています。
何をしたいかは、XMLをサーバーにおいて
HTMLに変換した結果だけをクライアントに送りたいというもの。
簡単な実験のつもりで、いろいろサーブレット・JSPについて調べてみたら
サーバー側にJRunとJSDKが必要とか書いてあるし、
Apacheの設定なども必要らしい?
普通のプロバイダーで5MB容量でTelenet使えない我が環境では
どうすることもできないのだろうか?と悩んでる今日この頃。
もしかして普通のJAVAアプリ入れれば普通に動くとかいう落ちがあるかもしれないが
こんな環境の俺が、サーブレットとは言わないが
サーバーサイドでJAVAで書かれたプログラムを動かして
HTML変換や、XML書き換えなんかはできないのですか?
厨な環境は、CGIでもやってろということになるのですか?
(スレ・板違いならスマソ)
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
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デフォルトの名無しさん
NGNGstatic 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// '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// 注: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デフォルトの名無しさん
NGNGthis.vec = vec;
}
public java.util.Vector getPIVector() {
return this.vec;
}
public Document getDocument() {
// SAX2DOM変換により、DOMを生成する.
}
}
}
0022デフォルトの名無しさん
NGNG#花粉症で頭がぼーっとしたとはいえ、
変な事やっちゃった事に気付いた、、、スマソ
002311
NGNGとっても親切に感謝。
でも、別のスレ「初心者歓迎! Java相談室 その6 」で私の環境での
結論は出てしまいました。
291 :消防 :02/03/12 20:59
>>288
HPで動かしてみたいのです。
(なんというワガママぶり)
292 :デフォルトの名無しさん :02/03/12 21:01
>291
じゃ、無理。
とにかく、いつの日かホスティングなどで
自分のサーバーを手に入れたら、
このコード参考にしてやってみます。
0024デフォルトの名無しさん
NGNGOS: 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あ〜一応答えます。
/var/www うんぬんはdebian使いでも無いし、実際にconf以下のファイルを
みてるわけでは無いので何とも言えないですが、ファイルパスについては
相対パスで考えているのが問題かと思います。
普通 /ローカルアドレス/sourceview.jsp って感じで絶対パスで書きません?
あと、蛇足ですけど↓の部分は危険なんで絶対実装しちゃだめですよ。
> String filename = request.getParameter("filename");
もし、sourceview.jsp?filename=/etc/passwd を実行されたらどうします?
002625
NGNG>>12-22
ソースが公開されているのであればリンクを貼っておくだけで
良いと思います。
公開されていないものであっても、全部貼るのではなく要所だけ
ピックアップにしてもらえると助かります。
ソースをまんま貼っちゃうとスレの可読性が失われちゃいますよ。
002724
NGNG絶対パスっていうのは、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-22
NGNG花粉症でグシュグシュして、頭がボーっとして、
気付いたらソースを全部張り終えていたんですぅー。
#3年近く前のソースだし、Xalan と Xerces直呼びだし、参考になんないっすよねー。
002925
NGNG>>そういうアプローチで良いでしょうか?
考え方的にはそれでオッケーだと思います。
あらかじめファイル置き場を限定しておくならアプリケーションパス
わざわざ通さないで、定数でやっちゃった方がやりやすい気が・・・
>>/usr/local/tomcat/webapps/test/etc/passwd ファイルが見付かりません。
application.getRealPath(filename) ←の処理やってるの忘れてました。
まあ、でもばれちゃいますよね。
>>最後の / から前は捨ててから処理すれ、ということですね。
ここら辺の処理ってファイル名を引数で渡さないで、パターン分け
使うとかでは駄目ですか?単なるアプローチの違いだけですけど…
※引数が1の時はaのファイル、2の時はbのファイルとか
引数を直接使おうとすると、チェック関係が面倒くさいですよ。
最近ここら辺のセキュリティホールをチェックしてサイトを叩くのが
流行ってるみたいだし…
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGのってるURL知らない?
0032xuras
NGNG>>何をしたいかは、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デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGレン鯖板より。
http://pc.2ch.net/test/read.cgi/perl/1016218662/
0035デフォルトの名無しさん
NGNGPDFファイルダウンロード開始!!(全18章)
(※)J2EE チュートリアル日本語版のダウンロードには、SDC会員のIDとパスワ
ードが必要です。(無料)
http://jdc.sun.co.jp/j2ee/tutorial/
だってさ。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG何故だかわかりますか?
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG<%@ 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が動かないんですねよね(>_<)
0042デフォルトの名無しさん
NGNGマジで言ってるのか誤解を覚悟で言ってるのかネタなのか...
0043デフォルトの名無しさん
NGNGソースのコピペなのか?
だったらもう一度誤字脱字確認シル。
それでも動かなかったらまた聞け。
004438
NGNG一応ソフトとしては
Tomcat4.0.1
Java2SDK
が入っていてるのですけど・・・
0045デフォルトの名無しさん
NGNG吐き出されたHTMLは、意図したモノか?
つーか、貼れ。
できれば、HTTP ヘッダも貼れ。
0046デフォルトの名無しさん
NGNGさくっと動いたけど???
環境はWindows2000/Tomcat 4.0.3/JDK1.4。
ちなみにブラウザはIEコンポーネント使用(IE6.0)のタブブラウザ。
0047デフォルトの名無しさん
NGNGhttp://localhost〜〜
で動かすとHTMLは出力されるのですが、JavaScriptがまったく動かず
http://000.000.000.000〜〜
で動かすと両方が実行されることがわかりました。
0048デフォルトの名無しさん
NGNGregister.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デフォルトの名無しさん
NGNGServlet スレだったか。
0050デフォルトの名無しさん
NGNGregister.jsp/RegisterServlet ってフレームワークを語るスレにクラス図
載せてなかったっけ? 何だったのあの図は?
0051デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1012728608/715
719 が応えてるみたいだが?
0053デフォルトの名無しさん
NGNG割り当てるにはどうしたらいいでしょう?
staticなクラスかなんかでコネクションを持っておいて、
(まあコネクションプーリングでも何でもして)、それで
コネクションを張って、そうすれば、そのコネクションは
ライフサイクルが終わるまで生きていて、それを使い回す
かんじになるんでしょうか?
前回その人が使ったコネクションだということは、クッキーか
なんかで判別
0054デフォルトの名無しさん
NGNGひょっとしてトランザクションを画面遷移に渡って維持しようとかんがえておまへんか。
それはデッドロックやフォーマンスの著しい劣化の原因になるのでやめれ。
0055デフォルトの名無しさん
NGNG何でコネクションを人に割り当てたいのか小一時間・・・
0056デフォルトの名無しさん
NGNGでも同じコネクションを同時に複数の人が使ったら
まずーですよね?
0057とある学生
NGNG最近勉強を始めたけど、この判断って間違い?
最終的には、JSPが扱えるようになりたいんですけど。
0058デフォルトの名無しさん
NGNG2chで聞くって判断が間違ってる。
0059デフォルトの名無しさん
NGNGそういう VB みたいな蔵鯖設計はサーバサイド Java では通用しないので
あしからず。
0060とある学生
NGNGかなり納得。
0061デフォルトの名無しさん
NGNG基本的にはOKだと思うよ。ただ、Javaは難しい。
Cを知ってる人向けに作られてるからな。
0062デフォルトの名無しさん
NGNG何枚かのJSPの画面遷移をするシステムがあって、それらの
画面から一つの共通のJavaのインスタンスにアクセスしたい、
という場合はどうしたらいいんでしょう。
また、その共通のインスタンスはユーザごとに別にしたい、と
思ってます。例えば、ショッピングカートのようなモノを考えて
もらえればいいと思いますが。
そのような場合にはどのようにするのが一般的でしょうか?
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG知らなかった……。これ普通のクラスとどう違うんだろ、と
思ってました。
これって、全部の画面から使えて、ユーザごとには別のモノが
使われる、ってものなんでしょうか。
0065デフォルトの名無しさん
NGNGその手の話題は大抵の Servlet & JSP 本にあるだろ。
0066デフォルトの名無しさん
NGNGこの辺はろくな説明ないよ、マジで。
おまえが読んだ本教えてやれ。
0067デフォルトの名無しさん
NGNGJSP なら useBean で scope=session でもアリか。
0068デフォルトの名無しさん
NGNGどうもです。
いや、マジでないです、ちゃんと解説してある本は。一応
一通り読んでるんですが、JavaBeansはこうすると使えるって
話は載ってるんですが、普通のクラスを使うのとどう違うのか
って話になると、まるで書いてないです。っていうか、引数なしの
デフォルトコンストラクタがあれば何でもいいんじゃないかって
気がしてます。まあプロパティがあればより便利、ってかんじで。
0069デフォルトの名無しさん
NGNGあれはそのセッションの間、ずっと使えるって意味ですか?
で、他からは使えない、という。
ところで、(質問ばっかりで申し訳ないんですが)、JSPでいうところ
のセッションの寿命ってどうやって決まるんでしょう。
一ヶ月後にそのユーザがそのJSPアクセスしても、まだその
セッションって生きてるんでしょうか?
0070デフォルトの名無しさん
NGNG007167
NGNG自分で調べろ
http://www.google.com/search?hl=ja&q=Servlet+Session+Timeout&lr=lang_ja
0072デフォルトの名無しさん
NGNG0073けま
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNG普通死んでる。
大体のServletエンジンはsessionタイムアウトってやつを指定できる。
1ヶ月に指定すれば可能だけど、まずメモリ不足で落ちる。
普通はそういう情報はRDBMSとかファイルシステムに永続化する。
0076デフォルトの名無しさん
NGNGありがとうございます。ちょっと本読みが足りないようなんで
さらに勉強します。
0078デフォルトの名無しさん
NGNGWroxのProffesional JSPがServlet/JSP本の中では比較的まともだと思います。
0080デフォルトの名無しさん
NGNGいろいろ読んだけど、避けてるんじゃないかと思うくらいにどれにも
載ってなかった。こんなのなんで説明しないんだ。信じられない。
結局Webで探してなんとかわかったって感じ。それも、説明してある
ページじゃなくて、いろんなソースを見て、あ、こんなのもあるんだ、
ってかんじで。
Web+DBプレスの「JSP+JavaBeans徹底活用」とかいう特集にも
載ってなかったからな。信じられん。
0081デフォルトの名無しさん
NGNGなんでJSPのspecを読まないのか。信じられん。
0082デフォルトの名無しさん
NGNGテンプレートに当てはめる単純作業にしてほしいと願ってるわけ。
scopeなんてどうでもいいよ。動けば。
0083デフォルトの名無しさん
NGNG呼び出すとします。
そのサーブレットから、JSPの中で使ってたbean使うには
どうしたらいいんでしょう?
0084デフォルトの名無しさん
NGNGどうにもなりません。
session.setAttribute を使いましょう。
0085デフォルトの名無しさん
NGNGダメなんでしょうか。てっきりsessionオブジェクトの中に
暗黙で埋め込まれているかなんかだと思ってたんですが。
0086デフォルトの名無しさん
NGNGJSP が .java ファイルに変換されて、それがコンパイルされる事は知ってるな?
その .java ファイルを読めば、どういう処理がされてるか一目瞭然。
TOMCAT だったら、 work ディレクトリの下に残ってるから読んでみそ。
0087デフォルトの名無しさん
NGNGなんかサーブレットからも使えそうな気がするんですが、
「こういう場合は使えないんだよ、ばぁーか」って罠が
ありそうなんで、諦めることにします。
0088デフォルトの名無しさん
NGNG使えます。
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スローされる例外を教えて
0091デフォルトの名無しさん
NGNG前半と後半の疑問文が噛み合っていないような気が…
009289
NGNG%@ 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そもそもキャストの仕方がおかしいね。
>>(String)obj.toUpperCase().equals("OK")
こうだ。
((String)obj).toUpperCase().equals("OK")
Nullチェックめんどくさいならこうしたら。
"OK".equal(obj);
009489
NGNGおお、裏技っぽいやり方ですね!!
"OK".equal(obj);ですか!!凄くためになります。
ちなみに
obj = session.getAttribute("aaa");
で、aaaというセッションオブジェクトが存在しない場合(値がNullではなく、何もない状態)
objにはNullって返ってくるのでしょうか?
0095デフォルトの名無しさん
NGNG009693
NGNGnullだよ。
009789
NGNGありがとうございます。
これで一安心です。
0098デフォルトの名無しさん
NGNG試した結果を仕様と思いこむタイプのヴァカ。
0099!95
NGNG>objにはNullって返ってくるのでしょうか?
仕様かどうかはともかく、このくらいは試してみればすぐわかるだろうに。
試してみて、それが正しい動作なのか聞いているのなら、「null だよ」と
言われて、それで安心してしまうのもいかがなものかと。
0100100
NGNG0101101
NGNG0102デフォルトの名無しさん
NGNG仕様はわからんかもしれんけど実装はわかるんでないの…
nullを入れたらどうなるか(なるべきか)なんてとこまでServletAPIの「仕様」
で定義されてたっけ?
HttpSessionの入れ物としての実装にHashtableつかってるサーブレットコンテナ
もあればそうでないのもあるだろし
0103デフォルトの名無しさん
NGNGpublic 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デフォルトの名無しさん
NGNGServlet本くらいならちょっとあるかも。
0105デフォルトの名無しさん
NGNG最初の取っ掛かりにはそういう本は欲しいよ。
でも少しかじったらリファレンスなり仕様のほうがはやいね。
0106デフォルトの名無しさん
NGNGSUNのサイトですか?
0108デフォルトの名無しさん
NGNGJSPに送信されるGET型のデータで
ttp://〜〜?aaa=1&aaa=2&aaa=3&aaa=4&aaa=5&aaa=8...
と、いうデータを全て取得したいのですが、get.Parameter("aaa")では、先頭以外は
取得できないのですが、なにか別の方法やいい方法はないでしょうか?
0109デフォルトの名無しさん
NGNG0110108
NGNGメソッド getParameters(java.lang.String) は interface javax.servlet.http.HttpServletRequest で見つかりません。
と、でましたが・・・
0111109
NGNG0112108
NGNG出力される値が毎回変化しますが・・・(ワラ
0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNG内部でHashMap(table)使ってるからじゃん。
実装によっては、カスタマイズしたMapを使って順序を保存しているのもあると思うよ。
(未確認)
0115デフォルトの名無しさん
NGNGコンテナの実装依存 (たとえば今の WebSphere 3.5.3 は QUERY_STRING 順に
なるし)。順序も重要なら全部同じ名前にしない。
0116デフォルトの名無しさん
NGNGこんなのOKなの?RFC的には。
0117デフォルトの名無しさん
NGNG0118116
NGNGなんかカン違いしてない?
それがメンドいから2chで聞いてんじゃねーか。
調べる気があればとっくに調べてるっつーの。
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG調べてこいや、ってわけか。
0121116
NGNGその通り!分かったらとっとと調べてきてください。
ていうかぁー、優秀な2ちゃんねらー様なら調べるまでも無いんでしょ?w
ほら教えろよ。
0122デフォルトの名無しさん
NGNG氏ね
0123デフォルトの名無しさん
NGNGRFC 的に OK。名前をユニークしなければならないということはどこにも書かれていない。
便乗だけど空白を '+' に変換するって記述した RFC ってあったっけ?
0124デフォルトの名無しさん
NGNG0125114
NGNG良く考えたら自分でQueryStringパースしたら100%確実じゃん。どうよ?
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNGそもそも QUERY_STRING がどういう順序で渡されるかはブラウザの実装依存。
大抵は HTML 内での出現順序だと思うが、そうなると今度は HTML のレイアウト
依存という意味になる。
>>124
サンクス!
0128デフォルトの名無しさん
NGNGそうか?
まずほとんどの実装で出現順とみなしていいと思うが。
0130デフォルトの名無しさん
NGNGJSPでよく、↓こういうのやるじゃないですか?
<jsp:setProperty name="hoge" property="*" />
これって具体的に何をやってるんでしょう。
コメントアウトしても問題なく動作するし、生成された
Javaのソースをみても、該当するところがみつからない
んですけど。。
いろいろ本を読んで調べたんだけど、載ってません。
よろしくお願いします。
0131デフォルトの名無しさん
NGNG以下の3つのうちから選んでください。
1.クライアントでxmlを変換
jspはxmlを記述しておき
xmlをクライアント側でxslとcssで変換する
もちろんクライアント側で変換するから
IE5.x以上でないと見れないっていう欠点はある。
2.サーバサイドでxmlを変換
Cocoonを使う
サーバ側でxmlをhtmlに変換するので
あんまりブラウザに依存しない
3.その他
・・・
0132デフォルトの名無しさん
NGNGとりあえずJSPをコンパイルしたソースが残るようにしてソース見れ
0133デフォルトの名無しさん
NGNG見たんですが、どうも該当するところが見つかりません。
0134デフォルトの名無しさん
NGNG132じゃないけど,んなあほな。
それに,答え的にはJSPの仕様をみれ。
<jsp:setProperty>タグのproperty属性に"*"を指定したときの
振る舞いがちゃんと記述されてる。
0135デフォルトの名無しさん
NGNGないからだろうな。
0136デフォルトの名無しさん
NGNGその文の前半部と後半部がなぜ「やはり」で繋がる?
関連性がないと思うが
0137デフォルトの名無しさん
NGNGすらすらとね。キミだってわかるでしょ、あのくらいの英語。簡単だよね
アハーン?)」
ってこったろ。
0138デフォルトの名無しさん
NGNG英語わからないから説明してやれないんだよ。
スマソ。回線切って(以下略)」
って意味だったりしてな。
0139デフォルトの名無しさん
NGNGStores 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デフォルトの名無しさん
NGNGhttp://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あんたそれは優しすぎ。w
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNGそうっすか、スマン。
ところでさ、JSP ってサーブレットにコンパイルしてメモリ上に常駐するっつーのが
定番だよね。ってことは 1 ページあたり数百 kB のコンテンツを数百ページも作る
場合に (たいしたことしてないのに) すべて JSP にするのってめちゃくちゃ無駄に
メモリを圧迫するよね。サーブレットのアンロードはコンテナ依存だし、大げさに
したくないのでデータベースとか使いたくないし、うーんどうしようかな。
いや、ただの日記とか Tip とか読み物とか載せるサイトなんだけど、ブラウザの
挙動に依存したくないのでなるべくサーバサイドで処理させたいし、という悩み
なんだけどね。
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG腐るほどあるかと。
0147デフォルトの名無しさん
NGNG読むたびに内容が変わってるとか?
0148デフォルトの名無しさん
NGNGファイルの最終更新日とか (画像じゃない) アクセスカウンタとか。
またはページ共通ヘッダ・フッタを別ファイルにしたり広告入れたりとか。
何かの値や URL を設定ファイルに出しておきたいとか。
多分そんな話だろうと思う。
0149デフォルトの名無しさん
NGNG0150動的日記
NGNG上司には、たまたま飛び込みで行った会社の社長が、
自分の高校の同級生だったから、とウソをついた。
今まで、「子供と買い物に行った」ことが書いてあった3年後の日記が、
「滞納した家賃をやっと1月分払った」に変わっていた…
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGこの情報の読込みをservletのinitのように最初の一回
だけにすることをJSPで実現する方法はありますか?
0154デフォルトの名無しさん
NGNGstatic{
...
}
%>
0155デフォルトの名無しさん
NGNGこれは、可変のデータにもつかえるのでしょうか?
固定の文字の場合、よく使いますが、最初の一回だけ、
DBのデータを動的に設定したいのですが。できます?
0156デフォルトの名無しさん
NGNG先にスタティックイニシャライザについて検索して濃い。
0157名無しさん@XEmacs
NGNGpublic void jspInit(){
}
%>
だろ。この場合。
0158デフォルトの名無しさん
NGNG狂おしく同意
0159デフォルトの名無しさん
NGNGそれがメンドいから2chで聞いてんじゃねーか。
調べる気があればとっくに調べてるっつーの。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNGこういう奴には教えたくない、な?>>all
0162デフォルトの名無しさん
NGNGgetServletContext().getInitParameter()を使えば出来るようですが、
これをサーブレットではなくjspから使うことはできるのでしょうか?
0163デフォルトの名無しさん
NGNGString param = application.getInitParameter("hoge");
0164デフォルトの名無しさん
NGNG下のように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デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG165に同意。明示的にブラウザから投げなおさせないとそういう
ことはできない。sendRedirectでHTTPステータスコード302を返すか,
ダミーのページ+JavaScript送ってやるか
0167デフォルトの名無しさん
NGNG助言有難うございます。当面の問題は解決できたようです。
9末から悩んでいましたが、164のままではどうあがいてもだめだったのですね。
sendRedirectを使う手法が一般的かどうか、
それ以前に>>164の作りが一般的といえるのかは分かりませんが、
このままもう少し進めてみます。
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG(MVC2モデルで言うところのビューです)
たとえばStruts関連のドキュメントで「/WEB-INF以下に配置する」とか書いてあったのを見かけたけど、
これはどのServletコンテナでも共通に使えるのかな。
JSPを隠して配置するにはおそらく/WEB-INF以下に置くことになるんだろうけど、
・これを通常のJSPとしてコンテナがコンパイルしてくれるやり方
・JSPをjarなりのリソースとして配置できるのかどうか
なんてことが知りたい。
拡張子 .jsp を JSPコンパイラ起動のスイッチにしてるようなコンテナの場合にもうまく動くのかな。
これでキマリ的な手法があればぜひ知りたいです。
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
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デフォルトの名無しさん
NGNGHTMLの勉強して出直せ。
0174U ◆CZtFsGiu0c
NGNGまず、なぜRefershを使うのか書いてください。フレーム内のページからリンクなり
ボタンなりでフレームなしのウィンドウに遷移するのならtarget属性を指定すれば
いいんですが、METAタグにはtargetは指定できません。
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG自分で試せ&レポートしる
0178デフォルトの名無しさん
NGNGって、人。情報くれ。
どんなタグリブなのか・・・
0179デフォルトの名無しさん
NGNGBODYタグで『onLoad="top.location.href='http://www.2ch.net/';"』汁!
ってこりゃ、HTMLかJSの質問だ罠。
0180170
NGNG調べてみたら、JavaServlet 2.3 Specification には明確に
「WEB-INFのファイルもサーブレットのコードからアクセスできる」
旨のことが書いてあった。
2.2 準拠のサーブレットコンテナの中には、アクセスできないものもあるらしい。
それが2.3で明確に仕様上 OK だとされた。
いままで Specification は差分しか読んでなかったけど、
改めて読むと発見がある。
ためになったよ。
■ このスレッドは過去ログ倉庫に格納されています