【问题标题】:Vaadin RequestDispatcher don't lead to JSP file in webapp dirVaadin RequestDispatcher 不会导致 webapp 目录中的 JSP 文件
【发布时间】:2017-11-20 21:20:40
【问题描述】:

我已经使用 HttpServlet 和 JSP 在 Java EE 中完成了我的 Java Web 应用程序。我通常像这样映射我的 Servlet:

@WebServlet(urlPatterns = "/main")
public class MainServlet extends HttpServlet{

我做我的 servlet 工作,并希望像这样将数据传递给 JSP 文件:

 RequestDispatcher dispatcher = req.getRequestDispatcher("/main.jsp");
 dispatcher.forward(req, resp);

main.jsp 位于我的 Web 应用程序文件夹中(我使用 IntelliJ Idea)。

问题是,我最初使用 Vaadin 8 制作了我的 UI。使用以下内容:

@Theme("mytheme")
@CDIUI("users")
@SuppressWarnings("serial")
public class Vaadin extends UI

然后覆盖初始化。

现在我想添加一个 HttpServlet 并覆盖 doGet,然后调用调度程序将数据转发到 jsp。这是添加 Vaadin 的问题,它以某种方式破坏了 tsp 的路径,因为 jsp 不显示,而是标准的 vaadin

请求未被任何注册的处理程序处理。

出现了,我知道 servlet 在 servlet 启动并正常工作时已正确映射,但运行 JSP 文件不起作用。

谁能给点建议?

【问题讨论】:

    标签: java jsp servlets vaadin


    【解决方案1】:

    看来您还需要实现一个WebFilter 来处理JSP。您的调度程序转发请求,但我猜它是由 Vaadin 的某个过滤器再次处理的请求。另外我不确定您是否需要任何 servlet 和/或调度程序(不确定您的实际用途是什么)。

    无论如何,使用WebFilter 可以拦截此处理。检查以下示例

    @WebFilter(filterName="jspFilter", urlPatterns="*")
    public class JspFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            try {
                HttpServletRequest hreq = (HttpServletRequest)request;
                String path = hreq.getPathTranslated();
                if(path.toLowerCase().endsWith(".jsp")) {
                    try(Writer writer = response.getWriter();
                        Reader reader = new FileReader(path) ) {
                        processJsp(reader, writer);
                        return;
                    } catch (Exception e) { /* TODO: handle exception */};
                }
            } catch (Exception e) { /* TODO: handle exception */};
            chain.doFilter(request, response); // forward to filter chain by default 
        }
        @Override public void destroy() {}
        @Override public void init(FilterConfig filterConfig)
            throws ServletException {}
    }
    

    此过滤器检查所有请求。如果URI(此处从翻译/绝对路径检查)以.jsp 结尾,则使用processJsp(reader, writer) 进行处理,您可能希望实现将其转发到JSP 解析器左右。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多