カテゴリ: Javascript/Java

ページ: << 1 2 3

JSPの実体ファイル

パーマリンク 2008/09/08 22:28:10 著者: kumaold メール
カテゴリ: 仕事, プログラミング, Javascript/Java

PHPと違ってJSPはJavaが原型のコンパイラ言語なので、コンパイル後の実行ファイル?としてファイルが存在するわけです。

*.jspファイルを書き換えた場合、初回アクセス時に再コンパイルされるようです。

例えば、webapps/jsp/index.jsp にこんなファイルを作ったとします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="utf-8" %>
<html>
<head>
    <meta http-equiv=content-type content="text/html; charset=utf-8">
    <title>Untitled</title>
</head>
<body>

<% out.println("Hello, JSP!"); %>

</body>
</html>


すると、かな~り奥深い階層のこの場所に*.javaと*.classがあります。
拡張子的に想像がつくと思いますが、Javaのソースと実行ファイルです。

/usr/local/tomcat/work/Catalina/localhost/jsp/org/apache/jsp/

・index_jsp.java
・index_jsp.class

開いてみると、完全なJavaのソースファイルで、<% %>の外に記述されたhtmlなども1行1行out.write();で書き出していることが分かります。

Javaでこれは効率悪そうとか思いつつ、何か問題が起きたらこれを見れば分かりそうな気がします。
(そもそもJavaを先にやるべきだったか?)

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

  private static java.util.List _jspx_dependants;

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.AnnotationProcessor _jsp_annotationprocessor;

  public Object getDependants() {
    return _jspx_dependants;
  }

  public void _jspInit() {
    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
  }

  public void _jspDestroy() {
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                  null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
      out.write("\n");
      out.write("<html>\n");
      out.write("<head>\n");
      out.write("\t<meta http-equiv=content-type content=\"text/html; charset=utf-8\">\n");
      out.write("\t<title>Untitled</title>\n");
      out.write("</head>\n");
      out.write("<body>\n");
      out.write("\n");
 out.println("Hello, JSP!"); 
      out.write("\n");
      out.write("\n");
      out.write("</body>\n");
      out.write("</html>");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try { out.clearBuffer(); } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}


これで何となくJSPに実行原理が分かった気がします。

コンパイラ言語でありながらインタプリタ言語のような感覚で扱えるのも内部的にこんな処理を入れているからですかね。



一番やさしいJSP & サーブレット入門塾 第2版 (DB Magazine SELECTION)一番やさしいJSP & サーブレット入門塾 第2版 (DB Magazine SELECTION)
山本 隆之

翔泳社 2008-03-19
売り上げランキング : 122492
おすすめ平均

Amazonで詳しく見る

ApacheとTomcatの連携

パーマリンク 2008/09/03 23:05:27 著者: kumaold メール
カテゴリ: 仕事, サーバ関係, Javascript/Java

昨日のJSP環境構築では、外部に8080ポートを空けていない開発鯖ではテストが出来ない上に、別ポートというのは実用的ではありません。

そこでApacheとTomcatの連携をまとめときます。


現状、Apacheが80番ポート、Tomcatが8080番ポートで稼動しているので、JSPの場合だけ8080番ポートに回してやればいいわけです。

そこでリバースプロキシを使います。


元のApacheのディレクトリに入って、configureのオプションを変えてコンパイル。
--enable-module=proxy でプロキシモジュールの追加コンパイル。

./configure --enable-module=so --enable-module=rewrite --enable-module=proxy
make

Apacheを一時的に止めて、make installする

service httpd stop
make install

httpd.conf の適当なところに以下を追加し、Apacheの再スタート

vi /usr/local/apache/conf/httpd.conf
<IfModule mod_proxy.c>
    ProxyPass /examples/ http://localhost:8080/examples/
    ProxyPass /jsp/ http://localhost:8080/jsp/
</IfModule>
service httpd restart


これで、http://localhost/jsp/へのアクセスは内部的にはhttp://localhost:8080/jsp/として処理されるので外部からも問題なく使うことが出来る。


当面の間はjspディレクトリ内にて開発を行うことにするので、シンボリックリンクを作成しておくと便利かも。



10日でおぼえる JSP/サーブレット入門教室 第3版10日でおぼえる JSP/サーブレット入門教室 第3版
山田 祥寛

翔泳社 2008-04-11
売り上げランキング : 193079

Amazonで詳しく見る
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

次の言語はJSP

パーマリンク 2008/09/02 22:07:31 著者: kumaold メール
カテゴリ: サーバ関係, プログラミング, Javascript/Java

8月も終わりC言語もポインタ~構造体あたりまで一通りは扱うことが出来ました。

色々な言語に触れてみるという基本コンセプトのもと、9月からはまた別の言語をやろうということになりました。


そこで挙がったのがJSP(Javaサーブレット)です。
JSP自体の使用法としてはPHPに近いので取っ付きやすいというのもあります。

JSP実行環境を構築すればJavaも出来るので、今月はJSPとJavaに決まりました。


さて、まずは実行環境を整えないといけません。
今日の午後半分の時間を費やして、JSP環境構築を行いました。

参考にしたのはこちらのページです。

サーブレット/JSPサーバー構築(Tomcat6)


1.Java SE Development Kit(JDK)の導入

こちらからJava SE Development Kit 6 update 7のrpm版をDLする。

cd /usr/local/src
wget http://.../jdk-6u7-linux-i586-rpm.bin

ファイル名が長くURLのゴミが残っているのでリネームする。

mv '長い元のファイル名' jdk-6u7-linux-i586-rpm.bin

実行権限を付加した上で実行し、手順に沿って進めるとJavaが入る。

chmod +x jdk-6u7-linux-i586-rpm.bin
./jdk-6u7-linux-i586-rpm.bin

環境設定ファイルを開き、最終行に以下の内容を追加し、変更を反映させる。

vi /etc/profile
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
source /etc/profile

この状態でJavaのコンパイル及びJAVAプログラムの実行が出来る。

Javaソフトの開発を行うのであればここまでで十分だが、JSPを実行するにはTomcatのインストールと設定が必要になる。


2.Tomcatの導入

Tomcatにはバージョンがあるが、今回はTomcat6を使用する。

解凍し、展開したフォルダを直接移動させる。

tar xzf apache-tomcat-6.0.18.tar.gz
mv apache-tomcat-6.0.18/ /usr/local/tomcat

環境設定ファイルを作成する。

vi /etc/profile.d/tomcat.sh
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/common/lib

Tomcat起動スクリプトを作成する。

vi /etc/rc.d/init.d/tomcat
#!/bin/bash
#
# Startup script for the tomcat
#
# chkconfig: 345 80 15
# description: Tomcat is a Servlet+JSP Engine.

# Source function library.
. /etc/rc.d/init.d/functions
source /etc/profile.d/tomcat.sh

start(){
    if [ -z $(/sbin/pidof java) ]; then
        echo "Starting tomcat"
        /usr/local/tomcat/bin/startup.sh
        touch /var/lock/subsys/tomcat
    else
        echo "tomcat allready running"
    fi
}

stop(){
    if [ ! -z $(/sbin/pidof java) ]; then
        echo "Shutting down tomcat"
        /usr/local/tomcat/bin/shutdown.sh
        until [ -z $(/sbin/pidof java) ]; do :; done
        rm -f /var/lock/subsys/tomcat
    else
        echo "tomcat not running"
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        /usr/local/tomcat/bin/catalina.sh version
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
esac

exit 0

Tomcat起動スクリプトに実行権限を付加する。

chmod +x /etc/rc.d/init.d/tomcat

Tomcatを起動させる。

/etc/rc.d/init.d/tomcat start

Tomcat起動スクリプトを自動起動に設定する。

chkconfig --add tomcat
chkconfig tomcat on


これでJSTの実行環境(仮)はほぼ構築完了!

JSPのドキュメントルートは /usr/local/tomcat/webapps/ になる。
開発テスト用にjspディレクトリを作成し、テストファイルを作成。

/usr/local/tomcat/webapps/jsp/test.jsp

<% out.println("Hello, JSP!"); %>

http://localhost:8080/jsp/test.jsp にアクセスし、表示されれば問題なし。


10日でおぼえる JSP/サーブレット入門教室 第3版10日でおぼえる JSP/サーブレット入門教室 第3版
山田 祥寛

翔泳社 2008-04-11
売り上げランキング : 193079

Amazonで詳しく見る
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 2 3

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software