eclipse创建web项目
@WebServlet("/hello") //使用注解开启web应用
public class HelloServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
resp.getWriter().write("Hello...");
}
}
<body>
<a href="hello">hello</a>
</body>
应用启动的时候,会运行onStartup方法;
Set<Class<?>> arg0:感兴趣的类型的所有子类型;
ServletContext sc:代表当前Web应用的ServletContext;一个Web应用一个ServletContext;
- 使用ServletContext注册Web组件(Servlet、Filter、Listener)
- 使用编码的方式,在项目启动的时候给ServletContext里面添加组件; 必须在项目启动的时候来添加;
添加的时机:
- ServletContainerInitializer得到的ServletContext;
- ServletContextListener得到的ServletContext;
//容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类,子接口,抽象类等)传递过来;
//传入感兴趣的类型;
@HandlesTypes(value= {HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer{
@Override
public void onStartup(Set<Class<?>> arg0, ServletContext sc) throws ServletException {
// TODO Auto-generated method stub
System.out.println("感兴趣的类型:");
for (Class<?> claz : arg0) {
System.out.println(claz);
}
//注册组件 ServletRegistration
ServletRegistration.Dynamic addServlet = sc.addServlet("UserServlet", new UserServlet());
//配置servlet的映射信息
addServlet.addMapping("/user");
//注册Listener
sc.addListener(UserListener.class);
//注册Filter FilterRegistration
FilterRegistration.Dynamic addFilter = sc.addFilter("userFilter", UserFilter.class);
//配置Filter的映射信息
addFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
}}
public class UserListener implements ServletContextListener{
//监听ServletContext启动初始化
public void contextInitialized(ServletContextEvent arg0) {
//ServletContext servletContext = arg0.getServletContext(); //在这里可以得到ServletContext
System.out.println("UserListener...contextInitialized...");
}}