【问题标题】:Can't get war file deployment using glassfish无法使用 glassfish 部署战争文件
【发布时间】:2017-01-10 16:00:12
【问题描述】:

这是war文件内容:

tar -xvf search.war
x META-INF/
x META-INF/MANIFEST.MF
x WEB-INF/
x WEB-INF/classes/
x WEB-INF/classes/com/
x WEB-INF/classes/com/init/
x WEB-INF/classes/com/init/HelloServlet.class
x WEB-INF/web.xml

web.xml 内容:

<?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_2_5.xsd"
         version="2.5">
    <servlet>
        <servlet-name>homeServlet</servlet-name>
        <servlet-class>com.init.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>homeServlet</servlet-name>
        <url-pattern>/search*</url-pattern>
    </servlet-mapping>
</web-app>

HelloServlet.java 内容

package com.init;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author sudeep
 * @since 31/08/16
 */
public class HelloServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
        PrintWriter printWriter = null;
        try {
            printWriter = httpServletResponse.getWriter();
        } catch (IOException e) {
            e.printStackTrace();
        }
        httpServletResponse.setContentType("text/html");
        printWriter.print("<html><body><p>Hello World!</p></html></body>");
        printWriter.close();
    }
}

然后使用以下命令在 glassfish 上部署战争:

asadmin --port 5000 --host localhost deploy search.war

当我希望使用 glassfish ui 启动应用程序 search 时,我得到了这些:

这里有什么问题?

【问题讨论】:

  • 你的war文件真的是tar文件吗?那是行不通的——你需要使用 jar 命令。
  • @stdunbar 就是用来解压war文件

标签: java servlets gradle glassfish web.xml


【解决方案1】:

从管理员看来,webapp 上下文名称是 search(这是有道理的,默认情况下它与 war 同名)。这使您的 web 应用程序的 url http://hostname:8080/search

然后你的 servlet 被映射到 url 模式 /search*,这实际上是相对于你的 webapp 的 url。所以它会在以 http://hostname:8080/search/search 开头的 url 上触发。如果您尝试使用此 url 模式,则应该调用 servlet。

您可能想要实现的是您的 web 应用程序部署为根 web 应用程序,因此上下文名称不会成为 url 的一部分。由于您使用的是 Glassfish 并使用 asadmin,因此您可以这样做:

asadmin --port 5000 --host localhost deploy --contextroot "/" search.war

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多