2013-11-28 395 views
-1

Eclipse上的Tomcat 7 Java EE显示HTTP状态404,并且请求的资源不可用。 1)我不知道我做得不对吗?我已经阅读了大量的文章,并试图做一些可能的事情,但没有任何改变。在某些情况下,我将我的源代码作为可下载的文本文件返回。Eclipse Java EE和Tomcat 7:错误404,请求的资源不可用

这是我下面的Servlet程序:

package dbservlet; 

//all imports here 

public class TennisdbaseServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
public TennisdbaseServlet() {} 

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

    Context envContext = null; 
    try { 

     Context envContext = new InitialContext(); 
     DataSource ds = (DataSource)envContext.lookup("java:/comp/env/jdbc/postgres"); 
     Connection con = ds.getConnection(); 

     Statement stmt = con.createStatement(); 
     String query = "select * from tennis_teams"; 
     ResultSet rs = stmt.executeQuery(query); 

     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     out.print("<center><h1>Tennis Teams Info</h1></center>"); 
     out.print("<html><body><table border=\"1\" cellspacing=10 cellpadding=5>"); 
     out.print("<th>TEAM NUMBER</th>"); 
     out.print("<th>PLAYER NO</th>"); 
     out.print("<th>DIVISION</th>"); 

     while(rs.next()) 
     { 
      out.print("<tr>"); 
      out.print("<td>" + rs.getInt("teamno") + "</td>"); 
      out.print("<td>" + rs.getString("playerno") + "</td>"); 
      out.print("<td>" + rs.getDouble("division") + "</td>"); 
      out.print("</tr>"); 
     } 
     out.print("</table></body></html>"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
    } 

}

而以下是我的/META-INF/Context.xml代码:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- The contents of this file will be loaded for web application --> 

<Context crossContext="true" docBase="TennisdbaseServlet" path="" reloadable="true" > 
    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/postgres" auth="Container" 
     type="javax.sql.DataSource" 
     driverClassName="org.postgresql.Driver" 
     url="jdbc:postgresql://localhost:5432/tennisDB" 
     username="ssssss" 
     password="ssssss" 
     maxActive="20" 
     maxIdle="10" 
     maxWait="-1"/> 
</Context> 

而且也低于是我的/ Web_INF/web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
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"> 

<resource-ref> 
<description>postgreSQL DataSource for Tennis Database Application</description> 
<res-ref-name>jdbc/postgres</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 

<display-name>TennisDatabasePool</display-name> 

<servlet> 
<servlet-name>TennisdbaseServlet</servlet-name> 
<servlet-class>dbservlet.TennisdbaseServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>TennisdbaseServlet</servlet-name> 
<url-pattern>/TennisdbaseServlet.do</url-pattern> 
</servlet-mapping> 
</web-app> 

控制台输出为:

Nov 28, 2013 1:42:29 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java \jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static\;C:\Program Files (x86)\Java\jre6\bin;C:\Program Files (x86)\Windows Live\Shared;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;PATH=C:\Program Files\Java\jdk1.7.0_45\bin;C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static\;C:\Program Files (x86)\Java\jre6\bin;C:\Program Files (x86)\Windows Live\Shared;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;PATH=C:\Program Files\Java\jdk1.7.0_45\bin;%PATH%;C:\Program Files\System Center Operations Manager 2007\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\System Center Operations Manager 2007\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Graphviz2.30\bin;C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.4\;C:\Program Files\Java\jdk1.7.0_45\bin;C:\Program Files\Java\jre7\bin;. 
Nov 28, 2013 1:42:33 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8010"] 
Nov 28, 2013 1:42:33 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
Nov 28, 2013 1:42:33 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 5546 ms 
Nov 28, 2013 1:42:33 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Nov 28, 2013 1:42:33 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47 
Nov 28, 2013 1:42:39 PM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor C:\Users\Windows\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\conf\Catalina\localhost\TennisDatabasePool.xml 
Nov 28, 2013 1:42:40 PM org.apache.catalina.startup.SetContextPropertiesRule begin 
WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TennisDatabasePool' did not find a matching property. 
Nov 28, 2013 1:42:43 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8010"] 
Nov 28, 2013 1:42:43 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Nov 28, 2013 1:42:43 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 10091 ms 

您的帮助非常感谢。

+1

你能提一下你试图命中的URL吗,这会给你这个错误吗? – Anirudh

+0

这是我打的网址:http:// localhost:8010/TennisDatabasePool/WEB-INF/classes/dbservlet/TennisdbaseServlet.java – user2979063

+0

你可能会考虑缩短你的问题来包含需要的东西。 – Zyerah

回答

1

由于您还没有提供您正在使用的URL,我猜测您可能会错过URL中的上下文根。理想情况下,你应该使用类似这样的URL访问你的servlet:

http://<server>:<port>/<context_root>/TennisdbaseServlet.do 

其中context_root通常是你的应用程序(WAR文件)的名称。例如,如果您的WAR文件MyApplication.war,那么你必须使用以下网址:

http://<server>:<port>/MyApplication/TennisdbaseServlet.do 

但是,你必须覆盖Tomcat上使用这个context.xml文件的选项。例如,在下面的context.xml标签<Context>将设置context_root到SomeApp

<Context crossContext="true" docBase="SomeApp" path="" reloadable="true" > 

然后,访问相同的应用程序,你可以使用网址:

http://<server>:<port>/SomeApp/TennisdbaseServlet.do 
+0

这是我的网址:http:// localhost:8010/TennisDatabasePool/WEB-INF/classes/dbservlet/TennisdbaseServlet.java – user2979063

+0

这就是404错误的画面:http:// localhost:8010/TennisDatabasePool/WEB -INF/classes/dbservlet/TennisdbaseServlet.java HTTP状态404 - 类型状态报告 消息 说明请求的资源不可用。 Apache Tomcat/7.0.47我刚才编辑了上面建议的根Context,没有任何改变。任何更多的帮助。 – user2979063

+0

Plz看看我的TennisdbaseServlet.java和Context.xml代码,标记显示如下:1)没有可以抛出类型ServletException的异常,...,2)方法getWriter()未定义为类型HttpServletResponse ,3)对于类型HttpServletResponse,未定义方法setContentType(“text/html”); 4)未使用TennisdbaseServlet.serialVersionUID字段的值; 5)文档中没有引用语法约束(DTD或XML)模式(即3个错误和2个警告)。这些是否也会导致HTTP 404错误? – user2979063

0

当与j2ee视图提供作为JSP为什么你只用servlet来做它。试着用JSP来做。我认为你的servlet访问模式不正确,应该是这样的http://localhost:port/app-name/dbservlet。你还没有定义任何使用url-pattern/dbservlet的servlet。下面是一个很好的教程,你可以从头开始。
http://www.mkyong.com/servlet/a-simple-servlet-example-write-deploy-run/

0

我真的不明白下面的代码怎么会那么编译:

Context envContext = null; 
    try { 

     Context envContext = new InitialContext(); 

首先,你应该始终摆脱编译时错误,然后尝试调用servlet:以下是一个编译器无错误代码:

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.activation.DataSource; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.sun.corba.se.pept.transport.Connection; 


public class TennisdbaseServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
public TennisdbaseServlet() {} 

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

    Context envContext = null; 
    try { 

     envContext = new InitialContext(); 
     DataSource ds = (DataSource) envContext.lookup("java:/comp/env/jdbc/postgres"); 
     Connection con = (Connection) ((Statement) ds).getConnection(); 

     Statement stmt = ((java.sql.Connection) con).createStatement(); 
     String query = "select * from tennis_teams"; 
     ResultSet rs = stmt.executeQuery(query); 

     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     out.print("<center><h1>Tennis Teams Info</h1></center>"); 
     out.print("<html><body><table border=\"1\" cellspacing=10 cellpadding=5>"); 
     out.print("<th>TEAM NUMBER</th>"); 
     out.print("<th>PLAYER NO</th>"); 
     out.print("<th>DIVISION</th>"); 

     while(rs.next()) 
     { 
      out.print("<tr>"); 
      out.print("<td>" + rs.getInt("teamno") + "</td>"); 
      out.print("<td>" + rs.getString("playerno") + "</td>"); 
      out.print("<td>" + rs.getDouble("division") + "</td>"); 
      out.print("</tr>"); 
     } 
     out.print("</table></body></html>"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

试着用这个先运行它,然后调试这个错误,如果有的话!

+0

运行上面的代码和URL是:http:// localhost:8010/TennisDatabasePooling/TennisdbaseServlet.do;但提供HTTP状态500 - org.apache.tomcat.dbcp.dbcp.BasicDataSource不能转换为javax.activation.DataSource 类型异常报告 消息org.apache.tomcat.dbcp.dbcp.BasicDataSource不能转换为javax .activation.DataSource description服务器遇到内部错误,导致无法完成此请求。 异常 java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp.BasicDataSource无法转换为javax.activation.DataSource ...有些帮助。 – user2979063

相关问题