Apache Tomcat 7 - 请求的资源不可用
Apache Tomcat 7 - The requested resource is not available
尝试 运行 servlet 时我的浏览器出现错误。它说
The requested resource is not available.
和
"HTTP Status 404-". The console doesn't print any errors but one
warning: " [SetPropertiesRule]{Server/Service/Engine/Host/Context}
Setting property 'source' to 'org.eclipse.jst.jee.server:CDM' did not
find a matching property."
感觉我已经尽了一切努力让它工作,所以我愿意接受任何能让我的代码工作的建议。
StudentResultRegistered.java
package com.cdm;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet(name="studentResultRegistered",urlPatterns={"/herpDerp"})
public class StudentResultRegistered extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String s=request.getParameter("studentID");
String k=request.getParameter("kursKod");
String t=request.getParameter("termin");
String p=request.getParameter("provNr");
String b=request.getParameter("betyg");
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/school_server", "testuser", "testuser");
String sql = "INSERT INTO regStudentResult (studentID, kursKod, termin, provNr, betyg)" +
"VALUES (?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,s);
ps.setString(2,k);
ps.setString(3,t);
ps.setString(4,p);
ps.setString(5,b);
int i=ps.executeUpdate();
if(i>0)
out.print("success");
}catch (Exception e2) {System.out.println(e2);}
out.close();
}
}//studentResultRegistered
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Course Data Management</title>
</head>
<body>
<h1>Registrera Resultat</h1>
<FORM ACTION="/studentResultRegistered" method="get">
StudentID:
<INPUT TYPE="TEXT" NAME="studentID" VALUE=""><BR>
Kurskod:
<INPUT TYPE="TEXT" NAME="kursKod" VALUE=""><BR>
Termin:
<INPUT TYPE="TEXT" NAME="termin" VALUE=""><BR>
ProvNr:
<INPUT TYPE="TEXT" NAME="provNr" VALUE=""><BR>
Betyg:
<INPUT TYPE="TEXT" NAME="betyg" VALUE=""><BR>
<INPUT TYPE="SUBMIT" VALUE="Registrera Resultat">
</FORM>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>CDM</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>studentResultRegistered</servlet-name>
<servlet-class>com.cdm;</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentResultRegistered</servlet-name>
<url-pattern>/herpDerp</url-pattern>
</servlet-mapping>
</web-app>
我认为你需要一个完整的 class 名称,而不仅仅是一个包:
<servlet-class>com.cdm.StudentResultRegistered</servlet-class>
编辑:
需要解决的其他问题:
- index.html 应放在 web 文件夹中(WEB-INF 的父文件夹)
- 应作为
http://localhost/index.html
或 http://localhost/CDM/index.html
访问,具体取决于 Web 上下文的配置方式(请参阅 deploy webapp from Eclipse to Tomcat root context)。请注意 url 中不需要 index.html,因为它已在 web.xml 中指定为默认页面
- 操作表单 url 应该匹配 servlet 路径 - 而不是 servlet 名称。
刚刚看到您的评论说您浏览器中的 URL 是
localhost/CDM/WEB-INF/index.html
WEB-INF 是一个隐藏目录 - Tomcat(或任何其他 Servlet 容器)永远不会提供该目录中的内容,它应该包含配置、类 和 jars。
您的 index.html 文件应该在应用程序根目录(在 CDM 目录中)并且您的 URL 应该是
localhost/CDM/index.html
尝试 运行 servlet 时我的浏览器出现错误。它说
The requested resource is not available.
和
"HTTP Status 404-". The console doesn't print any errors but one warning: " [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:CDM' did not find a matching property."
感觉我已经尽了一切努力让它工作,所以我愿意接受任何能让我的代码工作的建议。
StudentResultRegistered.java
package com.cdm;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet(name="studentResultRegistered",urlPatterns={"/herpDerp"})
public class StudentResultRegistered extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String s=request.getParameter("studentID");
String k=request.getParameter("kursKod");
String t=request.getParameter("termin");
String p=request.getParameter("provNr");
String b=request.getParameter("betyg");
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/school_server", "testuser", "testuser");
String sql = "INSERT INTO regStudentResult (studentID, kursKod, termin, provNr, betyg)" +
"VALUES (?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,s);
ps.setString(2,k);
ps.setString(3,t);
ps.setString(4,p);
ps.setString(5,b);
int i=ps.executeUpdate();
if(i>0)
out.print("success");
}catch (Exception e2) {System.out.println(e2);}
out.close();
}
}//studentResultRegistered
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Course Data Management</title>
</head>
<body>
<h1>Registrera Resultat</h1>
<FORM ACTION="/studentResultRegistered" method="get">
StudentID:
<INPUT TYPE="TEXT" NAME="studentID" VALUE=""><BR>
Kurskod:
<INPUT TYPE="TEXT" NAME="kursKod" VALUE=""><BR>
Termin:
<INPUT TYPE="TEXT" NAME="termin" VALUE=""><BR>
ProvNr:
<INPUT TYPE="TEXT" NAME="provNr" VALUE=""><BR>
Betyg:
<INPUT TYPE="TEXT" NAME="betyg" VALUE=""><BR>
<INPUT TYPE="SUBMIT" VALUE="Registrera Resultat">
</FORM>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>CDM</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>studentResultRegistered</servlet-name>
<servlet-class>com.cdm;</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentResultRegistered</servlet-name>
<url-pattern>/herpDerp</url-pattern>
</servlet-mapping>
</web-app>
我认为你需要一个完整的 class 名称,而不仅仅是一个包:
<servlet-class>com.cdm.StudentResultRegistered</servlet-class>
编辑:
需要解决的其他问题:
- index.html 应放在 web 文件夹中(WEB-INF 的父文件夹)
- 应作为
http://localhost/index.html
或http://localhost/CDM/index.html
访问,具体取决于 Web 上下文的配置方式(请参阅 deploy webapp from Eclipse to Tomcat root context)。请注意 url 中不需要 index.html,因为它已在 web.xml 中指定为默认页面
- 操作表单 url 应该匹配 servlet 路径 - 而不是 servlet 名称。
刚刚看到您的评论说您浏览器中的 URL 是
localhost/CDM/WEB-INF/index.html
WEB-INF 是一个隐藏目录 - Tomcat(或任何其他 Servlet 容器)永远不会提供该目录中的内容,它应该包含配置、类 和 jars。
您的 index.html 文件应该在应用程序根目录(在 CDM 目录中)并且您的 URL 应该是
localhost/CDM/index.html