java - tomcat 上部署的 Web 服务无法访问远程 SQL Server

标签 java sql-server web-services tomcat8

我在 Centos 7 操作系统上安装了一个 tomcat 服务器,并且在上面部署了一个 Web 服务。

Web 服务必须连接到位于 Windows 服务器中的 SQL Server。 Centos 可以从 Windows 服务器 ping 通。 telnet 返回已连接。但是,如果我调用 Web 服务对数据库执行某些操作(创建、更新、删除),它将返回一个内部错误作为响应。 但是当我将我的Web服务项目部署在安装在Windows操作系统上的Tomcat上时,它没有问题。我不知道我该怎么办。

public class JDBCConnection {
private static final String DB_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://192.168.X.X:1433;databaseName=DB_Name";
private static final String DB_USERNAME = "username";
private static final String DB_PASSWORD = "password";

我还尝试过 SQL Server 的外部 IP 地址:

public class JDBCConnection {
private static final String DB_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://77.238.X.X:1433;databaseName=DB_Name";
private static final String DB_USERNAME = "username";
private static final String DB_PASSWORD = "password";

错误:

<body>
    <h1>HTTP Status 500 – Internal Server Error</h1>
    <hr class="line" />
    <p><b>Type</b> Exception Report</p>
    <p><b>Message</b> java.lang.NullPointerException</p>
    <p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.
    </p>
    <p><b>Exception</b></p>
    <pre>javax.servlet.ServletException: java.lang.NullPointerException
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
    <p><b>Root Cause</b></p>
    <pre>java.lang.NullPointerException
    com.comment.doa.siteService.getAllCommentsService(siteService.java:106)
    com.comment.service.siteResource.getAllComments(siteResource.java:51)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)


    org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
        org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:243)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
    org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
    org.glassfish.jersey.internal.Errors.process(Errors.java:316)
    org.glassfish.jersey.internal.Errors.process(Errors.java:298)
    org.glassfish.jersey.internal.Errors.process(Errors.java:268)
    org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
    org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
    org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
    <p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p>
    <hr class="line" />
    <h3>Apache Tomcat/8.5.54</h3>
</body>

</html>

最佳答案

问题是tomcat lib目录中缺少一个jar文件:sqljdbc42.jar

关于java - tomcat 上部署的 Web 服务无法访问远程 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61738198/

相关文章:

sql - T-SQL 覆盖特价并生成最终日期范围

c# - 从 C# 在 SQL Server 中并行化大量插入(以获得更好的时间性能)

java - 如何使用 CDATA 创建 SOAP 请求

java - 我怎样才能解决这个等于原始类型(int)

java - 每个线程一个 Random 实例,由原始 Random 实例播种以获得可重复性

sql - 全部删除/批量插入

java - 与客户端连接时如何浏览服务器机器的文件系统(java)

java - 如何将用户主体从 HttpServletRequest 传播到 EJBContext?

java - curl 命令行与 HttpURLConnection API 服务调用响应时间差异

java - 解析 XML 文件并保留有关行号的信息