为了提高我的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请求并且不呈现视图。
预先感谢您的回复!
我正在尝试遵循你的建议。我创建了这个过滤器:
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>
谢谢!
答案 0 :(得分:1)
我认为这里的问题可能是您使用的是Servlet
而不是ServletFilter
。
ServletFilter,顾名思义通过在请求上提供预处理和后处理来过滤请求。如果您需要执行以下操作,则可能需要使用过滤器:
查看有关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。