当前位置: 首页 > 面试题库 >

使用web.xml配置嵌入式码头吗?

禄俊逸
2023-03-14
问题内容

我正在尝试通过Web应用程序以及带有嵌入式码头的自包含jar文件引发战争。对于嵌入式码头(jar文件分发),我添加了一个servlet,如下所示:

public static void main(String[] args) throws Exception {
    Server server = new Server(8080);

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);

    context.addServlet(new ServletHolder(new HelloServlet()),"/*");

    server.start();
    server.join();
}

war文件分发使用web.xml文件,该文件在web-app部分包含以下内容:

<servlet>
    <servlet-class>com.example.HelloServlet</servlet-class>
    <servlet-name>SimplestServer</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

这可行。但是,我想摆脱两种方法之间的重复。即,当我添加一个新的servlet时,我只想在一个位置进行配置。我可以从嵌入式码头加载和使用web.xml文件吗?


问题答案:

用一个
org.eclipse.jetty.webapp.WebAppContext

例:

package jetty;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class OnWebApp
{
    public static void main(String[] args) throws Exception
    {
        // Create a basic jetty server object that will listen on port 8080.
        // Note that if you set this to port 0 then a randomly available port
        // will be assigned that you can either look in the logs for the port,
        // or programmatically obtain it for use in test cases.
        Server server = new Server(8080);

        // The WebAppContext is the entity that controls the environment in
        // which a web application lives and breathes. In this example the
        // context path is being set to "/" so it is suitable for serving
        // root context requests and then we see it setting the location of
        // the war. A whole host of other configurations are available,
        // ranging from configuring to support annotation scanning in the
        // webapp (through PlusConfiguration) to choosing where the webapp
        // will unpack itself.
        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setWar("path/to/my/test.war");

        // A WebAppContext is a ContextHandler as well so it needs to be set to
        // the server so it is aware of where to send the appropriate requests.
        server.setHandler(webapp);

        // Start things up! By using the server.join() the server thread will
        // join with the current thread.
        // See http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join()
        // for more details.
        server.start();
        server.join();
    }
}

请注意,您将构建一个普通的WAR文件,并将其与Jetty一起使用。

如果您有特殊要求,例如注释扫描或JNDI,则需要进入配置规范。

// Enable parsing of jndi-related parts of web.xml and jetty-env.xml
org.eclipse.jetty.webapp.Configuration.ClassList classlist =
   org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);

// Enable JNDI
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
   "org.eclipse.jetty.plus.webapp.EnvConfiguration",
   "org.eclipse.jetty.plus.webapp.PlusConfiguration");

// Enable Annotation Scanning
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
  "org.eclipse.jetty.annotations.AnnotationConfiguration");

有关WebAppContext中更长的示例,请参阅ServerWithAnnotations示例。

还要注意,您还将使用此技术将所有webapp类加载器规则都放在适当的位置。这意味着您将为webapp提供一个类加载器,为服务器提供一个类加载器。了解这一点很重要。

您可以对类加载器的WebAppContext进行一些调整,但是您不能消除它们,而只能控制它们的行为。

WebAppContext webapp = new WebAppContext();
// ... various setup of the webapp ...
// Flip the classloader priority from servlet spec where webapp is first to
// Standard java behavior of parent (aka Server classloader) is first.
webapp.setParentLoaderPriority(true);

也可以看看:

  • WebAppContext.setClassLoader(ClassLoader classloader)
  • WebAppContext.addServerClass(String classOrPackage)
  • WebAppContext.addSystemClass(String classOrPackage)


 类似资料:
  • 英文原文:http://emberjs.com/guides/configuring-ember/embedding-applications/ 大多数情况下,应用所有的UI都将通过路由器管理的模板来创建。 但是如果需要将一个Ember.js应用嵌入一个现有的网页,与其他的Javascript框架共存应该怎么做呢? 改变根元素 缺省情况下,应用将渲染应用模板到网页的body元素中。 通过指定roo

  • 我想尝试使用嵌入式jmxtrans的基本入门示例。所以我添加了下面的代码 添加while循环是为了使应用程序保持最新状态,直到jvm统计信息打印到控制台上。这是jmxtrans。json文件 在启用调试级别日志时,我发现jmxtrans Spring bean没有创建,因为Spring循环引用错误 调试o. s. b. f. s.DefaultListableBeanFactory 1426-忽略

  • 双击打开WebContent/WEB-INF/web.xml 在display-name节点和welcome-file-list节点之间,添加以下内容 <filter> <filter-name>nutz</filter-name> <filter-class>org.nutz.mvc.NutFilter</filter-class> <init-param

  • Ruby, like fire, is a very useful friend, and a very dangerous enemy. — Mikkel Bruun 在模板中使用嵌入式 Ruby 帮助构建动态的配置文件或实现数组遍历是一种强大的方式。 然而,你也可以在配置清单中使用 inline_template 函数直接嵌入 Ruby 而不必使用分离的模板文件。 操作步骤 在 Puppet

  • 我在嵌入式Jetty中部署rest Web服务(Jersey)。 我的服务器: 方法:

  • 问题内容: 我将jetty嵌入到我的应用程序中,并尝试找出如何添加servlet过滤器(用于cookie处理)。Wiki和javadoc的含义不明确,我缺少什么: 我在此找到的唯一信息是一个论坛帖子,建议对此文档进行改进。 问题答案: 更新:对于Jetty版本9.2.2: 原始答案=== 如果您不想使用web.xml,请使用以下命令: 如果确实要使用web.xml而不是addFilter()方法,