使用url-pattern“/ *”显示转发的JSP

时间:2011-02-23 19:30:20

标签: java jsp servlets java-ee front-controller

为了提高我的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时,显然,FrontServlet处理JSP请求并且不呈现视图。

  • 如何通过保留网址格式“/ *”来解决此问题?
  • 有没有办法在没有性能损失的情况下在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>
  • 是不是?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

  • 在整个应用程序中提供安全检查
  • 设置由servlet或jsp
  • 选取的请求属性
  • 压缩回复
  • 记录时间信息

查看有关Servlet Filters的文档。

答案 1 :(得分:1)

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

您希望优化servlet的url-pattern以使其匹配,例如/pages/**.do。你不希望你的前端控制器参与CSS / JS / images /等无关的请求。以/pages/*为例,假设您在/WEB-INF/foo.jsp中有一个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。

另见: