Spring Boot Servlet注册

时间:2019-02-01 16:50:40

标签: spring-boot servlets

我正在将传统的Servlet / JSP应用程序迁移到Spring Boot。

这是servlet类的当前结构

public class CreateAbsenceServlet extends CommonServlet 

我能够在下面的spring boot configuratin类中将该servlet注册为bean

@Bean
  public ServletRegistrationBean CreateAbsenceServletRegistrationBean() {
    ServletRegistrationBean bean = new ServletRegistrationBean(
        new CreateAbsenceServlet(), "/createAbsence");

    return bean;
  }

问题是我如何注册CommonServlet,因为该Servlet没有直接映射,因为它是一个抽象类,该类扩展了HTTPServlet并具有许多Servlet生命周期方法。

@SuppressWarnings("serial")
public abstract class CommonServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        prepareExecute(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        prepareExecute(request, response);
    }

    protected abstract void execute(HttpSession session,
            HttpServletRequest request, HttpServletResponse response,
            PrintWriter out, BufferedReader reader) throws Exception;

            protected void prepareExecute(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        try {
            HttpSession session = request.getSession();
            PrintWriter out = response.getWriter();
            BufferedReader reader = request.getReader();
            response.setContentType("text/html");

            execute(session, request, response, out, reader);
        } catch (Exception ex) {
            if (ServletException.class.isInstance(ex)) {
                throw (ServletException) ex;
            } else {
                throw new ServletException(ex);
            }
        }
    }

    public String getParameterValue(HttpServletRequest req, String parameter) {
        Enumeration<String> parameterNames = req.getParameterNames();
        String paramValue = "";

        while (parameterNames.hasMoreElements()) {
            String paramName = parameterNames.nextElement();

            if (parameter.equalsIgnoreCase(paramName)) {
                String[] paramValues = req.getParameterValues(paramName);

                for (int i = 0; i < paramValues.length; i++) {
                    paramValue = paramValues[i];
                }
            }
        }

        return paramValue;
    }

    public void sendError(HttpServletResponse response, String errorMessage,
            int status) throws IOException {

        response.setStatus(status);
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(errorMessage);
    }
}

1 个答案:

答案 0 :(得分:0)

以下是我的观察和建议:

  • 您可以检查类中的方法是否符合条件吗 使用@WebFilter转换为侦听器或过滤器 @WebListener注释。
  • 可以使用Spring Boot @ControllerAdvice处理错误消息 和@ExceptionHandler注释。

您可以在此处找到有关如何执行此操作的详细说明:
How can I register a servlet with Spring Boot?