1. 使用@WebServlet定义servlet
@WebServlet("/hello")
public class ServletExample extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.println("hello");
}
}
2. Shared libraries / Runtimes pluggability
- 在servlet容器启动时,会扫描当前应用jar包的ServletContainerInitializer的实现
- 也可以自定义ServletContainerInitializer的实现, 从而实现在servlet启动时,添加自定义类的扫描。
- 在
META-INF/services
目录下定义一个名字是javax.servlet.ServletContainerInitializer
的文件- 在
ServletContainerInitializer
文件里面,写上自定义ServletContainerInitializer类的全类名。- 添加@HandlesTypes注解,引入@HandlesTypes指定类型下的所有子类型
3. 添加web组件(Servlet,Filter,Listener)
@HandlesTypes(IServlet.class)
public class MyServletContainerInitializer implements ServletContainerInitializer {
public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
System.out.println("classes interests");
for (Class<?> claz : c) {
System.out.println(claz);
}
ServletRegistration.Dynamic servlet = ctx.addServlet("myServlet", new MyServlet());
servlet.addMapping("/myServlet2");
FilterRegistration.Dynamic filter = ctx.addFilter("myFilter", MyFilter.class);
filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
ctx.addListener(MyListener.class);
}
输出
classes interests
class main.com.test.tournesol.myservlet.ServletImp
class main.com.test.tournesol.myservlet.AbstractServlet
contextInitialized...
my filter
``
网友评论