【问题标题】:Apache Tomcat 7 - The requested resource is not available [duplicate]Apache Tomcat 7 - 请求的资源不可用[重复]
【发布时间】:2015-03-09 16:00:16
【问题描述】:

尝试运行 servlet 时,我的浏览器出现错误。它说

请求的资源不可用。

和

“HTTP 状态 404-”。控制台不打印任何错误,而是一个 警告:“ [SetPropertiesRule]{Server/Service/Engine/Host/Context} 将属性 'source' 设置为 'org.eclipse.jst.jee.server:CDM' 没有 找到匹配的属性。”

感觉我已经尽一切努力让它工作,所以我愿意接受任何能让我的代码工作的建议。

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>

【问题讨论】:

  • 您在浏览器中加载的 URL 是什么?
  • 仍然删除 中的 ;(分号)
  • 删除了它,它并没有改善我的错误
  • 你逐行调试了吗?它会一直运行到最后吗?如果不是在哪一行中断?

标签: java eclipse tomcat servlets


【解决方案1】:

我认为你需要一个完整的类名而不仅仅是一个包:

<servlet-class>com.cdm.StudentResultRegistered</servlet-class>

编辑:

需要解决的其他问题:

  1. index.html 应该放在 web 文件夹中(WEB-INF 的父级)
  2. 应以http://localhost/index.html 或http://localhost/CDM/index.html 访问,具体取决于Web 上下文的配置方式(请参阅deploy webapp from Eclipse to Tomcat root context)。请注意,url 中不需要 index.html,因为它已在 web.xml 中指定为默认页面
  3. 操作表单 url 应该匹配 servlet 路径 - 而不是 servlet 名称。

【讨论】:

  • 改了,没区别同样的错误:(
  • 您是否在单击提交时收到错误消息?您的表单操作应匹配 url /herpDerp - 而不是 servlet 名称
  • 由于“请求的资源不可用。”-错误,我没有看到我的表单。 IE。尝试从头开始运行 servlet 时出现错误
  • 我明白了,这条消息是关于无法找到您的 index.html 资源的。我假设您的 tomcat 在端口 80 上运行。您需要将 index.html 放在 web 目录(WEB-INF 的父级)中。然后尝试localhost/CDM/index.html。另外,如果这不起作用,请尝试localhost/index.html
  • 您,先生或女士,刚刚救了我的理智!谢谢:D
【解决方案2】:

刚刚看到您的评论说您浏览器中的网址是

localhost/CDM/WEB-INF/index.html

WEB-INF 是一个隐藏目录 - Tomcat(或任何其他 Servlet 容器)永远不会提供该目录中的内容,它应该包含配置、类和 jar。

您的 index.html 文件应位于应用程序根目录(在 CDM 目录中),您的 URL 应为

localhost/CDM/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多