【发布时间】:2015-07-18 04:02:15
【问题描述】:
我希望有一个RequestHandler 能够在myDomain/images/id8938748.jpg 上动态创建图像,同时通过标准VaadinServlet 处理所有其他流量。为此,我知道我需要将RequestHandler 放入VaadinServlet 作为explained here,方法是:
public class MyCustomServlet extends VaadinServlet
{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
getService().addSessionInitListener(new SessionInitListener()
{
@Override
public void sessionInit(SessionInitEvent event) throws ServiceException
{
event.getSession().addRequestHandler(myCustomRequestHandlerForImages);
}
});
}
}
我的问题是如何注册新的MyCustomServlet?我在web.xml 中查看了它,但我似乎无法做到正确。
我的RequestHandler 很简单:
@Override
public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
{
System.out.println("Test it's being called");
}
对于web.xml,我有:
<servlet>
<servlet-name>MyCustomVaadinServlet</servlet-name>
<servlet-class>
com.test.MyCustomVaadinServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyCustomVaadinServlet</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
然后我在 UI 代码中定义了另一个 Servlet 并带有注释:
public class MyUI extends UI
{
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyUI.class, widgetset = "com.MyWidgetSet")
public static class Servlet extends VaadinServlet
{
}
...
}
当我调用域本身时,一切都按预期工作,我的 Vaadin 应用程序也能正常工作。但是当我调用 domain/images 或 domain/images/randomText 时,我得到一个空页面,并且不会输出 System.out.println 语句。基本上不会调用RequestHandler。
我也尝试过映射到/images/* 和/app/* 之类的方法,但这并没有什么区别...
【问题讨论】:
标签: javascript java jakarta-ee vaadin vaadin7