Postgresql 独立java类无法从tomcat7连接到数据库

Postgresql 独立java类无法从tomcat7连接到数据库,postgresql,jsp,ubuntu,tomcat7,remote-access,Postgresql,Jsp,Ubuntu,Tomcat7,Remote Access,我有一个正在移植到web界面的程序。当我独立运行时,它可以很好地连接到我的postgres数据库,但是当我在Tomcat中安装jar,然后将类导入到我的JSP时,连接尝试只是旋转 我正在跑步。为了允许连接,我是否必须向tomcat添加一些东西,或者我是否必须修改我的数据库管理器以通过tomcat进行连接 我找到了这个页面,但它是指向从JSP连接的。我的所有连接都是在JAR文件中的类中完成的。我不需要从JSP查询,我已经编写了DAO和DTO来实现这一点 我修改了连接器类以从连接池获取连接。这是我

我有一个正在移植到web界面的程序。当我独立运行时,它可以很好地连接到我的postgres数据库,但是当我在Tomcat中安装jar,然后将类导入到我的JSP时,连接尝试只是旋转

我正在跑步。为了允许连接,我是否必须向tomcat添加一些东西,或者我是否必须修改我的数据库管理器以通过tomcat进行连接

我找到了这个页面,但它是指向从JSP连接的。我的所有连接都是在JAR文件中的类中完成的。我不需要从JSP查询,我已经编写了DAO和DTO来实现这一点

我修改了连接器类以从连接池获取连接。这是我的连接管理器(是的,我知道我的错误处理需要改进):

这是我的WEB-INF/WEB.xml(更改名称以保护罪犯):

另一个有趣的事实是,我用Ubuntu在联想ThinkServer上运行这个。我有verizon internet,因此为了使应用程序对公众可见,我为服务器创建了一个静态IP地址,然后进入verizon路由器管理器并打开一个端口转发,以便在端口80上进入verizon池连接的请求将转发到服务器。。但浏览器中的url显示的是verizon url


我已将静态IP和verizon IPV6地址添加到postgres配置文件中,并重新启动了数据库,但没有任何帮助。

我无法将此作为评论发布,因此我将写下我认为您应该做的事情

虽然您可以在JSP文件中编写所有内容,但它很混乱,您可以通过创建一个servlet来帮助自己

public class Your_servlet_class extends HttpServlet {


 public Connection getConnection() throws SQLException {

con = datasource.getConnection();
return con;
}

 //overriden 
 public void doGet(HttpServletRequest request, HttpServletResponse 
        response) throws IOException, ServletException  {   
 //logic for http get requests

  Connection conn = getConnection();

  //now get some objects from the database (e.g in a List) and set a request   attribute
 request.setAttribute("someAttrName", list);//e.g. list of strings
  //someAttrName can now be used in your jsp page
  getServletContext().getRequestDispatcher("/SomePage.jsp").forward(request, response); 
}
 //overriden 
 public void doPost(HttpServletRequest request, HttpServletResponse 
        response) throws IOException, ServletException  {   
 //logic for http post requests

  Connection conn = getConnection();
  //now change some objects in the database and return SomePage.jsp to the user

 getServletContext().getRequestDispatcher("/SomePage.jsp").forward(request, response);  
}
}

所以,问题是由我正在使用的Verizon路由器引起的。我使用Verizon配置工具为路由器设置端口转发。。问题是我没有通过路由器发送数据库请求。。我曾试图转到127.0.0.1,但我将其更改为通过Verizon URL并转发到数据库。。它起作用了


我必须在路由器中添加一个端口转发规则,以允许对数据库端口的请求进入数据库

您应该从servlet或jsp文件创建数据库连接。注意,即使只有jsp文件,也会在内部创建servlet。当然,servlet可以将数据库连接创建委托给您为该作业选择的任何类。但是我应该能够在WEB-INF/lib中的jar中创建连接。。我的意思是,如果这是一个称为web服务的纯角度实例,该怎么办。。您将拥有必须连接到数据库的JAR,对吗?只需创建一个servlet,在那里创建一个连接,并将您的请求发送到您想要的任何JSP。这将使你的发展更容易。如果JNDI连接不工作(应该),请尝试通过DriverManager获取它。Web服务仍然需要一个servlet(在这种情况下ServletContextListener将是入口点)Web服务仍然需要一个servlet(在这种情况下扩展ServletContextListener的类将是入口点)好的,我想这比另外两天的停机时间更有效,试图让新改进的Tomcat工作有什么区别?servlet是从JSP创建的,它并不凌乱。。我喜欢这样。。我认为servlet无法解决这个问题。。没有道理,我一秒钟也不相信需要这样的servlet。。如果是的话,那就太愚蠢了。。10年前我写了数百个JSP,它们都连接到数据库,没有问题。这不是必需的,我已经说过了。不管怎样,你有什么例外吗?=)对不起,我有点沮丧。。是的,我已经能够从catalina.out文件2016年2月12日下午6:10:13 org.apache.tomcat.jdbc.pool.ConnectionPool中捕获到这一点,我在jsp中有一些连接前后的打印语句。。我没有看到他们,所以我不认为他们之间有任何联系。。连接放弃异常在catalina.out文件中抛出了好几次,然后jsp最终超出了我刚才想到的次数。。我正在通过verizon连接从我家运行这个web服务器。访问该应用程序的URL是verizon拥有的一个长而复杂的池地址。我在web服务器上创建了一个静态ip,然后做了一个端口转发,这样对池的请求就会转发到web服务器。我想我需要将静态ip和verizon url都放在pga conf文件中。。但那没用。好吧,这真的很奇怪。我添加了一个端口转发规则。。不得不将数据库的url更改为verizon url,我立即发现了异常。。这比仅仅旋转要好得多。我不得不在postgres conf文件中添加条目,并尝试了几次才将该集合设置正确。。然后砰。。我回到了废弃的连接和旋转。如果你仍然有这个问题,我建议你在一个新的线程中发布它,因为这是一个不同的问题。希望对你有用。我确实在另一个论坛上开始了一个新的帖子。真不敢在这里发帖。。每个人都会对你提出的任何问题投反对票,或者没有人回答。。看起来stackoverflow是动态的是的,你只需要讨厌它的这一方面(有时它会非常无益)
    <web-app 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"
    version="2.4">
     <description>My Cool App</description>
    <resource-ref>
       <description>Cool Data Source</description>
       <res-ref-name>jdbc/postgres</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
       </resource-ref>
 </web-app>
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->

    <Manager pathname="" />


    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

<Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://127.0.0.1:5432/cooldb"
          username="cooluser" password="coolerpass" maxActive="20" maxIdle="10"
maxWait="-1"/>
<ResourceLink global="jdbc/postgres" name="jdbc/postgres" type="javax.sql.DataSource"/>


</Context>
GenerateByFrequencyAndUnique gen = new GenerateByFrequencyAndUnique();
ArrayList<String> coolList = gen.generateMyListOfCoolStuff();
WARNING: Connection has been abandoned PooledConnection[org.postgresql.jdbc.PgConnection@15f9c366]:java.lang.Exception
at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1072)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:789)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:628)
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:187)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127)
at org.apache.jsp.generateSets_jsp._jspService(generateSets_jsp.java:139)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
public class Your_servlet_class extends HttpServlet {


 public Connection getConnection() throws SQLException {

con = datasource.getConnection();
return con;
}

 //overriden 
 public void doGet(HttpServletRequest request, HttpServletResponse 
        response) throws IOException, ServletException  {   
 //logic for http get requests

  Connection conn = getConnection();

  //now get some objects from the database (e.g in a List) and set a request   attribute
 request.setAttribute("someAttrName", list);//e.g. list of strings
  //someAttrName can now be used in your jsp page
  getServletContext().getRequestDispatcher("/SomePage.jsp").forward(request, response); 
}
 //overriden 
 public void doPost(HttpServletRequest request, HttpServletResponse 
        response) throws IOException, ServletException  {   
 //logic for http post requests

  Connection conn = getConnection();
  //now change some objects in the database and return SomePage.jsp to the user

 getServletContext().getRequestDispatcher("/SomePage.jsp").forward(request, response);  
}
}