• ベストアンサー

jspで関数部分だけ分離することができますか?

jspで関数部分を分離できないでしょうか? 例えば <%! public int add(int a,int b){return a+b;} %> このadd関数だけ別のファイルにして呼び出せないでしょうか。 <jsp:include page="add.jsp" flush="true "/> とやってもadd関数がcannot resolve symbolとなってしまいます。 jspの方が手間的に楽なのですが やはりサーブレットにするしかないのでしょうか? linuxのtomcat4.1です。

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.3

>静的にincludeした場合 >そのファイルのコンパイルってどうすればいいのでしょうか? たしかincludeしている方を更新してやればいいはずです。 もしくはtranslateされたものをすてちゃうとか。

furyfox
質問者

お礼

再度のご回答有難うございます。 助かりました。

その他の回答 (2)

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.2

全然確認とかしてないですけど 動的includeじゃなくて静的includeでやればできるような気もします。 でも今回のようなメソッドであればタグライブラリにしちゃったほうがいいかもしれませんね。

furyfox
質問者

お礼

ご回答ありがとうございます。 やはり動的には無理ですかね。 jspは1回目の呼び出し時にコンパイルされると思うのですが add.jspを変更するだけでは再コンパイルされませんよね? 静的にincludeした場合 そのファイルのコンパイルってどうすればいいのでしょうか? 初歩的ですみません。

  • ducati
  • ベストアンサー率29% (308/1062)
回答No.1

TOMCATの経験ないので詳細はわかりかねますが、まずTOMCATの関数を置くべき場所へadd関数のファイルをおきます。 呼び出すJSPファイルでadd関数をIMPORTしてください。 通常はこれでいけるはずですが。

furyfox
質問者

お礼

ご回答有難うございます。 つまりパッケージにするということでしょうか? それとも <%@ page import="add.jsp" %> のような??

関連するQ&A

  • 関数をまとめる

    関数をつくるときにどうまとめれば良いのでしょうか? 例えば下のようなプログラムがあったとします. #include<iostream> int add(int, int); int multi(int, int); int main(void) {    int a = 4;    int b = 3;    std::cout << add(a, b) << std::endl;    std::cout << multi(a, b) << std::endl; } int add(int a, int b) {    return a + b; } int multi(int a, int b) {    return a * b; } add関数は足し算の結果,multi関数は掛け算の結果を返します. やっている内容はかわらずわざわざ2つに分ける必要があるか?と思ってしまいます. 要は, int arithmetic_operations(int a, int b, int pattern) {    int result;    switch(pattern) {       case 1:          result = a + b;          break;       case 2:          result = a - b;          break;       case 3:          result = a * b;          break;       case 4:          if(0 == b) {             exit(1);          }          result = a / b;          break;       default:          break;    }    return result; } このような関数を用意してpattern変数で計算を制御するほうがまとまりがあると思います.ですが,いちいち中身を確認しながらプログラムを書く必要があるので可読性は低くなります. どちらがベターでしょうか?

  • JSPファイルがコンパイルできない!

    雑誌に付いていたtomcat3.2.3用のServlet/JSPを tomcat4.1.10で動かそうとしたら、JSPファイルが コンパイルできないというエラーが出ました。 エラーの内容は、 ------------------------ org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /*****.jsp の中の行: 1でエラーが発生しました 生成されたサーブレットのエラーです: [javac] Compiling 1 source file C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\*****\*****_jsp.java:43: シンボルを解決できません。 シンボル: クラス ○○ 場所 : org.apache.jsp.*****_jsp の クラス ***** ***** = (*****)request.getAttribute("*****"); ^ -------------------------- といった感じです。 tomcat3.2.3ではちゃんと動いたのですが、 4.1.10では他に何かしなければいけないのでしょうか。 よろしくお願いします。

  • JSPのアクションタグ

    <commons:A item_cd="B"/> というようなユーザー定義のアクションタグにファイルパスを入れています。 これを <jsp:include page="ファイルパス" /> と指定したいのですが、 <jsp:include page="<commons:A item_cd='B'/>" /> とネストさせるとエラーが出てしまいます。 どなたか良い解決策をご存知でしたら宜しくお願い致します。

  • JSPファイルを削除したいです。

    事情がありにTomcat内のフォルダを 見せなければならなくなりました。 他人にTomcat内のファルダにあるサーブレット(+Beans等のクラスファイル)と JSPのソースを見られない様にしたいです。 またその上で実行も可能にしたいのですがどうすればいいでしょうか? サーブレット等は Tomcat 7.0/webapps/MyWebSite/WEB-INF/classes以下の クラスファイル(.class)だけを残してJavaファイル(.java)を削除 するか、Eclipseでソースをエクスポートさせない様にすると Javaのソースは見れなくなると思いますが、 JSPの場合だと Tomcat 7.0/webapps/MyWebSite/以下の JSPファイル(.jsp)を削除して、 Tomcat 7.0/work/ 以下にあるJSPをサーブレットに変換後 コンパイルされたファイル(.class)を残すだけではダメな様です。 他に方法はあるでしょうか? サーブレットのソースを見られないだけでも良しと考えるべきでしょうか? http://ksrd.yahoo.co.jp/PAGE=DT_ACTIVE/OUTLINK=1/QID=12100680882/AID=236975321/SIG=12dep0io1/EXP=1359004059/*-http%3A//tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html#Web_Application_Compilation 上記URLに何かそれらしき事が書いてあるのですがよく分かりません。 どうすればいいでしょうか? アクセスを制限する以外の方法でお願いします。

    • ベストアンサー
    • Java
  • サーブレットからJSPの呼び出しについて

    こんにちは。 JSPの呼び出しについて質問です。 サーブレットで RequestDispatcher dispatcher = req.getRequestDispatcher("/jsp/java.jsp"); dispatcher.include(req, res); としてJSPファイルを呼び出そうとしているのですが、うまくいきません。コンパイルは通ります。 dispatcher.include(req, res); の部分で例外処理にいってるのでそこがおかしいようですが。urlの指定もjspファイルの内容も何度も確認したのですがミスはないみたいで原因がわかりません。 またTomcatのログファイルlocalhost_logを見ると 2002-07-11 16:05:35 ApplicationDispatcher[/DB] サーブレット jsp のServlet.service()は例外を投げました という文が出力されています。

    • ベストアンサー
    • Java
  • jspでbeanを使いたいのですが...

    お世話になります。 JSPコード内のjavaプログラムをBeanとして読み込むようにし、インスタンスを作ってエラーにならないか試したところ、クラスが認識されないエラーが起きてしまいました。 他の記述やテキスト、サイト様を参考に手直しをしてみたもののうまく行かず、何だかわからなくなってしまいました... ご教授お願いいたします。 OS:WindowsVista サーブレット:Tomcat 参考テキスト:java+MySQL+Tomcatで始めるWebアプリケーション ファイルの階層 Desktop─test─jamyto┬aura─aurabottle.jsp            └WEB-INF─classes─auras┬IdMake.java                         └IdMake.class aurabottle.jsp側 <%@ page contentType="text/html; charset=Windows-31J"%> <%@ page import="java.sql.*"%> <%@ page import="java.util.*"%> <%@ page import="auras.IdMake"%> <%auras.IdMake idmake = new auras.IdMake();%>    以下JSPコード IdMake.java側 package auras; import java.sql.*; public class IdMake { StringBuffer sb = new StringBuffer(); public int barthDay (String strYear, String strMonth, String strDay){ 以下Javaコード エラー文面 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSP FileName:null Java FileName:/C:/Program Files/Apache Software Foundation/Tomcat 5.5/work/Catalina/localhost/aura//org/apache/jsp\aurabottle_jsp.java An error occurred at line: 6 in the generated java file Only a type can be imported. auras.IdMake resolves to a package JSP FileName:/aurabottle.jsp Java FileName:/C:/Program Files/Apache Software Foundation/Tomcat 5.5/work/Catalina/localhost/aura//org/apache/jsp\aurabottle_jsp.java JSPファイル: /aurabottle.jsp の中の7行目でエラーが発生しました auras.IdMake cannot be resolved to a type

    • ベストアンサー
    • Java
  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • 【C++】関数ポインタの使い方

    関数ポインタの使い方で悩んでいます。 下記の (1)のようにグローバルメソッドとして定義したメソッドを関数ポインタに代入することは出来るのですが、 (2)のようにクラスのメンバメソッドとして定義したメソッドは関数ポインタに代入することは出来ませんでした。 Error:バインドされた関数へのポインターは関数の呼び出しにのみ使用できます。 というエラーが発生します。 関数ポインタに外部参照でメソッドを代入することは出来ないのでしょうか? -----(1)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; int f(int a, int b){ return a * b; } int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; fp = f; cout << fp(1,2) <<endl; getchar(); return 0; } ------------------------------------------------------------------------- -----(2)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; class MPointerList{ public: int f(int a, int b){ return a * b; } }; int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; //fp = f; MPointerList mP; fp = mP.f; cout << fp(1,2) <<endl; getchar(); return 0; } -------------------------------------------------------------------------

  • 既に定義されている関数のプロトタイプがない警告

    現在、Cで作られたプログラムの単体テストをしています。 これを、以下のように、 ・testBase.h → テストのための表示とかを作成するためのもの ・progForCheck.c → これがチェックすべきもので、この中の関数をそれぞれチェック ・add.c など → main() を含んだ、チェックを実行するためのファイル として、以下のような感じで関数分のテストプログラムを作成してテストしようとしています。 テスト自体は問題ないのですが、この構成でコンパイルをすると、 警告 W8065 test.c 13: プロトタイプ宣言のない関数 'writeFotter' の呼び出し(関数 main ) 警告 W8057 test.c 15: パラメータ 'argc' は一度も使用されない(関数 main ) という警告が出ます。後者はその通りで問題ないのですが、前者の警告は、よくわかりません。 実体は3つのファイルですが、コンパイル時にはひとつのファイルになって、既に定義されている writeFotter() を呼んでいるだけなのに、「プロトタイプがない」という警告が出るのは、なぜなのでしょう。 それに、writeHeader() や、doCheck() は警告も無しです。 とりあえず、リンクも正常でちゃんと動作しているようなのですが、ちょっと気持ち悪いので質問しました。 // --------------- testBase.h ---------- #include <stdio.h> int OK = 0; int NG = 0; void doCheck(int isOK) { if (isOK) OK++; else NG++; } void writeHeader(char *title) { printf(" ------------ %s ------------\n", title); } void writeFotter() { printf(" OK = %d, NG = %d", OK, NG); if (NG == 0) printf(" ○○○○○○○○○○○○○○○○○○○\n"); else printf(" ×××××××××××××××××××\n"); } // ------------ progForCheck.c int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } // ------------ test_add.c #include "testBase.h" #include "progForCheck.c" int main(int argc, char *argv[]) { writeHeader(argv[0]); doCheck(add(1, 2) == 3); doCheck(add(2, 4) == 6); doCheck(add(8, 1) == 9); writeFotter(); return 0; }

  • JSPでCalenderオブジェクトが使えない(Calender cannot be resolved)

    JSPでCalenderオブジェクトを使おうと思いましたが、 うまくいきません。ソースコードは、 大体次のとおりです。 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import="java.io.*" %> <%@ page import="java.util.*" %> <% Calender cl=Calender.getInstance(); int year=cl.get(Calender.YEAR); int month=cl.get(Calender.MONTH); int day=cl.get(Calender.DATE); int hour=cl.get(Calender.HOUR_OF_DAY); int minute=cl.get(Calender.MINUTE); int second=cl.get(Calender.SECOND); int week=cl.get(Calender.DAY_OF_WEEK)-1; %> <html> ~ これで、 JSPファイル: /day.jsp の中の5行目でエラーが発生しました 生成されたサーブレットのエラーです: Calender cannot be resolved or is not a type とエラーになってしまいます。 (FileOutputStreamオブジェクトもFileOutputStream cannot be~となってしまいます。) どこが悪いのでしょうか。教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう