Servlet3.0支持web.xml和注解两种方式配置,但不管是通过那种方式都需要知道Servlet的处理类和映射的URL地址,这里为了方法理解我将解析web.xml和扫描@WebServlet注解的步骤省略了,直接改成了手动配置一个Servlet映射类对象。
注册Servlet类对象代码片段:
// 初始化Servlet映射类对象final Set<Class<? extends HttpServlet>> servletList = new HashSet<Class<? extends HttpServlet>>();// 手动注册Servlet类servletList.add(TestServlet.class);servletList.add(CMDServlet.class);
当接收到浏览器请求时候我们需要根据请求的URL地址来动态调用Servlet类相关的代码。
调用Servlet类处理Http请求代码片段:
// 处理Http请求URLfor (Class<? extends HttpServlet> clazz : servletList) {WebServlet webServlet = clazz.getAnnotation(WebServlet.class);String[] urlPatterns = webServlet.urlPatterns();for (String urlPattern : urlPatterns) {try {// 检测请求的URL地址和Servlet的地址是否匹配if (Pattern.compile(urlPattern).matcher(uri).find()) {// 修改状态码response.setStatus(200, "OK");// 创建Servlet类实例HttpServlet httpServlet = clazz.newInstance();// 调用Servlet请求处理方法httpServlet.service(request, response);break;}} catch (IOException e) {// 修改状态码response.setStatus(500, "Internal Server Error");e.printStackTrace();}}}
