我正在将传统的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);
}
}
答案 0 :(得分:0)
以下是我的观察和建议:
@WebFilter
转换为侦听器或过滤器
@WebListener
注释。@ControllerAdvice
处理错误消息
和@ExceptionHandler
注释。您可以在此处找到有关如何执行此操作的详细说明:
How can I register a servlet with Spring Boot?