まず、コマンド ラインから Java コードをビルドするには、直接実行するのではなく、Apache Ant™</a>を使用することをお勧めしますjavac
。
Java を使用して Web プロジェクトを構築するには、すべての Java Web プロジェクトがここで説明する標準のディレクトリ レイアウトを尊重する必要があることに注意する必要があります。そこに記述されているディレクトリーは、 Apache TomcatなどのWeb コンテナーによって使用され、正しく実行できるように Web アプリケーションのリソースを見つけます。
コーディングを開始します。コードを整理し、Java ソース ファイル、アプリケーションが依存するライブラリ、および静的 Web リソース (画像、静的 HTML ファイル、スクリプト、スタイルなど) を分離する必要があります。
プロジェクト ディレクトリを作成したとしますMyWebProject
。レイアウトは次のようになります。
- MyWebProject
+ src
+ src-web
+ lib
その下src
に、サーブレットを含む Java クラスを配置できます。クリーンなパッケージ構造を使用してください。
その下src-web
に、静的 Web リソースを配置できます。web.xmlも静的リソースと見なすことができ、そこに置くことができます。
その下lib
に、アプリケーションがコンパイルおよび実行時に必要とするサードパーティ ライブラリ (*.jar ファイル) を配置できます。たとえば、アプリケーションでデータベースを操作するために jdbc-driver が必要になる場合があります。
ここで、サーブレットを作成したとしましょうMyServlet.java
package mwp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.annotation.WebServlet;
@WebServlet("/mas")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head/><body><p>Hello, World Wide Web!</p></body></html>");
}
}
そしてそれを構成しました(注釈@WebServlet
(3.0仕様のみ)を使用するか、web.xml
ファイルを使用して)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wa="http://java.sun.com/xml/ns/javaee"
version="3.0"
schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>My web project</display-name>
<servlet>
<display-name>My Servlet</display-name>
<servlet-name>my_servlet</servlet-name>
<servlet-class>mwp.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my_servlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
これをコンパイルして Web コンテナーにデプロイします。build.xmlファイルを作成し、各ステップに適切なターゲットを記述することでそれを実現できます${...}
(以前に定義した変数/プロパティの値を意味します (回答の最後にある完全な build.xml ファイルを参照してください))。
コンパイル中
javac
サーブレット API jar およびその他のライブラリを検出できるようにクラスパスをセットアップします。
<path id="compile.classpath">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
<fileset dir="${catalina.home}/lib">
<include name="*.jar"/>
</fileset>
</path>
javac を実行する
<target name="compile">
<mkdir dir="${bin}"/>
<javac srcdir="${src}" destdir="${bin}">
<classpath refid="compile.classpath"/>
</javac>
</target>
バンドル
という名前のディレクトリの下に、Java Web プロジェクトに必要なディレクトリ構造を作成します。deploy
<target name="prepare">
<mkdir dir="${deploy}"/>
<mkdir dir="${deploy}/WEB-INF"/>
<mkdir dir="${deploy}/WEB-INF/classes"/>
<mkdir dir="${deploy}/WEB-INF/lib"/>
<mkdir dir="${dist}"/>
</target>
バイナリ (*.class および *.jar ファイル) と静的 Web リソースを適切な場所にコピーします。
<target name="bundle" depends="prepare,compile">
<copy todir="${deploy}/WEB-INF">
<fileset dir="${web-src}"/>
</copy>
<copy todir="${deploy}/WEB-INF/classes">
<fileset dir="${bin}"/>
</copy>
<copy todir="${deploy}/WEB-INF/lib">
<fileset dir="${lib}"/>
</copy>
</target>
この時点で、<context>.xmlファイルをセットアップすると、Web アプリケーションを実行できるようmwpctx.xml
になります。
CATALINA_HOME/conf/<engine>/<host>
属性を使用して deploy ディレクトリを指すようにしますdocBase
(あなたの場合、おそらくengine
と にCatalina
なりhost
ますlocalhost
)。このようなファイルの内容は、次のようになります。
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="C:\Projects\MyWebProject\deploy"
reloadable="true"
crossContext="false">
</Context>
これで、フォームの URL を使用してサーブレットを呼び出すことができます
http://<host>:<port>/<context>/path
<context>.xml
ここで、context は拡張子を除いた.xml
コンテキストファイルの名前ですmwpctx
。path は、 を使用して@WebServlet
指定したパス、または web.xml 要素を使用して指定した<url-pattern/>
パスのいずれmas
かmyservlet
です。
URLは次のようになります
http://localhost:8080/mwpctx/mas
また
http://localhost:8080/mwpctx/myservlet
もう 1 つの方法は、war ファイルを作成してディレクトリにドロップすることCATALINA_HOME/webapps
です。これは、いくつかの ant タスクを使用して実現することもできます。
war ファイルの作成
<target name="war" depends="bundle">
<jar jarfile="${dist}/${war}" basedir="${deploy}"/>
</target>
上記の ant ターゲットを呼び出すと、 で指定されたディレクトリの下に war ファイルが作成され${dist}
ます。基本的に、ディレクトリのコンテンツをdeploy
アーカイブにパックします。
デプロイ中
<target name="deploy" depends="bundle,war">
<copy file="${dist}/${war}" todir="${catalina.home}/webapps" />
</target>
ここで、war ファイルの名前が であると仮定するとmwp.war
、上記と同じ形式の URL を使用してサーブレットを呼び出すことができます。.war
、したがって、URLは次のようになります
http://localhost:8080/mwp/mas
また
http://localhost:8080/mwp/myservlet
(サーブレットは、2 つのパスから 2 回構成されたことを思い出してください)
最後に、プロジェクトのレイアウトは次のとおりです。
- MyWebProject
- src
- mwp
MyServlet.java
- src-web
web.xml
+ lib
ここに完全なantbuild.xml
ファイルがあります
<project name="MyWebProject" basedir="." default="deploy">
<property name="src" location="src" />
<property name="web-src" location="src-web" />
<property name="bin" location="bin" />
<property name="lib" location="lib" />
<property name="deploy" location="deploy" />
<property name="dist" location="dist" />
<property name="war" value="mwp.war" />
<property name="catalina.home" location="C:/Apache/apache-tomcat-7.0"/>
<path id="compile.classpath">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
<fileset dir="${catalina.home}/lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="deploy" depends="bundle,war">
<copy file="${dist}/${war}" todir="${catalina.home}/webapps" />
</target>
<target name="bundle" depends="prepare,compile">
<copy todir="${deploy}/WEB-INF">
<fileset dir="${web-src}"/>
</copy>
<copy todir="${deploy}/WEB-INF/classes">
<fileset dir="${bin}"/>
</copy>
<copy todir="${deploy}/WEB-INF/lib">
<fileset dir="${lib}"/>
</copy>
</target>
<target name="war" depends="bundle">
<jar jarfile="${dist}/${war}" basedir="${deploy}"/>
</target>
<target name="compile">
<mkdir dir="${bin}"/>
<javac srcdir="${src}" destdir="${bin}">
<classpath refid="compile.classpath"/>
</javac>
</target>
<target name="prepare">
<mkdir dir="${deploy}"/>
<mkdir dir="${deploy}/WEB-INF"/>
<mkdir dir="${deploy}/WEB-INF/classes"/>
<mkdir dir="${deploy}/WEB-INF/lib"/>
<mkdir dir="${dist}"/>
</target>
<target name="clean">
<delete includeemptydirs="true" verbose="true">
<fileset dir="${bin}" includes="**/**"/>
<fileset dir="${deploy}" includes="**/**"/>
<fileset dir="${dist}" includes="**/**"/>
</delete>
</target>
</project>