-1

コマンド プロンプトで Java サーブレットを使用しようとしています。これは、私がしたいからです:

  1. 別の環境をオンにすることなく、コンパイラと「直接接触」すること、
  2. これを私のネットブックで使用します。私のネットブックでは Eclipse が非常に遅いです。

このために、メソッドHttpServletRequestHttpServletResponse渡すオブジェクトが必要doXXXです。Tomcat をインストールしました。私が知っていることから、Tomcat は web-page(?) でサーブレットを呼び出すたびにリクエスト/レスポンスを起動します。

サーブレットを配置するフォルダと、サーブレットを使用するにはどの URL を開く必要がありますか? このドキュメントでは、クラス ファイルは の下にある必要があると書かれています\WEB-INF\classes。この場合、Tomcat を起動したら、どの URL を入力すればよいですか?

注: クラスをコーディングして実装HttpServletRequestおよびHttpServletResponseインスタンス化できることは承知しています。この質問によって、Spring にはこれら 2 つのインターフェースを実装するクラスがあることも認識しています。

4

2 に答える 2

1

まず、コマンド ラインから 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/>パスのいずれmasmyservletです。

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>
于 2013-06-09T01:33:32.730 に答える
0

アクセス可能にするには、サーブレットを URL パターンにマップする必要があります。サーブレット 3.0 (Tomcat 7 のみ) では、サーブレットに次のアノテーションを付けるだけで簡単に実行できます。

@WebServlet("/somePath")

以前のバージョンの仕様では、ファイルでサーブレットを宣言し、要素WEB-INF/web.xmlを使用してそのマッピングも宣言する必要がありました。たとえば、<servlet-mapping>選択したパターンが の場合、URL は次のようになります。/somePath

http://localhost:8080/myWebApp/somePath

パターンが の場合*.foo、Web アプリ コンテンツ (私の例では /myWebApp) で末尾が.foo.

これは、すべてのサーブレット チュートリアルで取り上げられている内容です。1つ(できればオラクルで何か)を選んで読んでください。

于 2013-06-08T22:09:45.950 に答える