草庐IT

Servlet 包

runoob 2023-04-06 原文

Servlet

涉及到 WEB-INF 子目录的 Web 应用程序结构是所有的 Java web 应用程序的标准,并由 Servlet API 规范指定。给定一个顶级目录名 myapp,目录结构如下所示:

/myapp
    /images
    /WEB-INF
        /classes
        /lib

WEB-INF 子目录中包含应用程序的部署描述符,名为 web.xml。所有的 HTML 文件都位于顶级目录 myapp 下。对于 admin 用户,您会发现 ROOT 目录是 myApp 的父目录。

创建包中的 Servlet

WEB-INF/classes 目录包含了所有的 Servlet 类和其他类文件,类文件所在的目录结构与他们的包名称匹配。例如,如果您有一个完全合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于以下目录中:

/myapp/WEB-INF/classes/com/myorg/MyServlet.class

下面的例子创建包名为 com.myorg 的 MyServlet 类。

// 为包命名
package com.myorg;  

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
 
  private String message;
 
  public void init() throws ServletException
  {
      // 执行必需的的初始化
      message = "Hello World";
  }
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");
 
      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}

编译包中的 Servlet

编译包中的类与编译其他的类没有什么大的不同。最简单的方法是让您的 java 文件保留完全限定路径,如上面提到的类,将被保留在 com.myorg 中。您还需要在 CLASSPATH 中添加该目录。

假设您的环境已正确设置,进入 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 目录,并编译 MyServlet.java,如下所示:

$ javac MyServlet.java

如果 Servlet 依赖于其他库,那么您必须在 CLASSPATH 中也要引用那些 JAR 文件。这里我只引用了 servlet-api.jar JAR 文件,因为我在 Hello World 程序中并没有使用任何其他库。

该命令行使用内置的 javac 编译器,它是 Sun Microsystems Java 软件开发工具包(JDK,全称 Java Software Development Kit)附带的。 Microsystems的Java软件开发工具包(JDK)。为了让该命令正常工作,必须包括您在 PATH 环境变量中所使用的 Java SDK 的位置。

如果一切顺利,上述编译会在同一目录下生成 MyServlet.class 文件。下一节将解释如何把一个已编译的 Servlet 部署到生产中。

Servlet 打包部署

默认情况下,Servlet 应用程序位于路径 <Tomcat-installation-directory>/webapps/ROOT 下,且类文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。

如果您有一个完全合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中,您需要在位于 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中创建以下条目:

    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.myorg.MyServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

上面的条目要被创建在 web.xml 文件中的 <web-app>...</web-app> 标签内。在该文件中可能已经有各种可用的条目,但不要在意。

到这里,您基本上已经完成了,现在让我们使用 <Tomcat-installation-directory>\bin\startup.bat(在 Windows 上)或 <Tomcat-installation-directory>/bin/startup.sh(在 Linux/Solaris 等上)启动 tomcat 服务器,最后在浏览器的地址栏中输入 http://localhost:8080/MyServlet。如果一切顺利,您会看到下面的结果:

Hello World

有关Servlet 包的更多相关文章

  1. java - Servlet Gson().toJson 死循环 - 2

    我在servlet中遇到了一些问题,每次我更改下拉菜单中的选项时,一个不同的值将传递给servlet,然后它会导致无限循环。当我没有更改下拉列表中的选项(值没有变化)时,没有错误。这是我的代码:我的Javascript:functionloadStaff(){//dropdownvarpositionDropDown=document.getElementById("positionsDropdown");//valueofthedropdownvarpositionID=positionDropDown.options[positionDropDown.selectedIndex].

  2. javascript - 如何从 servlet 调用 JavaScript 函数 - 2

    我是网络开发的新手。我有一个外部JavaScript文件,它具有显示功能带有错误详细信息的提示。我需要将错误消息传递给函数。我在servlet中编写了Controller。如何从我的servlet调用该JavaScript文件的函数。 最佳答案 不可能从servlet调用java脚本函数。相反,您可以使用打印javascript代码response.getOutputStream().println([javascript代码]");进入浏览器,javascript函数就会在浏览器中执行。

  3. javascript - 将 servlet 变量传递给 javascript - 2

    我希望传递一个servlet变量myVar,它被传递到JSP页面,并将它传递给JavaScript。JavaScript是包含在JSP页面中的外部javascript。我有一个调用JavaScript函数的按钮,但我无法通过servlet传递任何传递到JSP页面的变量。该按钮不是表单的一部分。我试过在JavaScript中调用一个函数:varx='';和varx='${myVar}';和varx='';但是,x始终是我输入的字符串。我没有使用AJAX或JQuery。有什么想法吗?示例代码是一个简化版本:(所以按钮实际上是一个下拉菜单,当我更改值时调用js,但是,我希望在changeCL

  4. javascript - 调用 Servlet 并从 JavaScript 连同参数调用 Java 代码 - 2

    我有sessionkey,它是我从RESTAPI调用中获得的JavaScript变量。我需要在servlet中调用我的Java代码并将该键作为参数传递。我可以使用什么JavaScript函数来做到这一点? 最佳答案 几种方式:使用window.location触发GET请求。需要注意的是它是同步的(因此客户端将看到当前页面正在更改)。window.location="http://example.com/servlet?key="+encodeURIComponent(key);请注意内置encodeURIComponent()函数

  5. 基于Spring注解 + MyBatis + Servlet 实现数据库交换的小小Demo - 2

    基于Spring注解+MyBatis+Servlet实现数据库交换的小小Demo第一步创建web项目,这一步省略,有不会的可以参考之前发布的文档第二步配置pom.xml文件dependencies>dependency>groupId>org.springframeworkgroupId>artifactId>spring-contextartifactId>version>5.2.9.RELEASEversion>dependency>dependency>groupId>org.springframeworkgroupId>artifactId>spring-aspectsartifact

  6. Eclipse+servlet+Tomcat+MySQL实现登入注册页面 - 2

    目录1.效果展示2.环境搭建3.前端代码4.后端代码 5.创作不易,点个赞吧效果展示表 登入界面注册界面注册一个账号 登入该账号1.尝试输入错误密码2.输入正确密码再次注册该账号 环境搭建MySQL下载安装网上都有可以参考http://t.csdn.cn/czWMNEclipse搭载MySQLhttp://t.csdn.cn/NKXAh这边说一点javaWeb项目中无法驱动数据库 http://t.csdn.cn/jwKcAtomcat下载安装 http://t.csdn.cn/EKMxBEclipse搭载tomcat http://t.csdn.cn/bCd6q搭配过程中可能出现的问题:1.

  7. java - Servlet 中的 JSON 解析器就像用于 XML 的 SAX - 2

    我正在使用JDOMSAX解析器来解析外部XML文件。但是我需要在同一个servlet中解析一个JSON。任何人都可以建议类似于SAX的解析。 最佳答案 你应该使用GoogleGSONJava解析器另见GsonUserGuide. 关于java-Servlet中的JSON解析器就像用于XML的SAX,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10657725/

  8. java - web.xml 中的 servlet 类路径 - 2

    我正在关注http://www.vogella.com/tutorials/REST/article.html教程。我已经创建了名为“JerseyDemoProject”的项目(Dyanamicweb项目),创建了一个名为“Package1”的包,并且我在这个包中编写了程序Hello.java(在教程中给出)。我修改了我的web.xml如下JerseyDemoProjectindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspHelloServletPackage1.Hellojersey.config.server

  9. java - 如果我想在 java servlet 中解析它,我应该在哪里找到 xml 文件 - 2

    我想在servlet中解析xml文件,但发生异常,JVM无法指定xml文件位置。异常(exception)情况java.io.FileNotFoundException:FormFieldsNames.xml(Thesystemcannotfindthefilespecified)我尝试将xml文件放在项目方向、javasrc包和servlet包中,但所有这些尝试都得到相同的结果。我应该在哪里找到xml文件,请提前帮助并感谢。 最佳答案 从类路径读取文件的一个常见问题是在WAR文件中获取正确的位置。在Java中,一个名为MyServ

  10. java - 在 web.xml 中映射 servlet - 2

    这个问题在这里已经有了答案:Servletreturns"HTTPStatus404Therequestedresource(/servlet)isnotavailable"(19个回答)关闭5年前。xml文件位于我项目的WebContent/WEB-INF/web.xml中。我正在使用Eclipse并运行Tomcat(它不是通过Eclipse安装的。我更喜欢它是一个单独的安装)。EmployeeManagementindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspnamePramodRegistration/E

随机推荐