7

如何在没有 web.xml 或注释的情况下以编程方式实现此映射?任务是不使用任何框架,如 spring 或其他东西。

<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>
4

3 回答 3

8

从 Servlet 3.0 开始,您可以使用ServletContext#addServlet()它。

servletContext.addServlet("hello", test.HelloServlet.class);

根据您正在开发的内容,您可以使用两个挂钩来运行此代码。

  1. 如果您正在开发可公开重用的模块化 Web 片段 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);
        }
    
    }
    
  2. 或者,如果您将其用作 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>

也可以看看:

于 2016-08-30T07:24:17.040 回答
6

您可以使用注释来使用代码实现此目的。

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");
    }
}

您可以在此处此处此处阅读有关注释的信息

于 2016-08-30T04:59:26.857 回答
1

如果您使用的是 tomcat 7 或更高版本,则可以通过注释来完成

@WebServlet("/hello") 
于 2016-08-30T04:54:26.413 回答