Servlet3.0支持web.xml和注解两种方式配置,但不管是通过那种方式都需要知道Servlet的处理类和映射的URL地址,这里为了方法理解我将解析web.xml和扫描@WebServlet注解的步骤省略了,直接改成了手动配置一个Servlet映射类对象。
    注册Servlet类对象代码片段:

    1. // 初始化Servlet映射类对象
    2. final Set<Class<? extends HttpServlet>> servletList = new HashSet<Class<? extends HttpServlet>>();
    3. // 手动注册Servlet类
    4. servletList.add(TestServlet.class);
    5. servletList.add(CMDServlet.class);

    当接收到浏览器请求时候我们需要根据请求的URL地址来动态调用Servlet类相关的代码。
    调用Servlet类处理Http请求代码片段:

    1. // 处理Http请求URL
    2. for (Class<? extends HttpServlet> clazz : servletList) {
    3. WebServlet webServlet = clazz.getAnnotation(WebServlet.class);
    4. String[] urlPatterns = webServlet.urlPatterns();
    5. for (String urlPattern : urlPatterns) {
    6. try {
    7. // 检测请求的URL地址和Servlet的地址是否匹配
    8. if (Pattern.compile(urlPattern).matcher(uri).find()) {
    9. // 修改状态码
    10. response.setStatus(200, "OK");
    11. // 创建Servlet类实例
    12. HttpServlet httpServlet = clazz.newInstance();
    13. // 调用Servlet请求处理方法
    14. httpServlet.service(request, response);
    15. break;
    16. }
    17. } catch (IOException e) {
    18. // 修改状态码
    19. response.setStatus(500, "Internal Server Error");
    20. e.printStackTrace();
    21. }
    22. }
    23. }