This tutorial demonstrates configuring a Servlet / Filter as a procedure.
Adding Servlets / Filters as a procedure, allows re-use of existing code. Ideally, over time, the Servlets / Filters are simplified to methods taking advantage of OfficeFloor's IoCC. However, Servlets / Filters are supported as procedures to avoid significant rewrites of your application code. This enables taking advantage of OfficeFloor's features with existing code.
The Servlet to be integrated as a procedure, is as follows:
public class TutorialServlet extends HttpServlet { @Inject private InjectedDependency dependency; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("SERVLET " + this.dependency.getMessage()); } }
The Filter is as follows:
public class TutorialFilter extends HttpFilter { @Dependency private InjectedDependency dependency; @Override protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // Determine if filter String isFilter = request.getParameter("filter"); if (Boolean.parseBoolean(isFilter)) { // Provide filter response response.getWriter().write("FILTER " + this.dependency.getMessage()); } else { // Carry on filter chain chain.doFilter(request, response); } } }
To configure a Servlet / Filter as a procedure, add the following dependency:
<dependency> <groupId>net.officefloor.jee</groupId> <artifactId>officeservlet</artifactId> </dependency>
Once added, select the Servlet / Filter as a class when adding a procedure. The tutorial configuration is as follows:
The dependency is a simple object:
public class InjectedDependency { public String getMessage() { return "WITH DEPENDENCY"; } }
Configured via OfficeFloor as follows:
<objects> <managed-object class="net.officefloor.tutorial.servlethttpserver.InjectedDependency" /> </objects>
The following test confirms the integration of the Servlet and Filter as procedures:
@RegisterExtension public final MockWoofServerExtension server = new MockWoofServerExtension(); @Test public void filterResponse() { MockWoofResponse response = this.server.send(MockWoofServer.mockRequest("/?filter=true")); response.assertResponse(200, "FILTER WITH DEPENDENCY"); } @Test public void servletResponse() { MockWoofResponse response = this.server.send(MockWoofServer.mockRequest("/")); response.assertResponse(200, "SERVLET WITH DEPENDENCY"); }
The next tutorial covers migrating Servlets / Filters for simpler code and avoid the dependency on JEE.