何时加载web.xml文件以映射servlet?

时间:2019-03-16 16:49:43

标签: java linux tomcat servlets

我正在尝试使用Java Servlet和tomcat将Java函数的结果显示到html页面中。 我在Linux Mint 19.1 Cinnamon上并使用apache-tomcat-8.5.38 我的问题是,当我尝试将servlet映射到web.xml文件时,它似乎不起作用:

这是我的web.xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app >
  <servlet>
    <servlet-name>SearchEngineServlet</servlet-name>
    <servlet-class>SearchEngine</servlet-class>
  </servlet>

   <servlet-mapping>
    <servlet-name>SearchEngineServlet</servlet-name>
    <url-pattern>/servlet/*</url-pattern>
  </servlet-mapping>
</web-app>

这是我的index.html文件:

<!DOCTYPE html>
<html>
<head>
    <title>Search Engine</title>
</head>
<body>
    <div>

        <a href="search">Click to call Servlet</a>

        <form action="servlet/search" method="post">
            <input type="text" name="s">
            <input type="submit" value="Submit">
        </form>
    </div>
</body>
</html>

这是我的名为SearchEngine.java的应用程序:

public class SearchEngine extends HttpServlet {

    private String mymsg;

    @Override
    public void init() throws ServletException 
    {      
        mymsg = "Http Servlet Demo";   
    }

    @Override
    public void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, 
        IOException 
    {      
        PrintWriter out = response.getWriter();
        out.println("<h1>" + mymsg + "</h1>");
    }
}

我的文件在这里:

web.xml -> /home/cubouyaka/web/apache-tomcat-8.5.38/webapps/SearchEngine/WEB-INF/web.xml
SearchEngine.java -> /home/cubouyaka/web/apache-tomcat-8.5.38/webapps/SearchEngine/WEB-INF/src/SearchEngine.java
index.html -> /home/cubouyaka/web/apache-tomcat-8.5.38/webapps/SearchEngine/index.html

然后我可以访问index.html,但是当我尝试单击链接以使用servlet时,出现了一个非文件错误,提示/home/cubouyaka/web/apache-tomcat-8.5.38/webapps/ SearchEngine / servlet / search不存在,但是我在web.xml中进行了映射,所以我不明白为什么会收到此错误。

请有人帮我,我已经浪费了很多时间来解决这个问题。

1 个答案:

答案 0 :(得分:0)

加载web.xml时,您可以看一下this post以获得答案,但这并不是您要解决的问题。

假定上下文路径为空(绑定到根),该代码也是正确的。 只是一件事是错误的:

<a href="search">Click to call Servlet</a>

在servlet / *下映射到的连接到servlet的URL也应在此引用。

<a href="servlet/search">Click to call Servlet</a>