说明
在Sevlet中也可以编写一个处理器,用来对系统中异常作统一处理。
功能实现 第一步:自定义异常public class ArgumentException extends RuntimeException {
@Getter
private String msg;
public ArgumentException(String msg) {
super(msg);
this.msg = msg;
}
}
第二步:定义用来处理异常的Servlet
@WebServlet(urlPatterns = "/creditsExceptionHandler")
public class CreditsExceptionHandler extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
//获取页面对象
PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, true, 8192, true);
//通过页面对象获取异常对象
CreditsException exception = (CreditsException) pageContext.getException();
req.setAttribute("msg", exception.getMsg());
req.setAttribute("aim", exception.getAim());
req.getRequestDispatcher("error.ftl").forward(req, resp);
}
}
第三步:在web.xml中配置异常处理器
com.wc.ex.ArgumentException
/argumentExceptionHandler
第四步:Servlet中使用测试
@WebServlet(urlPatterns = "/user")
public class UserServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
if(username == null || username.trim().length()==0){
throw new ArgumentException("参数用户名不能为空");
}
}
}