【问题标题】:How to set localhost to an ip-adress in Tomcat?如何将 localhost 设置为 Tomcat 中的 IP 地址?
【发布时间】:2021-06-23 10:29:49
【问题描述】:

我的公司有一个项目在 jsf/primefaces 中运行。

在 context.xml 中,我希望标签保持原样,这意味着属性 url="jdbc:postgresql://localhost:5432/some_name" 保持为 localhost。

如何配置 tomcat 以将 localhost 重定向到远程 postgresql db 的真实 IP,例如 10.2.32.32?

当我将 localhost 更改为 10.2.32.32 时,我可以毫无问题地运行应用程序并访问数据库。

我想知道是否有可能在 eclipse 中运行的 tomcat9 服务器中告诉 localhost 必须重定向到 10.2.32.32 ?

提前致谢

编辑 我已经尝试将 META-INF/context.xml 的所有 Resource 标记放在服务器的 Context 标记中,但我有这个例外: java.sql.SQLException:无法为我的 bean 之一创建 PoolableConnectionFactory

java.sql.SQLException: Cannot create PoolableConnectionFactory (Connexion refusée. Vérifiez que le nom de machine et le port sont corrects et que postmaster accepte les connexions TCP/IP.)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:655)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:533)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:733)
    at fr.lto.spad.legi.dao.CodeDAO.getProduit(CodeDAO.java:281)
    at fr.lto.spad.legi.bean.LoginBean.login(LoginBean.java:144)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.postgresql.util.PSQLException: Connexion refusée. Vérifiez que le nom de machine et le port sont corrects et que postmaster accepte les connexions TCP/IP.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:215)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
    at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:410)
    at org.postgresql.Driver.connect(Driver.java:280)
    at org.apache.tomcat.dbcp.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52)
    at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:370)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:102)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:651)
    ... 42 more
Caused by: java.net.ConnectException: Connexion refusée (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at org.postgresql.core.PGStream.<init>(PGStream.java:61)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:109)
    ... 54 more

【问题讨论】:

  • 哪个context.xml 文件包含URL? META-INF/context.xml 被 Eclipse 启动应用程序的方式忽略,而 $CATALINA_BASE/conf/context.xml 特定于 Eclipse 配置的服务器实例。
  • 是 webapps/META-INF/ 中的项目 context.xml 包含 url 只有在这里设置了 url 也许我可以更改 eclipse 工作区 tomcat 服务器的 server.xml 中的一些行?为了进行测试,我将一些 ResourceLink 链接到我的本地目录而不是服务器目录,这没关系。我只是不知道上下文资源区怎么办
  • 请添加javax.sql.Exception的完整堆栈跟踪。
  • "Connexion refusée.Vérifiez que le nom de machine et le port sont Corrects et que postmaster accepte les connexions TCP/IP。":你是否尝试连接到@987654326 @ 与另一个 Postgres 客户端?
  • 不,但是当我将 META-INF/context.xml 中资源标签中的 url 设置为 10.2.32.32 时,它可以工作

标签: tomcat localhost


【解决方案1】:

也许您可以更改 /etc/hosts 文件并将所有 localhost 映射替换为 10.2.32.32

【讨论】:

  • 我试过了,eclipse里的tomcat根本跑不起来
【解决方案2】:

糟糕的解决方案

您可以修改您的 hosts 文件来执行此操作,但我建议不要这样做。

地点如下

  • UNIX => /etc/hosts 文件
  • Windows => C:\Windows\System32\drivers\etc\hosts

您只需修改此行并设置您想要的 IP 地址,而不是 127.0.0.1

127.0.0.1   localhost

很好的解决方案

如果你不想修改你的文件,因为它不应该被提交,Git 有一个很好的解决方案。只需将您的文件修改为您需要的文件,然后告诉 git 在扫描更改时忽略该特定文件

这是告诉 git 忽略对已提交文件的更改的方法(这与 .gitignore 不同,它只是忽略新文件)

git update-index --assume-unchanged <YOUR FILE PATH>

如果您想撤消此操作并恢复更改跟踪,只需使用此操作即可

git update-index --no-assume-unchanged <YOUR FILE PATH>

【讨论】:

  • 是的,我正在考虑这个问题,但是我必须在这个 context.xml 中添加一个新的 ResourceLink 所以当然,我可以使用 localhost url 提交上下文,然后放回 ip 地址来实现它在我的本地电脑上运行。但我想知道是否有某种方法可以将 localhost 设置为专用 ip,并且仅适用于该项目的 tomcat
【解决方案3】:

META-INF/context.xml 文件仅在以下情况下使用:

  1. 您将应用程序部署为$CATALINA_BASE/webapps 中的WAR 存档,
  2. 您将应用程序部署为$CATALINA_BASE/webapps 中的目录。

Eclipse 在server.xml 文件(您在Servers 项目中找到的那个)中直接 添加应用程序描述符。您可以将META-INF/context.xml的内容添加到Eclipse创建的&lt;Context&gt;标签中并修改URL。

【讨论】:

  • 我已经尝试将 META-INF/context.xml 的所有 Resource 标签放在服务器的 Context 标签中,但是我有这个异常:java.sql.SQLException: Cannot create PoolableConnectionFactory
  • 您是否为数据库使用了正确的 URL 和凭据?错误消息(或者更确切地说是异常的主要原因)应该告诉您出了什么问题。
  • 是的 url 和凭据是正确的,因为如果我在 META-INF/context.xml 中测试 url 项目运行良好
猜你喜欢
  • 2016-01-08
  • 1970-01-01
  • 2014-02-13
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
相关资源
最近更新 更多