gpt4 book ai didi

tomcat - 在命令提示符下使用 Java Servlet

转载 作者:行者123 更新时间:2023-11-28 23:57:55 25 4
gpt4 key购买 nike

我希望在命令提示符下使用 Java servlet。这是因为我想:

  • 在没有其他环境的情况下与编译器“直接联系”,
  • 在我的上网本上使用它。 Eclipse 在我的上网本上非常慢。

  • 为此,我需要 HttpServletRequestHttpServletResponse传递给的对象
    我的 doXXX方法。我已经安装了 Tomcat。据我所知,每当我在 web-page(?) 上调用 servlet 时,Tomcat 都会触发请求/响应。

    我应该把我的 servlet 放在哪个文件夹,我应该打开哪个 URL 来使用它们?
    这个 document说类文件
    应该在 \WEB-INF\classes 下.在这种情况下,启动 Tomcat 后应该输入什么 URL?

    注意:我知道我可以编写一个类来实现 HttpServletRequestHttpServletResponse实例化。我也知道 question Spring 有实现这两个接口(interface)的类。

    最佳答案

    首先,对于从命令行构建 java 代码,我建议您使用 Apache Ant™而不是运行 javac直接地。

    要使用 java 构建 web 项目,您必须知道每个 java web 项目都必须遵守所描述的标准目录布局 here . web container 使用了那里描述的目录。 ,例如 Apache Tomcat , 以定位您的 Web 应用程序的资源,以便它可以正确运行。

    现在你想开始编码。您需要组织您的代码并分离 Java 源文件、应用程序所依赖的库和静态 Web 资源(图像、静态 HTML 文件、脚本、样式等)。

    假设您创建了一个项目目录 MyWebProject ,布局看起来像这样:

    - MyWebProject
    + src
    + src-web
    + lib

    src 下你可以把你的java类包括你的servlet。一定要使用干净的包结构。

    src-web 下你可以把你的静态网络资源。 web.xml也可以被认为是静态资源,可以放在那里。

    lib 下您可以放置​​应用程序在编译和运行时需要的第三方库(*.jar 文件)。例如,您的应用程序可能需要一个 jdbc 驱动程序来操作数据库。

    现在假设您创建了一个 servlet 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 的类路径以便它可以找到 servlet api jars 和其他库
    <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>

    捆绑

    在名为 deploy 的目录下创建 java web 项目所需的目录结构
    <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>

    并让它使用属性 docBase 指向部署目录(在您的情况下,很可能 engine 将是 Catalinahost 将是 localhost )。此类文件的内容可能如下所示:
    <?xml version='1.0' encoding='utf-8'?>
    <Context docBase="C:\Projects\MyWebProject\deploy"
    reloadable="true"
    crossContext="false">
    </Context>

    现在您可以使用表单中的 url 调用您的 servlet
    http://<host>:<port>/<context>/path

    其中 context 是上下文文件的名称 <context>.xml没有扩展名 .xml ,因此 mwpctx . path 是您使用 @WebServlet 指定的路径。或使用 web.xml 元素指定的路径 <url-pattern/> ,因此 masmyservlet .

    网址是
    http://localhost:8080/mwpctx/mas

    或者
    http://localhost:8080/mwpctx/myservlet

    另一种选择是创建一个 war file然后把它放到目录 CATALINA_HOME/webapps .这也可以使用一些 ant 任务来实现:

    创建 war 文件
    <target name="war" depends="bundle">
    <jar jarfile="${dist}/${war}" basedir="${deploy}"/>
    </target>

    调用上面的ant目标会在 ${dist}指定的目录下创建一个war文件.它基本上打包了目录 deploy的内容存档。

    部署
    <target name="deploy" depends="bundle,war">
    <copy file="${dist}/${war}" todir="${catalina.home}/webapps" />
    </target>

    现在假设war文件的名称是 mwp.war ,您将能够使用与上述相同格式的 url 调用您的 servlet,除了这次上下文的名称由 war 文件的名称给出,没有扩展名 .war ,因此 url 看起来像这样
    http://localhost:8080/mwp/mas

    或者
    http://localhost:8080/mwp/myservlet

    (记住,servlet 被配置了两次,两条路径从何而来)

    最后是项目布局:
    - MyWebProject
    - src
    - mwp
    MyServlet.java
    - src-web
    web.xml
    + lib

    这是完整的 Ant build.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>

    关于tomcat - 在命令提示符下使用 Java Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004284/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com