首页
JAVA笔记
数据库笔记
混乱记忆
小站记
您现在的位置
tomcat部署配置加域名绑定
简介: 今天折腾了一下项目部署域名绑定,感觉都是泪各种奇葩问题。

今天把一个项目部署,什么都不解释都是泪啊。

先说说遇到的问题和解决办法

注:改文档的jndi数据源配置大致无问题,部分参数设置不合理会导致项目运行一段时间后出现数据库连接异常。要查看准确的jndi参数配置请点击连接:

http://www.xiaoyunduo.org/article/62/

 

 

第一个问题:jndi数据源不能连接,控制台错误信息打出为:

 Cannot create JDBC driver of class '' for connect URL 'null'
java.lang.NullPointerException
 at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
 at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
 at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
 at java.sql.DriverManager.getDriver(DriverManager.java:253)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
 at

环境描述:

WebRoot/META-INF/context.xml内容为

<?xml version="1.0" encoding="UTF-8"?>
<Context>
 <Resource name="jdbc/test"
 auth="Container"
 type="javax.sql.DataSource"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://192.168.5.100:3306/dev"
  username="root"
  password="admin"
  maxActive="100" maxIdle="50" maxWait="10000" />
</Context>
WEB-INF/web.xml内容添加

   <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/pageFrame</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

hibernate.xml数据源配置为

 <property name="connection.datasource">java:comp/env/jdbc/pageFrame</property>
 <property name="dialect">
  org.hibernate.dialect.MySQLDialect
 </property>
 <property name="show_sql">true</property>
 <property name="hibernate.hbm2ddl.auto">update</property>

以上配置在开发阶段没有一点问题,但是一到部署问题就来了。竟然说url为null网络搜索无果后查看官方数据源配置文档后将jndi数据源信息配置到config.xml 的 Context 中解决该问题。

 

 

第二个问题:绑定域名以后默认默认访问的竟然是tomcat的管理页面。

解决办法有两个。

  1.       Host 的appBase 不要配置为tomcat的默认 webapps目录。
  2.       将默认路径项目的 Context 的属性设置 path=""   一定要是"" 不能是"/" 原因请看tomcat 配置文档的虚拟主机配置。

第三个问题:是否需要配置 Host 的appBase ?

Host的属性appBase 配置的是网站的根目录。根目录下的文件夹就会被认做子目录

例如:如果appBase指定目录下有 项目A,B,C,那么A,B,C只是作为webapps下的目录存在,访问路径将是  doman/A、doman/B或doman.C 者完全不是我们想要的。

所有正确的配置

应该是:

 <Host name="www.xiaoyunduo.org"  
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
 <Context path="" docBase="${catalina.home}/webapps/myproject"  reloadable="true" crossContext="true" >
<Resource name="jdbc/test"
 auth="Container"
 type="javax.sql.DataSource"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://192.168.5.100:3306/databaseName"
  username="root"
  password="admin"
  maxActive="100" maxIdle="50" maxWait="10000" />
</Context>

 

将 host 的appBase去掉才是正途,应为现实中基本不会有人将多个项目部署到同一个域名下,大部分的做法是设置子域名部署不同的项目。

默认访问目录的context 一定要配置在config.xml 中 要不然无数的问题,我在这里吃了个亏老想将默认项目的context配置到 安装目录/conf/Catalina/www.xiaoyunduo.org/  下,结果浪费了太多的时间。

首先第一个问题就appBase目录应该怎么配置?

答案配置不了!


我不知道这是不是一个bug(高版本中无此问题):

在tomcat官方文档中找到说是在context这个目录下面建立xxx.xml ,xxx要和context 中的path一致,但是默认路径也就是"" 怎么表示? 我认为xxx.xml就应该写成.xml。经过测试发现理论可行,配置完成后可以直接通过域名访问了,但是测试时发现一个问题dispatcher.forward跳转之后

request.getContextPath();这个值在测试的时候回返回 "/"正常情况下应该是返回""才对返回"/"问题就来了,会导致项目中的路径出错。

 

最近更新