Регистрация сервлета Spring Boot - PullRequest
0 голосов
/ 01 февраля 2019

Я перевожу традиционное приложение Servlet / JSP в Spring Boot.

Это текущая структура класса сервлета

public class CreateAbsenceServlet extends CommonServlet 

Мне удалось зарегистрировать этот сервлет в качестве компонента вкласс конфигурации весенней загрузки, как показано ниже

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

    return bean;
  }

Вопрос в том, как зарегистрировать CommonServlet, потому что для этого сервлета нет прямого сопоставления, поскольку он является абстрактным классом, который расширяет HTTPServlet и имеет набор методов жизненного цикла сервлета

@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 голосов
/ 07 мая 2019

Ниже приведены мои наблюдения и предложения:

  • Можете ли вы проверить, могут ли методы в классе быть преобразованы в прослушиватель или фильтр с использованием аннотации @WebFilter или @WebListener.
  • Сообщение об ошибке можно обработать, используя отдельно примечания @ControllerAdvice и @ExceptionHandler для пружинной загрузки.

Подробное объяснение того, как это сделать, можно найти здесь.:
Как мне зарегистрировать сервлет в Spring Boot?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...