在测试了几条建议(例如Redirect to external website on Tomcat)之后,我仍然无法重定向到tomcat中非现有webapps的外部网址。
我的情况如下:
当有人输入 localhost / asdf 等网址时,我的目标是实现重定向到外部网站,例如http://www.test.com/404.html。有没有办法在tomcat中全局实现这一点,比如在/conf/web.xml中添加errorpage属性?
答案 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
类。