在测试了几个建议(比如 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 属性?
最佳答案
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/