Postgresql 独立java类无法从tomcat7连接到数据库
我有一个正在移植到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 urlPostgresql 独立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来实现这一点 我修改了连接器类以从连接池获取连接。这是我
我已将静态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);
}
}