我正在尝试构建一个Java servlet,并且我已经根据我的教授给我们班级的指示做了所有事情,但是我得到了一个奇怪的错误。
背景:我正在使用Java EE Helios和Tomcat 7.
我在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();
}
}
的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>
答案 0 :(得分:5)
资源不可用,因为:
使用@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>
您需要注意的另一件事是您必须实现与您希望servlet提供的HTTP方法(get,post等)相对应的doXXX方法。
要通过表单请求此servlet,您需要将action属性设置为:
<form action="/path/to/your/servlet/myName">
<!-- form fields here... -->
</form>
要完成,您可以使用表单中的method属性来选择浏览器用于请求Servlet的HTTP方法。如果您未提供,则默认方法为获取。正如我已经说过的,如果使用get方法,则需要在servlet中实现doGet方法。