【问题标题】:Calling a default servlet first in Java web application [duplicate]在 Java Web 应用程序中首先调用默认 servlet [重复]
【发布时间】:2009-03-21 10:42:58
【问题描述】:

我希望我的SampleServlet 在以这种方式访问​​我的 Java Web 应用程序时首先被调用:

http://server:8080/appname/

有什么方法可以实现吗?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    使用Servlet filter 调用您的Servlet。

    【讨论】:

      【解决方案2】:

      如果您想将 servlet 作为您的主页,那么这在 http://feelitlive.com/ 上对我有用

      <welcome-file-list>
          <welcome-file>homepage</welcome-file>
      </welcome-file-list>
      
      ...
      
      <servlet>
          <description>Shows stuff on the homepage</description>
          <display-name>Homepage Servlet</display-name>
          <servlet-name>HomepageServlet</servlet-name>        
          <servlet-class>com.cantorva.gigcalendar.servlets.HomepageServlet</servlet-class>
      </servlet>
      
      ...
      
      <servlet-mapping>
          <servlet-name>HomepageServlet</servlet-name>
          <url-pattern>/homepage</url-pattern>
      </servlet-mapping>
      

      这意味着通过您指定的 URL 到达您的应用程序的用户将受到您的 servlet 的欢迎。它还在“/homepage”处为主页创建别名,但您不必使用它。

      如果你想在启动时运行一些代码,那么asalamon74's answer 看起来不错。

      【讨论】:

        【解决方案3】:

        不确定您的意思,但您需要将您的 servlet 映射到“/”

        <servlet-mapping>
            <servlet-name>SampleServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        

        【讨论】:

          【解决方案4】:

          不知道你的目的是什么,但是 Web 应用程序初始化可以通过 ServletContextListener 来实现:

          public class AppListener implements ServletContextListener {
              public void contextInitialized(ServletContextEvent event) {
                  // place your code here
              }
          
              public void contextDestroyed(ServletContextEvent event) {
              }
          }
          

          以及稍后在 web.xml 中:

          <web-app>
          <listener>
              <listener-class>
                  package.AppListener
              </listener-class>
          </listener>
          ...
          </web-app> 
          

          【讨论】:

          • 在应用程序的生命周期中调用一次。发帖人要求每个请求访问一次。
          • 恕我直言,问题尚不清楚,您可以将其否决为题外话。我将这个问题解释为“当用户出现时”,并意味着显示 servlet 生成的页面而不是运行代码。这是一个糟糕的问题,而一个有用的答案是它们是否匹配是无法破译的。
          • erickson:是的,我知道它被调用一次,而不是每个请求一次。这个问题不清楚,这就是为什么我开始回答“不确定你的目标是什么”。
          • 事实上,我将这个问题理解为应用程序启动时的一次(这是我一直在寻找的),现在我看到它有双重解释。所以答案是有效的,恕我直言。
          【解决方案5】:

          如果你想在启动时运行代码,asalamon74's answer 应该没问题。如果您有遗留情况并且必须使用 servlet,则参数 load-on-startup 可以为您解决问题:

          <servlet>
              <servlet-name>SampleServlet</servlet-name>
              <display-name>SampleServlet</display-name>
              <description>Sample Servlet</description>
              <servlet-class>...</servlet-class>
              <init-param>...</init-param>
              <load-on-startup>1</load-on-startup>
            </servlet>
          

          load-on-startup 标记指定 servlet 应在 Web 应用程序启动时自动加载;数值只是给那些在启动时加载的加载顺序。如果未指定任何值,则 servlet 将在容器决定需要加载时加载 - 通常是在首次访问时。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-19
            • 2018-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-20
            相关资源
            最近更新 更多