J'essaie de créer une servlet dans Vaadin 14 fonctionnant avec Spring boot. J'ai lu la page sur le cycle de vie de l'application sur Cycle de vie des applications Vaadin et j'ai essayé de créer une servlet avec l'aide de celui-ci mais je n'ai pas réussi. Ma page Web ne semble pas reconnaître l'URL. J'ai essayé à la fois VaadinServlet et SpringServlet, voici mon code :
@WebServlet(value = "name", urlPatterns = {"customservlet"})
public class CustomServlet extends SpringServlet implements SessionInitListener, SessionDestroyListener {
public CustomServlet(ApplicationContext context, boolean forwardingEnforced) {
super(context, forwardingEnforced);
}
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized();
getService().addSessionInitListener(this);
getService().addSessionDestroyListener(this);
}
@Override
public void sessionInit(SessionInitEvent event)
throws ServiceException {
// Do session start stuff here
}
@Override
public void sessionDestroy(SessionDestroyEvent event) {
// Do session end stuff here
}
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
getService().addSessionInitListener((SessionInitListener) event -> event.getSession().addRequestHandler(globalRequestHandler()));
super.service(request, response);
}
public RequestHandler globalRequestHandler() {
return (session, vaadinRequest, response) -> {
if ("/customservlet".equals(vaadinRequest.getPathInfo())) {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().append("some content");
response.getWriter().flush();
return true;
} else {
return false;
}
};
}
}
Edit : Ca a marché avec Leifs avec la solution. Voici les résultats si quelqu'un veut savoir :
@Route("yourroute")
@SpringComponent
public class MyInitListener implements Serializable, VaadinServiceInitListener {
@Override
public void serviceInit(ServiceInitEvent serviceEvent) {
serviceEvent.getSource().addSessionInitListener(initEvent -> {
initEvent.getSession().addRequestHandler(globalRequestHandler());
});
serviceEvent.getSource(). addSessionDestroyListener(initEvent -> {
initEvent.getSession().close();
});
}
public RequestHandler globalRequestHandler() {
return (session, vaadinRequest, response) -> {
if ("/yourroute".equals(vaadinRequest.getPathInfo())) {
response.setContentType("text/plain");
PrintWriter pw = response.getWriter();
pw.write("Some content");
pw.close();
return true;
} else {
return false;
}
};
}
}