0

为了提高我的 Java 技能,我正在尝试构建一个简单的 j2ee 框架 (MVC)。

我构建它来处理 FrontServlet 中的每个请求。这是我使用的映射:

web.xml :
<servlet>
    <servlet-name>Front</servlet-name>
    <servlet-class>test.FrontServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Front</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>   

我的问题是,当我将请求从 FrontServlet 转发到 JSP 时,显然,JSP 请求由 FrontServlet 处理并且视图没有呈现。

  • 如何通过保留 url-pattern "/*" 来解决这个问题?
  • 有没有办法在没有性能损失的情况下在 Servlet 中呈现 JSP?

提前感谢您的回复!


  • 解决方案 1(@Bryan Kyle)

我正在努力听从你的建议。我创建了这个过滤器:

public void doFilter(ServletRequest request,
   ServletResponse response, FilterChain chain) 
   throws IOException, ServletException 

   {
       HttpServletRequest req = (HttpServletRequest) request;

       if(!req.getRequestURL().toString().endsWith("jsp"))
       {
           // I changed the servlet url-pattern to "/front.controller"
           req.getRequestDispatcher("/front.controller").forward(req, response);
           /*chain.doFilter(req, resp);*/
       }
   }

<filter>
    <filter-name>Filter</filter-name>
    <filter-class>test.Filter</filter-class>
</filter>

<filter-mapping>
    <filter-name>Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 这样对吗?

谢谢 !

4

2 回答 2

1

我认为这里的问题可能是您使用的是 aServlet而不是 a ServletFilter

ServletFilter,顾名思义,通过对请求提供预处理和后处理来过滤请求。如果您需要执行以下操作,您可能需要使用过滤器:

  • 在整个应用程序中提供安全检查
  • 设置由 servlet 或 jsp 获取的请求属性
  • 压缩响应
  • 记录计时信息
  • 等等。

查看有关Servlet Filters的文档。

于 2011-02-23T19:38:14.273 回答
1

对于前端控制器方法, AFilter是不合适的解决方案。

您想改进url-pattern您的 servlet 以使其匹配例如/pages/**.do。你不希望你的前端控制器处理不相关的请求,比如 CSS/JS/images/etc。举/pages/*个例子,假设你有一个 JSP in /WEB-INF/foo.jsp,那么下面是一个 servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
}

应该在http://localhost:8080/contextname/pages/foo上显示有问题的 JSP 。

也可以看看:

于 2011-02-23T20:02:30.550 回答