假设我们有一些具有下一个结构的项目:
网络 文章 主.jsp sidearts.jsp 中央.jsp 论坛 主.jsp css js 网络信息 web.xml
请注意,此时我们还没有前端控制器。
在部署了一些方面(让它成为'asdf')之后,我们可以使用下一个 URL 访问我们的页面:
http://localhost:8080/asdf/articles/main.jsp http://localhost:8080/asdf/forum/main.jsp 等等..
main.jsp 生成一些 html 并包含 sidearts.jsp(通过 jstl c:import 或任何其他方式)
加上前端控制器后会发生什么?
假设我们有 servlet ArticlesController,它负责分派
一些请求并具有下一个映射:
<servlet>
<servlet-name>ArtsController</servlet-name>
<servlet-class>org.forstackoverflow.ArticlesController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArtsController</servlet-name>
<url-pattern>/articles/*</url-pattern>
</servlet-mapping>
现在当我们请求 URL 时http://localhost:8080/asdf/articles/main
,ArticlesController 处理这个请求并尝试包含articles/main.jsp。此时无限循环开始,因为 /articles/* 映射到 ArtsController。
描述的问题的正确解决方案是什么?
我的变种是:
1)为所有jsp文件做映射(我不认为这是可以接受的)
2)更改目录名称(文章->艺术);但后来我们得到了很多新的 URL(如http://localhost:8080/asdf/arts/main.jsp
),我认为这可能是错误的来源。