Сопоставьте сервлет программно вместо использования web.xml или аннотаций
Как я могу реализовать это отображение программно без web.xml или аннотаций? Миссия не в том, чтобы использовать какие-либо рамки, такие как весна или что-то еще.
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3 ответа
Начиная с Servlet 3.0 вы можете использовать ServletContext#addServlet()
за это.
servletContext.addServlet("hello", test.HelloServlet.class);
В зависимости от того, что вы разрабатываете, вы можете запустить этот код двумя способами.
Если вы разрабатываете публично многократно используемый файл JAR модульного веб-фрагмента, такой как существующие фреймворки, такие как JSF и Spring MVC, то используйте
ServletContainerInitializer
,public class YourFrameworkInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> c, ServletContext servletContext) throws ServletException { servletContext.addServlet("hello", test.HelloServlet.class); } }
Или, если вы используете его как внутренне интегрированную часть вашего WAR-приложения, используйте
ServletContextListener
,@WebListener public class YourFrameworkInitializer implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { event.getServletContext().addServlet("hello", test.HelloServlet.class); } // ... }
Вам нужно только убедиться, что ваш web.xml
совместим с Servlet 3.0 или новее (и, следовательно, не Servlet 2.5 или старше), в противном случае servletcontainer будет работать в резервном режиме, соответствующем заявленной версии, и вы потеряете все функции Servlet 3.0.
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
>
<!-- Config here -->
</web-app>
Смотрите также:
Вы можете использовать аннотации для достижения этого с помощью кода.
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.getWriter().println("Hello");
}
}
Если вы используете Tomcat 7 или выше, вы можете сделать это с помощью аннотации
@WebServlet("/hello")