• ベストアンサー

JSPやServletはアクセス後最終的にサーバOSネイティブファイルでサーバに保存されるのか

 Servletはアップロード時にすでにclassファイルでサーバに保存、JSPはアップロード時にjspファイルで1回目のアクセス時にjavaファイルが作成(そしてサーバに保存)されさらにclassファイルが作成(そしてサーバに保存)されることは理解しました。  classファイルとなったあとさらにHotSpot VMなどでサーバOSネイティブファイル(Windowsサーバならexe形式?)にコンパイルされサーバに保存されるのかどうかが分かりません。  アドバイスよろしくお願いいたします。

noname#179638
noname#179638
  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

HotSpot は Java VM に組み込まれて動くものです。で、ネイティブコードはメモリの中にあるだけでどこにも書き出しません。(というか、書き出していたとしてもその仕様が公開されていません。普通はファイルの読み書きは遅いのでわざわざそんなことしないとは思いますが)。

noname#179638
質問者

お礼

 「ネイティブコードはメモリの中にあるだけでどこにも書き出」さない、のですね! 「メモリの中にあるだけ」 ↑ 的確なアドバイスありがとうございます!

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

HotSpotはSUN JRE 1.3以降で組み込まれている機能だと記憶しています。 少なくとも知る限りのJava VMでネイティブ・コードをファイルに吐き出して再利用するものはありません。 # OSのスワップファイルに含まれる可能性は否定しませんがVMの機能じゃない Javaコードをネイティブ実行形式ファイルにするものとしてはGCCや組み込み環境用のJavaコンパイラで幾つかあるくらいだと思います。 # これらはJavaソースから実行形式を作るコンパイラで # 実行にはGCなどをサポートするライブラリが必要になる

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

通常のJava VMではネイティブ・コードをファイルに保存することはしていません。ファイルとしてはクラスファイル(.class)で、HotSpotなどでは実行時にメモリ上で必要に応じてコンパイルして実行します。

noname#179638
質問者

補足

 rinkun様、ご回答ありがとうございます。  通常のJava VMではネイティブ・コードをファイルに保存することはしていないことは理解しました。  HotSpotなどで.classを実行時にメモリ上で必要に応じてコンパイルして実行した場合、部分コンパイル後のネイティブコードは2回目以降のアクセス時のために保存されるのかどうかが分かりません。  ここでいう「通常のJava VM」と「HotSpot」は別物なのでしょうか?  アドバイスいただける方がおりましたらどうかよろしくお願いいたします。

関連するQ&A

  • WTP,JSP,Servlet

    WTPを使って開発をしています。 設定まではうまくいきました。 一応環境をお知らせします。 ・WindowsVista ・WTP ・Tomcat6.0 ・Java6.0 ○実現したい事 JSP画面のフォームから送信ボタンでServletを呼ぶ。 ○困っていること JSP画面からServletが呼べない。 どうも <form method="post" action="com.Servlet"> のactionの指定が間違っているようです。 ○ソース環境 JSP : ルート/WebContent/JSP画面 Servlet : ルート/src/com/Servlet.java class : ルート/build/classes/com/Servlet.class ○エラー HTTPステータス 404 - /ルート/com.Servlet Actionの指定をいろいろと試したのですがダメでした。 Sevletの代わりにJSP画面と同じフォルダ内の他のJSPファイルを指定したらうまくいってます。 情報が足りなかったらすいません。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • Servlet/JSPのアクセス制限

    Apache 2.2.x + Tomcat 5.5.xでサーバをたてています。 そこに、とあるサーブレット、ないしはJSPのファイルがあるとします。  www.somewhere.com/apps/servlet_or_jsp これを、通常は、同一サイト内にあるhtmlファイルのフォームから呼び出しています。  www.somewhere.com/foo.html   <form action="apps/servlet_or_jsp" ...> ここで、別サイトにあるhtmlファイルのフォームから、上記のファイルを呼び出そうとしてみます。  www.somewhereelse.com/bar.html   <form action="www.somewhere.com/apps/servlet_or_jsp" ...> すると、件のファイルを実行できてしまうのですが、これを外部サイトから実行できないようにするにはどうすれば良いのでしょうか? もしかしたら、とてつもなくくだらないことなのかもしれませんが、入門書を見たりWebで検索してみても答えが見つからなかったので、質問させてください。

  • JSPからServletへの遷移

    今回、eclipseで開発をすることになりました。 しかしながら、動的Webプロジェクトという使い慣れないプロジェクトでの作成を しなくてはならなくなり、混乱しています。 tomcatとWTPのことについては、先の質問で教えて頂き解決したのですが、 もう一つ困ったことがあったので、再度質問させて頂きます。 --------------------------------------- 環境 Windows7 Ultimate eclipse Indigo tomcat 5.5 --------------------------------------- まずは、JSPを作成し、それを実行し、ブラウザ上に表示することは出来ました。 その後にServletに<form action ="/test" method = "POST">という形で投げるのですが、 それがうまくいかず、404エラーが出てしまいます。 階層としては、JSPはSample(プロジェクト名)/WebContent/NewFile.jspに配置しています。 そして、Servletについては、Sample(プロジェクト名)/src/test/Test.javaに配置しています。 web.xmlについては、Sample(プロジェクト名)/WebContent/WEB-INF/web.xmlにあります。 まず、JSPのソースは以下の様に書かれています。 ----------------------------------------------------- <%@ page contentType="text/html;charset=Windows-31J" language="java"%> <%@ page pageEncoding="Windows-31J"%> <html> <head><title>タイトル</title></head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <%request.setCharacterEncoding("Windows-31J");%> <body> <form method="POST" action="/test"> <%--ここに処理を記述 --%> <input type = "submit" name="submit" value = "送信"> </form> </body> </html> ----------------------------------------------------- Servletについては、以下の様に、型だけ記述しています。 ----------------------------------------------------- package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Test */ public class Test extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Test() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } ---------------------------------------------------- そして、web.xmlについては、以下の様に記述しています。 ---------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>SampleWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>test</servlet-name> <servlet-class>test.Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> </web-app> ----------------------------------------------------- その状態で、JSPの中から <form action ="/test" method = "POST"> <input type ="submit" name = "submit" value="送信"> </form> とやっても、404が出てしまいます。 Java自体が久々で、根本的に間違っているかもしれませんが、 ご教授お願い致します。

    • ベストアンサー
    • Java
  • JSPでサーバーにファイルのアップロード

    JSPで掲示板を作成しているのですが CGIのような画像貼り付け掲示板を作成しようと思っています。 画像ファイルを決まったフォルダにアップロードしたいと思っているのですが javaがまだ初心者のためよくわからないのですが お教えいただけないでしょうか? よろしくお願います。

  • jsp,servlet,beanの流れについて

    初歩の初歩の質問ですが、参考書等読んでいて混乱してしまっています。宜しくお願いします。 a.jsp(入力画面) a_servlet.java a_bean.java(setのみ) b.jsp(表示画面) b_servlet.java b_bean.java(get,setのみ) というファイルがある時のプログラムの流れは、 (1)a.jsp・・・画面を表示する。データを入力する。登録ボタンを押下する。 (2)a_servlet.java・・・(1)で登録ボタンを押下されたら、a.jspのデータを取得。a_bean.javaへ設定する。b.jspへ飛ぶ。 (3)a_bean.java・・・(2)によりデータが設定されている。 (4)b_servlet.java・・・a_bean.javaのデータを取得し、b_bean.javaに設定する。 (5)b_bean.java・・・(4)によりデータが設定されている。 (6)b.jsp・・・表示データをb_bean.javaより取得後、画面を表示する。削除ボタンを押下する。 (7)b_servlet.java・・・(6)で削除ボタンが押下されたらb.jspのデータを取得し、b_bean.javaへ設定する。 特にbファイルの処理順序で混乱しています。 上記のような流れで考え方は合っているでしょうか。 少々分かりずらいかもしれませんが、間違っていたら小学生でも分かるように教えてください。

    • ベストアンサー
    • Java
  • JSPとservletについて質問です。

    よろしくお願いします。 jsp→servlet→jsp の順で入力画面→getPatameterで値をゲットして一度 setAttributeでその値をforwardで次のjspにやろうと したいのですがどうしてもservletのところで java.lang.NoSuchMethodErrorが出てしまいます。 その行を見てみるとforwardの場所出ているようです。 そこで、最後のjspをservletにしてやってみると今度はエラー出ずに、表示されるのですがすべての値がnullになってしまいます。 二番目のservletの場所で試しに表示してみると表示されるので渡す時にうまく渡っていないみたいです。 因みにdoGetメソッドを使用していて、一番最後のservletのところのアドレスを見てみるとちゃんと値を 渡しているみたいです。 もうかれこれ5日間程ずっとここでつまっていてもうどうしたらいいのか分かりません。 どなたかアドバイスをお願いします。

    • ベストアンサー
    • Java
  • EclipseでServlet/JSP

    エクリプス2.0.2を使っていますが、Servlet/JSPを使った開発でひとつ疑問があります。 ちなみに、 http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html で各種設定いたしました。 JSPを作成するのは問題ないのですが、 Servletのクラスを作るときに、新規→クラスで、ソースフォルダがプロジェクト名か、j2srcのどちらかしか選択できません。コンパイルして、そのクラスをclassesに移動してやりましたが、それを実行するときに、 http://localhost:8080/myWeb/servlet/Hello とすると、Helloクラスをダウンロードするような形になってしまうのです。URLはなんパターンか変えてやってみましたが、できません・・・。 どうすればうまくサーブレットを作って実行できるのでしょうか? 宜しくお願いします。

  • JSPの中にhtmlファイルを埋め込みたい。

    Java Servlet/JSPで 動的なページの中に、一部htmlのコードを埋め込みたいのですが どうやって実現すればいいでしょうか。 リクエストが来た時に、htmlファイルを随時読み込んで、JSPの中の一部分に埋め込んで使いたいです。

  • Mac OS JAVAファイルのコンパイルについて

    Java超入門者です。 Mac OS X Ver.10.6.8 で、サーブレット/JSPを独学で勉強をと初めておりますが、 テキスト本がwindows版のものなので、環境変数の設定やらで違いがあり、 戸惑っております。 テストの"HelloServet.java"をテキストエディターで作成し(画像ご参照ください)、 このファイルをターミナルのコマンド(javac HelloServlet.java と入力)で コンパイルしようとしたら、エラーがでてしまいました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Javac HelloServlet.java HelloServlet.java:2: package javax.servlet does not exist import javax.servlet.*; ^ HelloServlet.java:3: package javax.servlet.http does not exist import javax.servlet.http.*; ^ HelloServlet.java:5: cannot find symbol symbol: class HttpServlet public class HelloServlet extends HttpServlet { ^ HelloServlet.java:7: cannot find symbol symbol : class HttpServletRequest location: class HelloServlet public void doGet( HttpServletRequest request, ^ HelloServlet.java:8: cannot find symbol symbol : class HttpServletResponse location: class HelloServlet HttpServletResponse response ) ^ HelloServlet.java:9: cannot find symbol symbol : class ServletException location: class HelloServlet throws IOException, ServletException { ^ 6 errors ----------------------------------------------------------------------------------------------------------- JDKの装備はターミナルにて確認しました。 java -version java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-10M3635) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー これと同様のエラーを、他のフォーラムでみつけて http://www.coderanch.com/t/509509/Servlets/java/simple-servlet-program-error classPATHの問題?というふうに捉えましたが、windowsでの回答だったので、 設定方法までこぎつけませんでした。 Macの場合のクラスパス設定などで、Google検索などもしましたが、 いろいろと方法があり、この場合どういったクラスパスの設定をすればいいのか、 そもそも、classpathの問題なのかどうかさえわからないので、 どなたか、教えて頂けませんでしょうか? このあとは、TOMCATを落としインストールして、JAVA_HOMEなども設定して とりあえず、eclipseではなく、Servlet/JSPを勉強したいと思っております。 基本過ぎる質問で申し訳ありませんが、宜しくお願い致します。

  • jspでファイルをサーバーへアップロードするには

    jspでiPadから、サーバーへ画像ファイルをアップロードしたいのですが、 どうやればよいでしょうか? jspの引数に、バイナリで乗せるということだけは、 インターネットで調べてわかりました。