jsp - 一般 tomcat (v7) 404 重定向到外部 url

标签 jsp tomcat redirect tomcat7

在测试了几个建议(比如 Redirect to external website on Tomcat )之后,我仍然无法为 tomcat 中不存在的 webapps 重定向到外部 url。

我的情况是这样的:

  • tomcat 在 url localhost 上运行
  • 在目录 webapps/app1, webapps/app2, ... 中运行了很多 webapps
  • 对 localhost/app1 的 url 调用将打开应用程序 app1
  • 对 localhost/app2 的 url 调用将打开应用程序 app2
  • 本地主机上的 url 调用将打开 app1(在 tomcat 中配置的自动重定向)

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

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

最佳答案

Tomcat 版本 = ?

你到底想要什么?

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

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

B.如果您想为所有 Web 应用程序的“错误 404”处理配置默认设置:

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

  • 准备执行重定向的 servlet。

    例如扩展 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,并将其映射到那里的某个 URL,例如/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>
    
  • conf/web.xml 中使用该 servlet 提供的位置配置 error-page

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

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

关于jsp - 一般 tomcat (v7) 404 重定向到外部 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29866504/

相关文章:

javascript - 如何使用运行本地 Tomcat 服务器的 Eclipse 调试 javascript

apache - 如何设置 apache 来代理同一台服务器上的两个不同的 tomcat?

php - Htaccess - 301 域名重定向

java - JSP 标记文件和库如何工作?

java - 如何在jsp中访问struts2属性值?

jquery - 切换标签后刷新页面

java - Struts 1.3 迭代动态问题列表

java - 在 Windows 中查看 tomcat 日志文件

bash - 同步保存stdout、stderr和stdout+stderr

wordpress - 如何更改新帖子的永久链接,同时在 wordpress 中保留现有帖子的现有永久链接