使用url-pattern" / *"显示转发的JSP [英] Display forwarded JSP with url-pattern "/*"
问题描述
为了提高我的java技能,我正在尝试构建一个简单的j2ee框架(MVC)。
To improve my java skills, I'm trying to build a simple j2ee framework (MVC).
我构建它来处理FrontServlet中的每个请求。这是我使用的映射:
I built it to handle every request in a FrontServlet. Here is the mapping that I used :
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请求,并且不呈现视图。
- 如何解决此问题保持url-pattern/ *的问题?
- 有没有办法在没有性能损失的情况下在Servlet中呈现JSP?
- How can I resolve this problem by keeping the url-pattern "/*" ?
- Is there a way to render a JSP in a Servlet without performance losses ?
预先感谢您的回复!
- 解决方案1(@Bryan Kyle)
我正在尝试遵循您的建议。我创建了这个过滤器:
I'm trying to follow your advise. I created this filter :
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>
- 是不是?
- Is it right?
谢谢!
推荐答案
A 过滤器
对于前端控制器方法来说是不合适的解决方案。
A Filter
is an inappropriate solution for a front controller approach.
您想要优化 url-你的servlet的模式
,以便匹配例如 / pages / *
或 *。执行
。你不希望你的前端控制器参与CSS / JS / images /等无关的请求。以 / pages / *
为例,假设您在 /WEB-INF/foo.jsp $ c $中有一个JSP c>,然后servlet中的以下内容
You want to refine the url-pattern
of your servlet so that it matches e.g. /pages/*
or *.do
. You don't want your front controller to kick in on irrelevant requests like CSS/JS/images/etc. To take /pages/*
as an example, assuming that you've a JSP in /WEB-INF/foo.jsp
, then the following in a 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 。
- Java Web应用程序中的设计模式
- JSP / Servlet的隐藏功能
- Design patterns in Java web applications
- Hidden features of JSP/Servlet
这篇关于使用url-pattern" / *"显示转发的JSP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!