- PR -

JSPでのアップロード

投稿者投稿内容
未記入
会議室デビュー日: 2005/07/02
投稿数: 3
投稿日時: 2005-07-02 06:39
お世話になります。
JSP初級者です。

JSPの記述のみで、PCからオラクルDBへ、データのアップロードを行いたいと思います。アパッチは使用できない環境です。色々調べましたが、サーブレットの記述を含むものしか見つけられず、お分かりになりましたら、ロジックをご教授いただきたく、よろしくお願いいたします。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2005-07-02 17:38
JSPでの処理の記述方法はわかるのでしょうか?

勉強目的としてやりたいとの事とおもいますが、
JSP側とServerlt側にて表示とロジックを分けるという思想が
一般的に広まっているため、web 等をしらべてみても、ズバリ
というサンプルはないとおもいます。

さて、Servert にて記述してあるモノを見つけたとのことですが、
それをJSPの記述方法にそって書き直すだけで、目的は達成できると
思います。なにが問題なのでしょうか?


今回提示されている事が「目的」であれば何も言う事はありません。
しかし勉強する上での「手段」であるのならば、一度参考書等を購入して、
筋道をたてた勉強方法へ切り替える事をおすすめします。

「独習〜」と言うシリーズは私の知ってる初学者には好評でした。
未記入
会議室デビュー日: 2005/07/02
投稿数: 3
投稿日時: 2005-07-07 02:50
ご回答ありがとうございます。
JSPをサーブレットに書き直すよう努力してみましたが、うまくいきません。サーバエラーになります。実は仕事で使用したく、何とかしたいのですが、ご教示いただけますでしょうか。申し訳ありません。よろしくお願いいたします。
下記、JSPとサーブレット、サーブレットをJSPに書き直そうとしたもの3点を付記いたします。
[JSP]←これはできます
<%@ page contentType="text/html;charset=MS932" %>

<html>
<head><title>file upload</title></head>
<body>
<b>ファイルのアップロード</b><br>
<br>
<form action="upload.jsp" enctype="multipat/form-data" method="post">
ファイル名:<input type="file" name="fileName">
<input type="submit" value= "実行">
</form>
</body>
</html>

[サーブレット]
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FileUploadServlet extends HttpServlet implements SingleThreadModel {

final static String FILE_NAME_STRING = "filename=";
final static String CONTENT_TYPE_HEADER="Content-Type: ";

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// 受信用バッファ
byte buffer[] = new byte[4096];

int size;
String header;

// 入力用ストリームを取得
ServletInputStream in = request.getInputStream();

// boundaryの読み込み
size = in.readLine(buffer,0,buffer.length);
// 末尾の改行(CR+LF)を除いて文字列に変換
String boundary = new String(buffer,0, size-2);

// Content-Dispositionヘッダ読み込み
size = in.readLine(buffer,0,buffer.length);
header = new String(buffer,0, size-1);
// Content-Dispositionからファイル名の獲得
String fileName = header.substring(header.indexOf(FILE_NAME_STRING)+
FILE_NAME_STRING.length()+1, header.length()-2);
// InternetExplorerはフルパスでファイル名を送ってくるためファイル名部分のみ取り出す
File file = new File(fileName);
fileName = file.getName();

// Content-Typeヘッダ読み込み
size = in.readLine(buffer,0,buffer.length);
header = new String(buffer,0, size-1);
String contentType = header.substring(CONTENT_TYPE_HEADER.length());

// 空行をスキップ
size = in.readLine(buffer,0,buffer.length);

// 以下本体部の読み込み
String line;
// ByteArrayOutputStreamに読み込んだ内容を出力しておく
ByteArrayOutputStream receivedBuffer = new ByteArrayOutputStream();
while((size=in.readLine(buffer,0,buffer.length)) != -1){
line = new String(buffer,0, size);
if (line.indexOf(boundary)!=-1) break;
receivedBuffer.write(buffer,0,size);
}
in.close();

// 受信したデータをファイルに出力
FileOutputStream fout = new FileOutputStream(fileName);
byte buf[] = receivedBuffer.toByteArray()
// boundaryの前に出力される空行(CR+LF)を削ってファイルに出力
fout.write(buf, 0, buf.length-2);
fout.close();

// ファイル送信画面にフォワード
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/uploadForm.jsp");
rd.forward(request,response);
}
}

[サーブレット→JSP]←?
<%@ page contentType="text/html;charset=MS932" %>
<%@page import="java.io.*" %> <%-- ファイル取り込み用 --%>

<%

String strInput_file=request.getParameter("filename");
String strContent_Type_header=request.getParameter("Content-Type:");


// 受信用バッファ
byte buffer[] = new byte[4096];

int size;
String header;

// 入力用ストリームを取得
ServletInputStream in = request.getInputStream();

// boundaryの読み込み
size = in.readLine(buffer,0,buffer.length);
// 末尾の改行(CR+LF)を除いて文字列に変換
String boundary = new String(buffer,0, size-2);

// Content-Dispositionヘッダ読み込み
size = in.readLine(buffer,0,buffer.length);
header = new String(buffer,0, size-1);
// Content-Dispositionからファイル名の獲得
String fileName = header.substring(header.indexOf(strInput_file)+
strInput_file.length()+1, header.length()-2);
// InternetExplorerはフルパスでファイル名を送ってくるためファイル名部分のみ取り出す
File file = new File(fileName);
fileName = file.getName();

// Content-Typeヘッダ読み込み
size = in.readLine(buffer,0,buffer.length);
header = new String(buffer,0, size-1);
String contentType = header.substring(strContent_Type_header.length());

// 空行をスキップ
size = in.readLine(buffer,0,buffer.length);

// 以下本体部の読み込み
String line;
// ByteArrayOutputStreamに読み込んだ内容を出力しておく
ByteArrayOutputStream receivedBuffer = new ByteArrayOutputStream();
while((size=in.readLine(buffer,0,buffer.length)) != -1){
line = new String(buffer,0, size);
if (line.indexOf(boundary)!=-1) break;
receivedBuffer.write(buffer,0,size);
}
in.close();

// 受信したデータをファイルに出力
FileOutputStream fout = new FileOutputStream(fileName);
byte buf[] = receivedBuffer.toByteArray()
// boundaryの前に出力される空行(CR+LF)を削ってファイルに出力
fout.write(buf, 0, buf.length-2);
fout.close();

// ファイル送信画面にフォワード
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/index.jsp");
rd.forward(request,response);
// }
//}
%>



未記入
会議室デビュー日: 2005/07/02
投稿数: 3
投稿日時: 2005-07-07 08:00
上記、すみません。一文誤りです。
サーブレットを、JSPに書き直そうとしてうまくできなく、サーバエラーになります。参考書は見てみるのですが、正直、何をポイントに書き直したらよいのかよく分からない状況です。JSPのPAGEの記述と、import文はこれでよいのではと思うのですが、他の中身がよく分かりません。JSPのみで、アップロードをする方法をご教示いただきたく、よろしくお願いいたします。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2005-07-07 12:50
どんなエラーが発生してるのかわからないと、なかなか答えられないですよ?

パッと見て、

引用:

String strInput_file=request.getParameter("filename");
String strContent_Type_header=request.getParameter("Content-Type:");



はダメだろうと思いますが。
multipart/formdata のときは、getParameterでは値は取れないですよ。

ところで、元にしたServletのソースは完全に理解できてますか?
この手のものを自分で実装するなら、元のソース(とHTTP)をちゃんと理解しないと難しいと思います。
未記入
会議室デビュー日: 2005/07/07
投稿数: 2
投稿日時: 2005-07-07 14:15
ありがとうございます。困っております。
アップロードをJSPのみで記述方法をご存知でしたら、ご教示頂きたく、よろしくお願い致します。
下記記述にとらわれませんが(取込時はダイアログ表示)、アパッチなどは使えない環境です。

参考にしたurl:http://www.stackasterisk.jp/tech/java/upload01_01.jsp

getParameterは、getInputStreamに変えてみましたが、同じエラーが出ます(一番下の方へエラーを付記します)。

下記記述をサーブレットからJSPにどう書き直すかから分かりません。
(サーブレットのはじめの方へ記述されています)
final static String FILE_NAME_STRING = "filename=";
final static String CONTENT_TYPE_HEADER="Content-Type: ";

エラー:
HTTP 500 - 内部サーバー エラー
Internet Explorer

<エラーメッセージ>
[07/Jul/2005:13:41:49] failure (19110): for host 131.50.65.1 trying to POST /webapp/sawa/upload.jsp, service-j2ee reports: StandardWrapperValve[jsp]: WEB2792: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: WEB4000: Unable to compile class for JSPWEB4125:

An error occurred between lines: 5 and 67 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:73: illegal character: \92
\par
^
WEB4125:

An error occurred between lines: 5 and 67 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:74: illegal character: \92
\par
^
WEB4125:

An error occurred between lines: 5 and 67 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:75: illegal character: \92
\f0 String strInput_file=request.get\f1 InputStream\f0 ("\f1 filename\f0 ");\par
^
WEB4125:

An error occurred between lines: 5 and 67 in the JSP file: /webapp/sawa/upload.jsp

まだ続きます。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-07-07 15:19
pageEncodingを設定していないためにコンパイルエラーが発生しているように思います。
JSPをシフトJISで記述しているのであれば、

コード:
<%@ page pageEncoding="Windows-31J" %>


を追加してみてください。pageEncodingがなぜ必要かは、ご自分で調べてみてください。
未記入
会議室デビュー日: 2005/07/07
投稿数: 2
投稿日時: 2005-07-07 16:56
ご回答ありがとうございます。
やはり似たようなエラーが発生してしまいます。
JSPのみでのアップロードの記述方法が分かりましたら、教えていただきたく、
よろしくお願い致します。

[07/Jul/2005:16:46:07] failure ( 6023): for host 131.50.65.1 trying to POST /webapp/sawa/upload.jsp, service-j2ee reports: StandardWrapperValve[jsp]: WEB2792: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: WEB4000: Unable to compile class for JSPWEB4125:

An error occurred between lines: 6 and 68 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:77: illegal character: \92
\par
^
WEB4125:

An error occurred between lines: 6 and 68 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:78: illegal character: \92
\par
^
WEB4125:

An error occurred between lines: 6 and 68 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:79: illegal character: \92
\f1 String strInput_file=request.get\f2 InputStream\f1 ("\f2 filename\f1 ");\par
^
WEB4125:

An error occurred between lines: 6 and 68 in the JSP file: /webapp/sawa/upload.jsp

WEB4126: Generated servlet error:
/home0500/PP/ns-home/https-www/ClassCache/https-www/default-webapp/_jsps/_webapp/_sawa/_upload_jsp.java:79: illegal character: \92
\f1 String strInput_file=request.get\f2 InputStream\f1 ("\f2 filename\f1 ");\par
^

スキルアップ/キャリアアップ(JOB@IT)