禁用Tomcat默认servlet

r7s23pms  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(238)

我正在使用Tomcat服务器来运行部署为WAR的应用程序。该应用程序不提供静态内容或JSP。是否有办法禁用默认servlet和jsp servlet?

ajsxfq5m

ajsxfq5m1#

从未尝试过,但应该足以禁用所有连接器:编辑conf/server.xml并删除所有<Connector>条目(默认情况下应该有一个活动的HTML连接器)。重新启动并检查服务器是否仍按预期工作。

oalqel3c

oalqel3c2#

是的,有可能。
Servlet容器通常与默认Servlet一起提供。Tomcat也是has one。您可以通过删除conf/web.xml中与<servlet-name>default</servlet-name>关联的条目来禁用它。删除<servlet>条目和关联的<servlet-mapping>条目。同样的操作也可以用于<servlet-name>jsp</servlet-name>
但是这个解决方案是依赖于容器的,所以如果你把Web应用程序放到一个不同的容器中,而你忘记删除默认的servlet,那么你的应用程序的行为会有一些不同。
独立于容器的解决方案是创建自己的默认servlet,从而覆盖容器提供的默认servlet(如Tomcat)。可以通过创建具有所需行为的servlet并将其Map到"/"来实现这一点。
例如:

public class MyDefaultServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.sendError(404);
    }
}

当被访问时,它应该总是抛出HTTP 404(NOT FOUND),否则它将在每个未定义的URL请求上返回HTTP 200(OK)。
在web.xml中:

<servlet>
    <servlet-name>myDefaultServlet</servlet-name>
    <servlet-class>example.demo.MyDefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myDefaultServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

相关问题