Javaweb(三)注解开发Servlet

1 注解开发Servlet

1.1 Servlet3.0规范

之前使用的是Tomcat9,JavaEE规范要求是8,对应的Servlet规范规范应该是JavaEE8包含的4.x版本。
但是,在企业级应用的开发中,稳定远比追新版本重要的多。所以,之前虽然用到了Tomcat9和对应的JavaEE8,但是涉及的Servlet规范降板使用,用的是Servlet3.1版本。关于兼容性问题,向下兼容的特性,在这里也依然适用。
Servlet3.1版本的规范和Servlet3.0规范,这两个到底有怎样的联系呢?
在大概十多年前,那会还是Servlet2.5的版本的天下,它最明显的特征就是Servlet的配置要求配在web.xml中,之前练习全都是基于Servlet2.5规范编写的。从2007年开始到2009年底,在这个时间段,软件开发开始逐步的演变,基于注解的配置理念开始逐渐出现,大量注解配置思想开始用于各种框架的设计中,例如:Spring3.0版本的Java Based Configuration,JPA规范,apache旗下的struts2和mybatis的注解配置开发等等。
JavaEE6规范也是在这个期间设计并推出的,与之对应就是它里面包含了新的Servlet规范:Servlet3.0版本!

1.2 注解开发入门案例

1.2.1 自动注解配置

1)配置步骤

第一步:创建JavaWeb工程,并移除web.xml
Javaweb(三)注解开发Servlet_第1张图片
Javaweb(三)注解开发Servlet_第2张图片
Javaweb(三)注解开发Servlet_第3张图片
第二步:编写Servlet

/**
 * 注解开发Servlet
 */
public class ServletDemo1 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 {
        System.out.println("Servlet Demo1 Annotation");
    }
}

第三步:使用注解配置Servlet
Javaweb(三)注解开发Servlet_第4张图片
也可以实现多路径映射

@WebServlet({"/d4","/dd4","/ddd4"})
@WebServlet("/user/demo4")
@WebServlet("/user/*") //任意
@WebServlet("/*") //更加随意,优先级很低
@WebServlet("*.do") //.后面的名称自定义
public class ServletDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo4...");
    }
}

第四步:测试
Javaweb(三)注解开发Servlet_第5张图片
2)注解详解

/**
 * WebServlet注解
 * @since Servlet 3.0 (Section 8.1.1)
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {

    /**
     * 指定Servlet的名称。
     * 相当于xml配置中标签下的
     * 可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为Servlet的完整类名
     */
    String name() default "";

    /**
     * 用于映射Servlet访问的url映射
     * 相当于xml配置时的
     */
    String[] value() default {};

    /**
     * 相当于xml配置时的
     */
    String[] urlPatterns() default {};

    /**
     * 用于配置Servlet的启动时机
     * 相当于xml配置的
     * 标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;			      
     * 0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高;
     */
    int loadOnStartup() default -1;

    /**
     * 用于配置Servlet的初始化参数
     * 相当于xml配置的
     */
    WebInitParam[] initParams() default {};

    /**
     * 用于配置Servlet是否支持异步
     * 相当于xml配置的
     */
    boolean asyncSupported() default false;

    /**
     * 用于指定Servlet的小图标
     */
    String smallIcon() default "";

    /**
     * 用于指定Servlet的大图标
     */
    String largeIcon() default "";

    /**
     * 用于指定Servlet的描述信息
     */
    String description() default "";

    /**
     * 用于指定Servlet的显示名称
     */
    String displayName() default "";
}

你可能感兴趣的:(Javaweb)