动态加载
package app14a.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String name;
public void setName(String name) {
this.name = name;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>First Servlet</title>");
writer.println("</head>");
writer.println("<body>");
writer.println(name);
writer.println("</body>");
writer.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package app14a.listener;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebListener;
import app14a.servlet.FirstServlet;
@WebListener
public class DynRegListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
Servlet firstServlet = null;
try {
firstServlet = servletContext.createServlet(FirstServlet.class);
} catch (Exception e) {
e.printStackTrace();
}
if (firstServlet != null && firstServlet instanceof FirstServlet) {
((FirstServlet) firstServlet).setName("Dynamically registered servlet");
}
ServletRegistration.Dynamic dynamic = servletContext.addServlet("firstServlet", firstServlet);
dynamic.addMapping("/dynamic");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
Servlet容器加载
package app14a.initializer;
import java.util.Set;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.HandlesTypes;
@HandlesTypes({UsefulServlet.class})
public class MyServletContainerInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException {
System.out.println("onStartup");
ServletRegistration registration = servletContext.addServlet("usefulServlet", "servlet.usefulServlet");
registration.addMapping("/usefull");
System.out.println("leaving onStartup");
}
}
package app14a.initializer;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UsefulServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>First Servlet</title>");
writer.println("</head>");
writer.println("<body>");
writer.println("This is from UsefulServlet");
writer.println("</body>");
writer.println("</html>");
}
}
app14a.initializer.MyServletContainerInitializer