Jboss EAP - 未加载 Servlet
Jboss EAP - Servlet not loaded
我有一个 war 文件包含:
META-INF
|___MANIFEST.MF
WEB-INF
|___web.xml
|___classes
|____servlet
|____StarterServlet.class
我的 web.xml 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>WAR</display-name>
<servlet>
<display-name>Starter Servlet</display-name>
<servlet-name>StarterServlet</servlet-name>
<servlet-class>servlet.StarterServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StarterServlet</servlet-name>
<url-pattern>/starter</url-pattern>
</servlet-mapping>
</web-app>
而我的 servlet 代码是:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StarterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig servletConfiguration) throws ServletException {
super.init(servletConfiguration);
System.out.println("SERVLET STARTED!");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("DOGET!");
PrintWriter printWriter = response.getWriter();
printWriter.println("Hello world");
}
}
此外,我的运行时名称是:"war",因此我将使用此 URL:
查找我的上下文根
http://localhost:8080/war/starter.
主要问题是我的 servlet 没有初始化,而且我在 jboss 日志文件上看不到任何痕迹,尽管我的 war 部署正确。
我哪里做错了?
谢谢
如果要将上下文根更改为 http://localhost:8080/war/,则必须将 jboss-web.xml 添加到 WEB-INF/jboss-web.xml
,内容为:
<jboss-web>
<context-root>war</context-root>
</jboss-web>
当您上传 war.
时,还要保留 Name
和 Runtime Name
中的默认值
在 jboss 日志中,您应该会看到一条包含 Registered web context: /war
的消息
感谢@wirnse 的回答,我得到了解决方案。
名称和运行时名称必须始终包含正在部署的文件的扩展名。
例如:application.war 的名称和运行时名称必须遵循以下模式:
^[a-zA-Z]+.(耳|war|罐)
myapp.war 或 war.war
我有一个 war 文件包含:
META-INF
|___MANIFEST.MF
WEB-INF
|___web.xml
|___classes
|____servlet
|____StarterServlet.class
我的 web.xml 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>WAR</display-name>
<servlet>
<display-name>Starter Servlet</display-name>
<servlet-name>StarterServlet</servlet-name>
<servlet-class>servlet.StarterServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StarterServlet</servlet-name>
<url-pattern>/starter</url-pattern>
</servlet-mapping>
</web-app>
而我的 servlet 代码是:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StarterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig servletConfiguration) throws ServletException {
super.init(servletConfiguration);
System.out.println("SERVLET STARTED!");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("DOGET!");
PrintWriter printWriter = response.getWriter();
printWriter.println("Hello world");
}
}
此外,我的运行时名称是:"war",因此我将使用此 URL:
查找我的上下文根http://localhost:8080/war/starter.
主要问题是我的 servlet 没有初始化,而且我在 jboss 日志文件上看不到任何痕迹,尽管我的 war 部署正确。
我哪里做错了?
谢谢
如果要将上下文根更改为 http://localhost:8080/war/,则必须将 jboss-web.xml 添加到 WEB-INF/jboss-web.xml
,内容为:
<jboss-web>
<context-root>war</context-root>
</jboss-web>
当您上传 war.
时,还要保留Name
和 Runtime Name
中的默认值
在 jboss 日志中,您应该会看到一条包含 Registered web context: /war
感谢@wirnse 的回答,我得到了解决方案。
名称和运行时名称必须始终包含正在部署的文件的扩展名。
例如:application.war 的名称和运行时名称必须遵循以下模式:
^[a-zA-Z]+.(耳|war|罐)
myapp.war 或 war.war