{"id":41504,"date":"2023-03-29T21:23:42","date_gmt":"2023-03-14T19:02:48","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/"},"modified":"2024-04-29T21:03:58","modified_gmt":"2024-04-29T13:03:58","slug":"tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/","title":{"rendered":"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c"},"content":{"rendered":"<p>\u5b66\u4e60\u7528\uff08\u5907\u5fd8\uff09<\/p>\n<h2>\u7684\u76ee\u7684\u662f\uff1f<\/h2>\n<p>\u4f7f\u7528\u5e94\u7528\u670d\u52a1\u5668\uff08Tomcat\uff09\u901a\u8fc7\u6570\u636e\u6e90\u8fde\u63a5\u5230PostgreSQL\u3002<br \/>\n\u4f7f\u7528JSP\u4f7f\u7528\u6570\u636e\u6e90\u6765\u663e\u793aPostgreSQL\u7684\u8868\u6570\u636e\u3002<\/p>\n<h2>\u73af\u5883 &#8211;<\/h2>\n<p>Note: The provided Chinese characters already represent the phrase &#8220;\u73af\u5883,&#8221; which translates to &#8220;environment&#8221; in English.<\/p>\n<p>\u865a\u62df\u673a\uff1aVirtualBox6.1<br \/>\n\u64cd\u4f5c\u7cfb\u7edf\uff1aRed Hat Enterprise Linux 8.5 \u7248\u672c\uff08Ootpa\uff09<br \/>\nJava\uff1aopenjdk \u7248\u672c &#8220;17.0.3&#8221; 2022-04-19 LTS<br \/>\nTomcat\uff1aapache-tomcat-9.0.62<br \/>\nPosgreSQL\uff1aPostgreSQL 13.6<\/p>\n<h2>\u524d\u63d0\u6761\u4ef6\u4ec5\u9700\u8981\u4e00\u79cd\u9009\u62e9<\/h2>\n<p>\u30fb\u786e\u4fdd\u5df2\u51c6\u5907\u597d\u8fde\u63a5\u76ee\u6807\u6570\u636e\u5e93\uff08PostgreSQL\uff09\u3002<br \/>\n\u30fb\u80fd\u591f\u4ece\u5e94\u7528\u670d\u52a1\u5668\uff08Tomcat\uff09\u8fde\u63a5\u5230\u6570\u636e\u5e93\u3002<br \/>\n\u2192\u5efa\u7acb PostgreSQL13.6\u3002<\/p>\n<h2>1. \u5b89\u88c5JAVA<\/h2>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\nmkdir -pm 777 \/tmp\/Installer\/java\/\r\ndnf install --downloadonly java-17-openjdk-devel --downloaddir=\/tmp\/Installer\/java\/\r\n\r\ncd \/tmp\/Installer\/java\/;pwd\r\ndnf localinstall .\/*\r\n\r\n&gt;\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f:\r\n&gt;  java-17-openjdk-1:17.0.3.0.6-2.el8_5.x86_64                     java-17-openjdk-devel-1:17.0.3.0.6-2.el8_5.x86_64\r\n&gt;  java-17-openjdk-headless-1:17.0.3.0.6-2.el8_5.x86_64            ttmkfdir-3.0.9-54.el8.x86_64\r\n&gt;  xorg-x11-fonts-Type1-7.5-19.el8.noarch\r\n&gt;\r\n&gt;\u5b8c\u4e86\u3057\u307e\u3057\u305f!\r\n\r\n<\/code><\/pre>\n<p>\u30fbJava\u7684\u5347\u7ea7\uff08\u4ece\u7248\u672c8\u5347\u7ea7\u5230\u7248\u672c17\uff09<\/p>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\nalternatives --config java\r\n\r\n&gt;  \u9078\u629e       \u30b3\u30de\u30f3\u30c9\r\n&gt;-----------------------------------------------\r\n&gt;*+ 1           java-1.8.0-openjdk.x86_64 (\/usr\/lib\/jvm\/java-1.8.0-openjdk-1.8.0.302.b08-3.el8.x86_64\/jre\/bin\/java)\r\n&gt;   2           java-17-openjdk.x86_64 (\/usr\/lib\/jvm\/java-17-openjdk-17.0.3.0.6-2.el8_5.x86_64\/bin\/java)\r\n&gt;\r\n&gt;Enter \u3092\u62bc\u3057\u3066\u73fe\u5728\u306e\u9078\u629e [+] \u3092\u4fdd\u6301\u3059\u308b\u304b\u3001\u9078\u629e\u756a\u53f7\u3092\u5165\u529b\u3057\u307e\u3059:2\r\n\r\n[root@tomcat ]#\r\njava -version\r\n&gt;openjdk version \"17.0.3\" 2022-04-19 LTS\r\n&gt;OpenJDK Runtime Environment 21.9 (build 17.0.3+6-LTS)\r\n&gt;OpenJDK 64-Bit Server VM 21.9 (build 17.0.3+6-LTS, mixed mode, sharing)\r\n<\/code><\/pre>\n<h2>2. \u5b89\u88c5Tomcat<\/h2>\n<pre class=\"post-pre\"><code>&gt;\u30e6\u30fc\u30b6\u4f5c\u6210\r\n[root@tomcat ]#\r\nuseradd -m tomcat\r\n\r\n&gt;\u8cc7\u6750\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\r\n[root@tomcat ]#\r\nmkdir -pm 777 \/tmp\/Installer\/tomcat\r\ncd \/tmp\/Installer\/tomcat\/;pwd\r\nwget https:\/\/dlcdn.apache.org\/tomcat\/tomcat-9\/v9.0.62\/bin\/apache-tomcat-9.0.62.tar.gz\r\n\r\nll -h \/tmp\/Installer\/tomcat\/\r\n\r\n&gt;\u89e3\u51cd\r\n[root@tomcat ]#\r\ntar -xvf apache-tomcat-9.0.62.tar.gz -C \/opt\r\nchown -R tomcat: \/opt\/apache-tomcat-9.0.62\r\n\r\n#\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u4f5c\u6210\r\nln -sv \/opt\/{apache-tomcat-9.0.62,tomcat}\r\n<\/code><\/pre>\n<p>\u521b\u5efaTomcat\u670d\u52a1<\/p>\n<pre class=\"post-pre\"><code>\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n#\u5909\u6570\u5b9a\u7fa9\r\ncat&lt;&lt;EOF&gt;\/etc\/sysconfig\/tomcat\r\nJAVA_HOME=\"\/usr\/lib\/jvm\/jre\"\r\nCATALINA_HOME=\"\/opt\/tomcat\"\r\nCATALINA_BASE=\"\/opt\/tomcat\"\r\nCATALINA_OPTS=\"-server -Xmx128m -Xms128m -XX:MaxMetaspaceSize=128m\"\r\nEOF\r\n\r\n#\u78ba\u8a8d\r\ncat \/etc\/sysconfig\/tomcat\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n#\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\r\ncat&lt;&lt;EOF&gt;\/usr\/lib\/systemd\/system\/tomcat.service\r\n[Unit]\r\nDescription=Apache Tomcat application server.\r\nAfter=network.target\r\n[Service]\r\nType=forking\r\nUser=tomcat\r\nGroup=tomcat\r\nEnvironmentFile=\/etc\/sysconfig\/tomcat\r\nExecStart=\/opt\/tomcat\/bin\/startup.sh\r\nExecStop=\/opt\/tomcat\/bin\/shutdown.sh\r\n[Install]\r\nWantedBy=multi-user.target\r\nEOF\r\n\r\n#\u78ba\u8a8d\r\ncat \/usr\/lib\/systemd\/system\/tomcat.service\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n#\u30b5\u30fc\u30d3\u30b9\u8d77\u52d5\r\nsystemctl daemon-reload\r\nsystemctl enable tomcat.service\r\nsystemctl start tomcat.service\r\n\r\nsystemctl status tomcat.service\r\n\r\n&gt;\u25cf tomcat.service - Apache Tomcat application server.\r\n&gt;   Loaded: loaded (\/usr\/lib\/systemd\/system\/tomcat.service; enabled; vendor preset: disabled)\r\n&gt;   Active: active (running) since Mon 2022-05-02 23:18:34 JST; 11h ago\r\n&gt;  Process: 64206 ExecStop=\/opt\/tomcat\/bin\/shutdown.sh (code=exited, status=0\/SUCCESS)\r\n&gt;  Process: 64231 ExecStart=\/opt\/tomcat\/bin\/startup.sh (code=exited, status=0\/SUCCESS)\r\n&gt; Main PID: 64239 (java)\r\n&gt;    Tasks: 31 (limit: 10474)\r\n&gt;   Memory: 247.2M\r\n&gt;   CGroup: \/system.slice\/tomcat.service\r\n&gt;            64239 \/usr\/lib\/jvm\/jre\/bin\/java -Djava.util.logging.config.file=\/opt\/tomcat\/conf\/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava&gt;\r\n<\/code><\/pre>\n<h2>3. \u914d\u7f6esample.war\u6587\u4ef6<\/h2>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\ncd \/opt\/tomcat\/webapps;pwd\r\n\r\ncurl -O https:\/\/tomcat.apache.org\/tomcat-9.0-doc\/appdev\/sample\/sample.war\r\nchown tomcat: \/opt\/tomcat\/webapps\/sample.war\r\n\r\nll -h \/opt\/tomcat\/webapps\r\n&gt; drwxr-x---.  5 tomcat tomcat   86  5\u6708  2 19:51 sample\r\n&gt; -rw-r--r--.  1 tomcat tomcat 4.5K  5\u6708  2 19:51 sample.war\r\n\r\ngrep 'deploy' \/opt\/tomcat\/logs\/catalina.out\r\n&gt; 02-May-2022 19:51:51.759 \u60c5\u5831 [Catalina-utility-1]org.apache.catalina.startup.HostConfig.deployWAR Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ab\u30a4\u30d6[\/opt\/apache-tomcat-9.0.62\/webapps\/sample.war] \u306e\u914d\u5099\u306f [217] ms \u3067\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d476a37434c4406ca8492\/17-0.png\" alt=\"image.png\" \/><\/div>\n<h3>4. \u914d\u7f6ePostgreSQL\u7684JDBC\u9a71\u52a8<\/h3>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\n#jdbc\u30c9\u30e9\u30a4\u30d0\u30fc\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\r\nmkdir -m 777 \/tmp\/Installer\/postgres\r\ncd \/tmp\/Installer\/postgres\/;pwd\r\ncurl -O https:\/\/jdbc.postgresql.org\/download\/postgresql-42.3.4.jar\r\n\r\nll \/tmp\/Installer\/postgres\/\r\nchown tomcat: \/tmp\/Installer\/postgres\/*\r\n\r\n#lib\u30d5\u30a9\u30eb\u30c0\u306bjdbc\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u79fb\u52d5\r\nmv \/tmp\/Installer\/postgres\/postgresql-42.3.4.jar \/opt\/tomcat\/lib\/\r\nll -h  \/opt\/tomcat\/lib\/ | grep postgresql\r\n&gt; -rw-r--r--. 1 tomcat tomcat 1016K  5\u6708  2 22:03 postgresql-42.3.4.jar\r\n<\/code><\/pre>\n<h2>5. \u6570\u636e\u6e90\u8bbe\u7f6e<\/h2>\n<p>\u30fb\u4e0a\u4e0b\u6587.xml \u5907\u4efd<\/p>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\ncp -p \/opt\/tomcat\/conf\/context.xml{,_\\`date +%Y%m%d\\`}\r\nll -h \/opt\/tomcat\/conf\/context.xml*\r\n<\/code><\/pre>\n<p>\u8bf7\u5bf9context.xml \u8fdb\u884c\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code>[root@tomcat ]#\r\ncat \/opt\/tomcat\/conf\/context.xml\r\nvi \/opt\/tomcat\/conf\/context.xml\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n&lt;Context&gt;\r\n    &lt;!-- Default set of monitored resources. If one of these changes, the    --&gt;\r\n    &lt;!-- web application will be reloaded.                                   --&gt;\r\n    &lt;WatchedResource&gt;WEB-INF\/web.xml&lt;\/WatchedResource&gt;\r\n    &lt;WatchedResource&gt;WEB-INF\/tomcat-web.xml&lt;\/WatchedResource&gt;\r\n    &lt;WatchedResource&gt;${catalina.base}\/conf\/web.xml&lt;\/WatchedResource&gt;\r\n\r\n    &lt;!-- Uncomment this to disable session persistence across Tomcat restarts --&gt;\r\n    &lt;!--\r\n    &lt;Manager pathname=\"\" \/&gt;\r\n    --&gt;\r\n\r\n    &lt;!-- PostgreSQL --&gt;\r\n    &lt;Resource name=\"jdbc\/PostgreSQL\"\r\n      auth=\"Container\"\r\n      type=\"javax.sql.DataSource\"\r\n      factory=\"org.apache.tomcat.jdbc.pool.DataSourceFactory\"\r\n      initialSize=\"2\" maxActive=\"4\" minIdle=\"1\" maxIdle=\"2\"\r\n      username=\"test_user01\" password=\"password\"\r\n      driverClassName=\"org.postgresql.Driver\" url=\"jdbc:postgresql:\/\/&lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432\/testdb\"\r\n      validationQuery=\"SELECT 1\" \/&gt;\r\n&lt;\/Context&gt;\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n<\/code><\/pre>\n<h2>6. \u91cd\u542fTomcat\u670d\u52a1<\/h2>\n<pre class=\"post-pre\"><code>[root@tomcat]# \r\nsystemctl restart tomcat.service\r\nsystemctl status tomcat.service\r\n\r\n&gt;\u25cf tomcat.service - Apache Tomcat application server.\r\n&gt;   Loaded: loaded (\/usr\/lib\/systemd\/system\/tomcat.service; enabled; vendor preset: disabled)\r\n&gt;   Active: active (running) since Mon 2022-05-02 23:18:34 JST; 11h ago\r\n&gt;  Process: 64206 ExecStop=\/opt\/tomcat\/bin\/shutdown.sh (code=exited, status=0\/SUCCESS)\r\n&gt;  Process: 64231 ExecStart=\/opt\/tomcat\/bin\/startup.sh (code=exited, status=0\/SUCCESS)\r\n&gt; Main PID: 64239 (java)\r\n&gt;    Tasks: 31 (limit: 10474)\r\n&gt;   Memory: 247.2M\r\n&gt;   CGroup: \/system.slice\/tomcat.service\r\n&gt;            64239 \/usr\/lib\/jvm\/jre\/bin\/java -Djava.util.logging.config.file=\/opt\/tomcat\/conf\/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava&gt;\r\n<\/code><\/pre>\n<h3>7. \u6570\u636e\u6e90\u8fde\u63a5\u786e\u8ba4<\/h3>\n<pre class=\"post-pre\"><code>[root@tomcat]# \r\nlsof -Pi:5432\r\n&gt; COMMAND    PID   USER   FD   TYPE DEVICE SIZE\/OFF NODE NAME\r\n&gt; java    114747 tomcat   50u  IPv6 797431      0t0  TCP tomcat9:56292-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   52u  IPv6 797441      0t0  TCP tomcat9:56296-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   54u  IPv6 797443      0t0  TCP tomcat9:56300-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   56u  IPv6 797447      0t0  TCP tomcat9:56308-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   58u  IPv6 797445      0t0  TCP tomcat9:56304-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   60u  IPv6 797449      0t0  TCP tomcat9:56312-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n&gt; java    114747 tomcat   62u  IPv6 797451      0t0  TCP tomcat9:56316-&gt; &lt;DB\u30fbIP\u30a2\u30c9\u30ec\u30b9&gt;:5432 (ESTABLISHED)\r\n<\/code><\/pre>\n<h3>8. \u521b\u5efaJSP\u9875\u9762<\/h3>\n<p>\u521b\u5efa\u4e00\u4e2a\u7528\u4e8eJSP\u6d4b\u8bd5\u7684\u6587\u4ef6\u5939<\/p>\n<pre class=\"post-pre\"><code>[root@tomcat]# \r\nmkdir -m 750 \/opt\/tomcat\/webapps\/testjsp\r\nchown tomcat: \/opt\/tomcat\/webapps\/testjsp\r\nll -h \/opt\/tomcat\/webapps\/\r\n\r\n&gt; drwxr-x---.  2 tomcat tomcat   44  5\u6708  3 01:47 testjsp\r\n<\/code><\/pre>\n<p>\u30fb\u521b\u5efaJSP\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code>[root@tomcat]# \r\nvi \/opt\/tomcat\/webapps\/testjsp\/test.jsp\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n    &lt;head&gt;\r\n        &lt;title&gt;test.jsp&lt;\/title&gt;\r\n    &lt;\/head&gt;\r\n    &lt;body&gt;\r\n     &lt;p&gt;&lt;font size=\"7\" color=\"#00ff00\"&gt;JSP\u30c6\u30b9\u30c8\u30da\u30fc\u30b8&lt;\/font&gt;&lt;\/p&gt;\r\n    &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n\r\n&lt;%@page import=\"javax.sql.DataSource\"%&gt;\r\n&lt;%@page import=\"java.sql.Connection\"%&gt;\r\n&lt;%@page import=\"java.sql.*\" %&gt;\r\n&lt;%@page import=\"javax.naming.InitialContext\"%&gt;\r\n&lt;%@page contentType=\"text\/html\" pageEncoding=\"UTF-8\" session=\"false\" %&gt;\r\n&lt;%\r\n        \/\/\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\u3059\u308bjndi\r\n        String jndi = \"java:comp\/env\/jdbc\/PostgreSQL\";\r\n        InitialContext context = null;\r\n        Connection connection = null;\r\n        Statement stmt = null;\r\n\r\n        \/\/\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u53d6\u5f97\u51e6\u7406\r\n        try {\r\n                context = new InitialContext();\r\n                DataSource ds = (DataSource) context.lookup(jndi);\r\n                connection = ds.getConnection();\r\n                String sql = \"SELECT * FROM test_t1 order by dt limit 3000;\";\r\n                PreparedStatement pstmt = connection.prepareStatement(sql);\r\n                ResultSet result = pstmt.executeQuery();\r\n                while ( result.next() ) {\r\n                    \/\/ \u8868\u793a\u306a\u3069\u306e\u51e6\u7406\r\n                    int id = result.getInt(\"id\");\r\n                    String data =result.getString(\"data\");\r\n                    String dt =result.getString(\"dt\");\r\n                    out.println(\"&lt;p&gt;\");\r\n                    out.println(\"id:\" + id + \",data:\" + data + \",time:\"+ dt );\r\n                    out.println(\"&lt;\/p&gt;\");\r\n                 }\r\n        }\r\n        finally {\r\n                if (context != null) {\r\n                        try {\r\n                                context.close();\r\n                        }\r\n                        catch (Exception e) {\r\n                        }\r\n                }\r\n                if (connection != null) {\r\n                        try {\r\n                                connection.close();\r\n                        }\r\n                        catch (Exception e) {\r\n                        }\r\n                }\r\n                }\r\n        }\r\n%&gt;\r\n\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\uff5e\r\n#\u30d5\u30a1\u30a4\u30eb\u306e\u30aa\u30fc\u30ca\u5909\u66f4\r\n[root@tomcat]# \r\nchown tomcat: \/opt\/tomcat\/webapps\/testjsp\/test.jsp\r\nchmod 755 \/opt\/tomcat\/webapps\/testjsp\/test.jsp\r\nll -h \/opt\/tomcat\/webapps\/testjsp\/test.jsp\r\n\r\n&gt; -rwxr-xr-x. 1 tomcat tomcat 2.0K  5\u6708  3 12:02 \/opt\/tomcat\/webapps\/testjsp\/test.jsp\r\n<\/code><\/pre>\n<h3>9. \u8bbf\u95ee\u6d4b\u8bd5\u9875\u9762<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d476a37434c4406ca8492\/35-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u8bf7\u63d0\u4f9b\u76f8\u5173\u94fe\u63a5<\/h2>\n<p>\u30fbJava Tomcat\u7b49\u5e94\u7528\u670d\u52a1\u5668+\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u8bbe\u7f6e\u793a\u4f8b<br \/>\n\u30fb\u3010JavaServlet &amp; jsp\u5165\u95e8\uff033\u3011\u6267\u884cSelect\u8bed\u53e5\u4ecePostgreSQL\u83b7\u53d6\u6570\u636e\u5e76\u663e\u793a\u5728\u5217\u8868\u4e2d<br \/>\n\u30fb\u57fa\u7840\u8bbe\u65bd\u770b\u8d77\u6765\u5f88\u96be&#8230;\u4e00\u76f4\u56de\u907f\u7684\u8f6f\u5f31\u7a0b\u5e8f\u5458\u4e3a\u4e86\u514b\u670d\u8fd9\u4e2a\u56f0\u96be\u800c\u52aa\u529b\u6784\u5efa\u4e86\u670d\u52a1\u5668\u3002WebAP\u670d\u52a1\u5668\u7bc7<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b66\u4e60\u7528\uff08\u5907\u5fd8\uff09 \u7684\u76ee\u7684\u662f\uff1f \u4f7f\u7528\u5e94\u7528\u670d\u52a1\u5668\uff08Tomcat\uff09\u901a\u8fc7\u6570\u636e\u6e90\u8fde\u63a5\u5230PostgreSQL\u3002 \u4f7f\u7528JSP\u4f7f [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-41504","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat\u548cpostgresql\u534f\u540c\u5de5\u4f5c\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c\" \/>\n<meta property=\"og:description\" content=\"\u5b66\u4e60\u7528\uff08\u5907\u5fd8\uff09 \u7684\u76ee\u7684\u662f\uff1f \u4f7f\u7528\u5e94\u7528\u670d\u52a1\u5668\uff08Tomcat\uff09\u901a\u8fc7\u6570\u636e\u6e90\u8fde\u63a5\u5230PostgreSQL\u3002 \u4f7f\u7528JSP\u4f7f [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat\u548cpostgresql\u534f\u540c\u5de5\u4f5c\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-14T19:02:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T13:03:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d476a37434c4406ca8492\/17-0.png\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/\",\"name\":\"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-03-14T19:02:48+00:00\",\"dateModified\":\"2024-04-29T13:03:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat\u548cpostgresql\u534f\u540c\u5de5\u4f5c\/","og_locale":"zh_CN","og_type":"article","og_title":"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c","og_description":"\u5b66\u4e60\u7528\uff08\u5907\u5fd8\uff09 \u7684\u76ee\u7684\u662f\uff1f \u4f7f\u7528\u5e94\u7528\u670d\u52a1\u5668\uff08Tomcat\uff09\u901a\u8fc7\u6570\u636e\u6e90\u8fde\u63a5\u5230PostgreSQL\u3002 \u4f7f\u7528JSP\u4f7f [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat\u548cpostgresql\u534f\u540c\u5de5\u4f5c\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-03-14T19:02:48+00:00","article_modified_time":"2024-04-29T13:03:58+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d476a37434c4406ca8492\/17-0.png"}],"author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/","name":"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-03-14T19:02:48+00:00","dateModified":"2024-04-29T13:03:58+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Tomcat\u548cPostgreSQL\u534f\u540c\u5de5\u4f5c"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/tomcat%e5%92%8cpostgresql%e5%8d%8f%e5%90%8c%e5%b7%a5%e4%bd%9c\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=41504"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41504\/revisions"}],"predecessor-version":[{"id":87631,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41504\/revisions\/87631"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=41504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=41504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=41504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}