一般tomcat(v7)404重定向到外部URL

时间:2015-04-25 14:33:35

标签: jsp tomcat redirect tomcat7

在测试了几条建议(例如Redirect to external website on Tomcat)之后,我仍然无法重定向到tomcat中非现有webapps的外部网址。

我的情况如下:

  • tomcat在url localhost上运行
  • 在webapps / app1,webapps / app2,...目录中运行的很多webapps
  • 对localhost / app1的网址调用将打开app app1
  • 在localhost / app2上调用url将打开app app2
  • 对localhost的url调用将打开app1(在tomcat中配置自动重定向)

当有人输入 localhost / asdf 等网址时,我的目标是实现重定向到外部网站,例如http://www.test.com/404.html。有没有办法在tomcat中全局实现这一点,比如在/conf/web.xml中添加errorpage属性?

在这里回答: How to handle not available Tomcat 7 webapps

1 个答案:

答案 0 :(得分:0)

Tomcat版本=?

你到底想要什么?

一个。如果要将不存在的Web应用程序重定向到其他位置,请在ROOT Web应用程序(也称为默认Web应用程序)中配置error-page

ROOT Web应用程序处理所有未被其他Web应用程序处理的请求。

B中。如果要为"错误404"配置默认设置。处理所有Web应用程序:

在Web应用程序(YMMV)之间共享JSP页面相当困难,但共享servlet非常容易。

  • 准备执行重定向的servlet。

    E.g。延长javax.servlet.http.HttpServlet并覆盖其"服务"方法。像这样:

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    
        // TODO: check that request.getMethod() is one of "GET", "HEAD", "POST"?
    
        response.sendRedirect("http://www.test.com/404.html");
    
        //// Or if you want better control over HTTP status code (302/307/...):
        // response.reset();
        // response.setStatus(302);
        // response.setHeader("Location", "http://www.test.com/404.html");
     }
    
  • 将您的代码放入Tomcat的lib目录中 - 作为jar或包/类文件树。

  • conf/web.xml中配置您的servlet并将其映射到那里的某个网址,例如/WEB-INF/404

    <servlet>
        <servlet-name>bar</servlet-name>
        <servlet-class>foo.Bar</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>bar</servlet-name>
        <url-pattern>/WEB-INF/404</url-pattern>
    </servlet-mapping>
    
  • error-page中配置conf/web.xml,其中包含该servlet所服务的位置。

    <error-page>
      <error-code>404</error-code>
      <location>/WEB-INF/404</location>
    </error-page>
    

如果这没有帮助,也可以扩展ErrorReportValve类。