1、Servlet 3.0
从2007年开始到2009年底,在这个时间段,软件开发开始逐步的演变,基于注解的配置理念开始逐渐出现,大量注解配置思想开始用于各种框架的设计中,例如:Spring3.0版本的Java Based Configuration,JPA规范,apache旗下的struts2和mybatis的注解配置开发等等。
Servlet3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。
- 新增的注解支持
- 用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明
- 异步处理支持
- Servlet 接受请求以后,将线程交给一个异步线程,自身则返回容器,直到业务处理完毕做出响应(异步线程拥有ServletRequest和ServletResponse对象的引用),最后才结束该 Servlet 线程。如此一来Servlet不再是一直处于阻塞状态等待业务处理完成。
- 以前的Servlet接受到请求以后,由于可能要对数据进行处理,比如说跨网络的调用和数据库的操作,在等待过程中线程就被阻塞,资源得不到释放。
- 可插性支持
- 开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。
2、注解的使用
@WebServlet("/teacherServlet")
public class TeacherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello annotation");
}
}
仅需在类开头加一行@WebServlet("/teacherServlet")
无需再配置xml文件,要注意加 /
3、注解详细
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
/**
* 指定Servlet的名称。
* 相当于xml配置中<servlet>标签下的<servlet-name>
*/
String name() default "";
/**
* 用于映射Servlet访问的url映射
* 相当于xml配置时的<url-pattern>
*/
String[] value() default {};
/**
* 相当于xml配置时的<url-pattern>
*/
String[] urlPatterns() default {};
/**
* 用于配置Servlet的启动时机
* 相当于xml配置的<load-on-startup>
*/
int loadOnStartup() default -1;
/**
* 用于配置Servlet的初始化参数
* 相当于xml配置的<init-param>
*/
WebInitParam[] initParams() default {};
/**
* 用于配置Servlet是否支持异步
* 相当于xml配置的<async-supported>
*/
boolean asyncSupported() default false;
/**
* 用于指定Servlet的小图标
*/
String smallIcon() default "";
/**
* 用于指定Servlet的大图标
*/
String largeIcon() default "";
/**
* 用于指定Servlet的描述信息
*/
String description() default "";
/**
* 用于指定Servlet的显示名称
*/
String displayName() default "";
}
4、手动创建Servlet容器
1)编写Servlet
public class PeopleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("PeopleServlet");
}
}
2)创建初始化容器的类
public class MyServletContainerInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
//servlet的创建和配置
//1.创建PeopleServlet
PeopleServlet peopleServlet = new PeopleServlet();
//2.在ServletContext对象中添加Servlet,并将得到Servlet的动态配置对象
ServletRegistration.Dynamic peopleServlet1 = servletContext.addServlet("peopleServlet", peopleServlet);
//3.配置Servlet
peopleServlet1.addMapping("/peopleServlet");
peopleServlet1.setLoadOnStartup(1);
}
}
3)创建文件
- 在src目录下创建WEB-INF文件夹 大小写不能改变
- 在WEB-INF下创建services文件夹
- 在services目录下创建 javax.servlet.ServletContainerInitializer 文件
- 在 javax.servlet.ServletContainerInitializer 文件中写入 MyServletContainerInitializer 的全限定类名 com.xxx.servlet.MyServletContainerInitializer
4)进行访问
http://localhost:8080/crm/peopleServlet
评论区