Java Servlet错误';资源不可用';

Java Servlet错误';资源不可用';,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我正在尝试构建一个Javaservlet,我已经按照教授给我们班的说明做了所有的事情,但是我遇到了一个奇怪的错误 背景:我正在使用JavaEEHelios和Tomcat7 我在Eclipse中启动了一个新的动态web项目,我创建了一个index.jsp页面,该页面只获取用户名并将其发送到servlet,然后应该打印Hello,[username]。这些代码都是教授给我们的示例代码,适用于我班上的其他人 我创建了一个名为ServletHome的新Servlet,它位于一个名为servlets的包中

我正在尝试构建一个Javaservlet,我已经按照教授给我们班的说明做了所有的事情,但是我遇到了一个奇怪的错误

背景:我正在使用JavaEEHelios和Tomcat7

我在Eclipse中启动了一个新的动态web项目,我创建了一个index.jsp页面,该页面只获取用户名并将其发送到servlet,然后应该打印Hello,[username]。这些代码都是教授给我们的示例代码,适用于我班上的其他人

我创建了一个名为ServletHome的新Servlet,它位于一个名为servlets的包中

当我从Eclipse运行程序时,Tomcat启动得很好,没有问题。我可以导航到index.jsp页面,它看起来很好

问题是,当我填写姓名并按下“提交”按钮时,我收到一个tomcat 404错误消息: “请求的资源(/MyFirstServlet/ServletHome)不可用。”

有什么想法吗

谢谢

---编辑:代码--

index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="ServletHome" method="POST">
    First Name: <input type="text" name="firstName" size="20"><br>
    Last Name: <input type="text" name="lastName" size="20"> <br>
    <br> <input type="submit" value="Submit">
</form>
</body>
</html>

在此处插入标题
名字:
姓氏:

ServletHome.java:

package servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletHome extends HttpServlet {

private static final long serialVersionUID = 1L;
public ServletHome() {
    super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{
}

/**
 * The function that gets the name and returns an HTML file with Hello to them
 * @param request
 * @param response
 * @throws ServletException
 * @throws IOException
 */
protected void doPost(HttpServletRequest request,
                                            HttpServletResponse response) 
throws ServletException, IOException {

    //set type of output
    response.setContentType("text/html;charset=UTF-8");

    //get writer
    PrintWriter out = response.getWriter();

    //get first name
    String firstName = request.getParameter("firstName").toString();

    //get last name
    String lastName = request.getParameter("lastName").toString();

    //write the file
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Test Title</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<p>Welcome, " + firstName + " " + lastName + "!</p>");
    out.println("</body>");
    out.println("</html>");

    out.close();
}
}
包servlet;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类ServletHome扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
公共服务之家(){
超级();
}
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException
{
}
/**
*函数,该函数获取名称并返回一个HTML文件,其中包含对它们的问候
*@param请求
*@param响应
*@ServletException
*@抛出异常
*/
受保护的void doPost(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException{
//设置输出类型
setContentType(“text/html;charset=UTF-8”);
//找作家
PrintWriter out=response.getWriter();
//取名字
String firstName=request.getParameter(“firstName”).toString();
//姓
字符串lastName=request.getParameter(“lastName”).toString();
//写文件
out.println(“”);
out.println(“”);
out.println(“测试标题”);
out.println(“”);
out.println(“”);
out.println(“欢迎,”+firstName+“+lastName+”!

”; out.println(“”); out.println(“”); out.close(); } }
web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
        <servlet>
            <servlet-name>ServletHome</servlet-name>
            <servlet-class>servlets.ServletHome</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletHome</servlet-name>
            <url-pattern>/servlets/*</url-pattern>
        </servlet-mapping>
</web-app> 

仆人之家
servlets.ServletHome
仆人之家
/小仆/*

资源不可用,因为:

  • 您的动作属性错误,或者
  • 您没有正确地映射servlet。为此,您可以:
  • 使用@WebServlet注释,因为您使用的是Tomcat 7:

    @WebServlet( name = "ServletName", urlPatterns = { "/path/to/your/servlet/myName" } )
    public class ServletName extends HttpServlet {
        // your code here
    }
    
    在web.xml中映射servlet:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 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">
        <!-- more code here... -->
        <servlet>
            <servlet-name>ServletName</servlet-name>
            <servlet-class>yout.package.here.ServletName</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletName</servlet-name>
            <url-pattern>/path/to/your/servlet/myName</url-pattern>
        </servlet-mapping>
        <!-- more code here... -->
    </web-app>
    
    
    服务器名
    yout.package.here.ServletName
    服务器名
    /路径/to/your/servlet/myName
    
    您需要注意的另一件事是,必须实现与希望servlet提供服务的HTTP方法(get、post等)相对应的doXXX方法

    要通过表单请求此servlet,需要将action属性设置为:

    <form action="/path/to/your/servlet/myName">
        <!-- form fields here... -->
    </form>
    
    
    

    最后,您可以使用表单中的method属性来选择浏览器将用于请求Servlet的HTTP方法。如果不提供,默认方法是get。如前所述,如果使用get方法,则需要在servlet中实现doGet方法。

    资源不可用,因为:

  • 您的动作属性错误,或者
  • 您没有正确地映射servlet。为此,您可以:
  • 使用@WebServlet注释,因为您使用的是Tomcat 7:

    @WebServlet( name = "ServletName", urlPatterns = { "/path/to/your/servlet/myName" } )
    public class ServletName extends HttpServlet {
        // your code here
    }
    
    在web.xml中映射servlet:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 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">
        <!-- more code here... -->
        <servlet>
            <servlet-name>ServletName</servlet-name>
            <servlet-class>yout.package.here.ServletName</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletName</servlet-name>
            <url-pattern>/path/to/your/servlet/myName</url-pattern>
        </servlet-mapping>
        <!-- more code here... -->
    </web-app>
    
    
    服务器名
    yout.package.here.ServletName
    服务器名
    /路径/to/your/servlet/myName
    
    您需要注意的另一件事是,必须实现与希望servlet提供服务的HTTP方法(get、post等)相对应的doXXX方法

    要通过表单请求此servlet,需要将action属性设置为:

    <form action="/path/to/your/servlet/myName">
        <!-- form fields here... -->
    </form>
    
    
    

    最后,您可以使用表单中的method属性来选择浏览器将用于请求Servlet的HTTP方法。如果不提供,默认方法是get。如前所述,如果使用get方法,则需要在servlet中实现doGet方法。

    web.xml中的servlet映射似乎与您尝试访问的url不匹配。如果您可以粘贴您试图访问的web.xml和url的一部分,那就太好了。您必须给我们一个代码示例。我刚刚添加了代码,非常感谢您的帮助@BIU:访问以/servlets/?开头的每个url时,您真的希望执行servlet吗?您在web.xml中的servlet映射似乎与您尝试访问的url不匹配。如果您可以粘贴您试图访问的web.xml和url的一部分,那就太好了。您必须给我们一个代码示例。我刚刚添加了代码,非常感谢您的帮助@BIU:您真的希望在访问每个以/servlets/开头的url时执行servlet吗?