Ubuntu14.04 html 上的 Tomcat7 工作但 servlet 出现 404 错误
Tomcat7 on Ubuntu14.04 html works but 404 error for servlets
我是 servlet 的新手。我在Ubuntu14.04安装了Tomcat7,服务运行正常。但它为 servlet (http://localhost:8080/hello/HelloServlet) 提供 404(未找到)错误。应用程序中的 html 运行良好。 Tomcat 管理工具也是如此。
知道我做错了什么吗?
Tomcat 网络应用程序结构:
/var/lib/tomcat7/webapps
webapps
|-- ROOT
|-- hello
| |-- index.html
| `-- WEB-INF
| |-- classes
| | |-- HelloServlet.class
| | `-- HelloServlet.java
| |-- lib
| `-- web.xml
|-- index.html
`-- META-INF
`-- context.xml
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
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>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
HelloServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
@WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"})
public class HelloServlet extends HttpServlet{
private String message;
public void init() throws ServletException{
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy(){
}
}
java 源文件不应位于 /WEB-INF 文件夹中。 Servlet 是一个常规 java 文件,应该位于 /src/... 文件夹中。此外,一旦您将 class 注释为 @WebServlet - 您可以删除 web.xml 文件(尽管它有许多其他用途,但为了简化起见,可以忽略将其用于 'servlet-mapping')。
├───build
│ └───classes
│ └───pkg
│ HelloServlet.class
│
├───src
│ └───pkg
│ HelloServlet.java
│
└───WebContent
├───META-INF
│ MANIFEST.MF
│
└───WEB-INF
└───lib
你的 java class 文件位置错误,将你的 java class 文件更改为 src 文件夹。
终于明白了运行:)
造成问题的是目录结构。应用程序目录应该就在 'webapps/ROOT' 目录之外。具体来说,直接把应用目录放在'webapps'下即可(好像是Tomcat7和Ubuntu 14.04LTS的特例)
更正后的结构:
webapps
|-- ROOT
`-- hello
|-- index.html
`-- WEB-INF
|-- classes
| |-- HelloServlet.class
| `-- HelloServlet.java
|-- lib
`-- web.xml
之前的结构(有错误):
webapps
|-- ROOT
|-- hello
| |-- index.html
| `-- WEB-INF
| |-- classes
| | |-- HelloServlet.class
| | `-- HelloServlet.java
| |-- lib
| `-- web.xml
|-- index.html
`-- META-INF
`-- context.xml
我是 servlet 的新手。我在Ubuntu14.04安装了Tomcat7,服务运行正常。但它为 servlet (http://localhost:8080/hello/HelloServlet) 提供 404(未找到)错误。应用程序中的 html 运行良好。 Tomcat 管理工具也是如此。
知道我做错了什么吗?
Tomcat 网络应用程序结构: /var/lib/tomcat7/webapps
webapps
|-- ROOT
|-- hello
| |-- index.html
| `-- WEB-INF
| |-- classes
| | |-- HelloServlet.class
| | `-- HelloServlet.java
| |-- lib
| `-- web.xml
|-- index.html
`-- META-INF
`-- context.xml
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
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>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
HelloServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
@WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"})
public class HelloServlet extends HttpServlet{
private String message;
public void init() throws ServletException{
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy(){
}
}
java 源文件不应位于 /WEB-INF 文件夹中。 Servlet 是一个常规 java 文件,应该位于 /src/... 文件夹中。此外,一旦您将 class 注释为 @WebServlet - 您可以删除 web.xml 文件(尽管它有许多其他用途,但为了简化起见,可以忽略将其用于 'servlet-mapping')。
├───build
│ └───classes
│ └───pkg
│ HelloServlet.class
│
├───src
│ └───pkg
│ HelloServlet.java
│
└───WebContent
├───META-INF
│ MANIFEST.MF
│
└───WEB-INF
└───lib
你的 java class 文件位置错误,将你的 java class 文件更改为 src 文件夹。
终于明白了运行:)
造成问题的是目录结构。应用程序目录应该就在 'webapps/ROOT' 目录之外。具体来说,直接把应用目录放在'webapps'下即可(好像是Tomcat7和Ubuntu 14.04LTS的特例)
更正后的结构:
webapps
|-- ROOT
`-- hello
|-- index.html
`-- WEB-INF
|-- classes
| |-- HelloServlet.class
| `-- HelloServlet.java
|-- lib
`-- web.xml
之前的结构(有错误):
webapps
|-- ROOT
|-- hello
| |-- index.html
| `-- WEB-INF
| |-- classes
| | |-- HelloServlet.class
| | `-- HelloServlet.java
| |-- lib
| `-- web.xml
|-- index.html
`-- META-INF
`-- context.xml