我正在桌面上运行本地Tomcat 6.0服务器。
我正在尝试将匹配http://localhost:8080/RedirectDirectory/abc/efg/morejunk的所有请求和所有请求重定向到单个JSP页面。
在我的RedirectDirectory项目的web.xml中,我有
<servlet>
<servlet-name>IOPRedirect</servlet-name>
<jsp-file>/RedirectDirectory/filetree.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>IOPRedirect</servlet-name>
<url-pattern>/RedirectDirectory/*</url-pattern>
</servlet-mapping>
我真的很想去JSP那个目录是否存在。
我认为这是怎么做的,但我猜不是。
有什么想法吗?
由于
答案 0 :(得分:2)
在解决这样的问题时,我通常会使用UrlRewriteFilter。
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<rule>
<from>^/RedirectDirectory/(.*)$</from>
<to>/RedirectDirectory/filetree.jsp</to>
</rule>
在项目中使用UrlRewriteFilter非常方便解决许多常见问题,例如设置缓存标头,规范主机名,强制某些网址上的https等。
答案 1 :(得分:0)
你所做的对于servlet来说很好 - 没有尝试过使用JSP。
编辑:在尝试了更多不完全你所做的之后,我发现它工作正常。例外情况是转发到使用安全约束的特定jsp时导致错误。该错误是由于重定向绕过用户登录,因此请求中省略了所需的数据。
关于这样做的一种方法是将所有请求转发给servlet&amp;让servlet转发到你想要的jsp。
您的web.xml将是:
<servlet>
<servlet-name>IOPRedirect</servlet-name>
<servlet-class>IOPRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IOPRedirect</servlet-name>
<url-pattern>/RedirectDirectory/*</url-pattern>
</servlet-mapping>
你必须在doGet()方法中创建一个带有以下内容的IOPredirect servlet:
String url="/RedirectDirectory/filetree.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(req,res);