Tomcat 7 keeps giving me a 404. What am I doing wrong?

陌路散爱 提交于 2019-12-30 10:45:08

问题


this is my first servlet ever. here is it's code.

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Ch1Servlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    PrintWriter out = response.getWriter();
    java.util.Date today = new java.util.Date();
    out.println("<html> " +"<body>" +"<h1 align=center>HF\'s Chapter1 Servlet</h1>" +" " + "<br>" + today + "</body>" + "</html>");
    }
}

I compiled it using this command javac -classpath /usr/share/tomcat7/common/lib/servlet-api.jar -d classes src/Ch1servlet.java
I then put the .class file in the classes folder in my WEB-INF folder.

Here is my web.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<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/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
    <servlet>
        <servlet-name>Chapter1 Servlet</servlet-name>
        <servlet-class>Ch1Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Chapter1 Servlet</servlet-name>
        <url-pattern>/Serv1</url-pattern>
    </servlet-mapping>
</web-app>

Tomcat7 keeps giving me a 404 on http://127.0.0.1:8080/ch1/Serv1/ saying The requested resource (/ch1/Serv1/) is not available.

File Tree:

What am i doing wrong here?


回答1:


You should put servlet classes in a package. Whether packageless servlets works depend on the specific combination of an older Tomcat and JVM version. If you see this example in a book/tutorial, then it is surely far outdated.

package com.example;

// ...

public class Ch1Servlet extends HttpServlet {
    // ...
}

You should have a /com/example/Ch1Servlet.java file. Compile it as follows

javac -classpath /usr/share/tomcat7/common/lib/servlet-api.jar -d classes src/com/example/Ch1servlet.java

(I however wonder what the common lib is doing there, this was typical for Tomcat 4.x/5.x, but it's not present since Tomcat 6. If you manually changed Tomcat's structure in order to follow the instructions of an outdated tutorial, undo it!)

Put the com folder with the generated class by its entirity in /WEB-INF/classes folder of your webapp. So you must have a /WEB-INF/classes/com/example/Ch1Servlet.class.

Then, edit your /WEB-INF/web.xml to specify the fully qualified name (FQN) of the servlet class in <servlet-class>:

<?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" 
>
    <servlet>
        <servlet-name>Chapter1 Servlet</servlet-name>
        <servlet-class>com.example.Ch1Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Chapter1 Servlet</servlet-name>
        <url-pattern>/Serv1</url-pattern>
    </servlet-mapping>
</web-app>

(please note that I fixed the root declaration as well to comply Tomcat 7 supported servlet version, it would otherwise fall back to least compatibility modus)




回答2:


You should config your ch1 context, in server.xml ,like this:

<Context docBase="Your_web_apps_directory" path="/ch1" reloadable="false"/>


来源:https://stackoverflow.com/questions/8907518/tomcat-7-keeps-giving-me-a-404-what-am-i-doing-wrong

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!