Tomcat去除端口号和项目名

在一个项目结束的时候,往往根据需要直接映射到一个IP地址上。此时就需要去除端口和项目名了,在访问的时候。下面根据具体的例子提供一种实现方法。

1.在进入TOMCAT_HOME,创建文件夹,将其命名为webdb(此处为webdb,根据需要可以修改成为其它的名称。)。

2.进入webdb文件夹,并在其中创建ROOT(其中ROOT要大写)文件夹,将你的项目中的内容全部拷背到ROOT下面。然后进入TOMCAT_HOME\webapps,将balancer文件夹拷背到webdb文件夹下。

3.在TOMCAT_HOME\conf\server.xml中,找到如这句话:

<host name="localhost" appbase="webapps"></host> unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

然后替换appBase="webapps"中的webapps用webdb。

<host name="localhost" appbase="webdb"></host> unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

4.这样的话,在访问该项目时,就可以用去掉项目名称的URL来访问了。

5.去除端口号就不用详细说了吧。就是打开TOMCAT_HOME\conf\server.xml中查找原始的端口号(如8080),修改为80后,即可在访问时不用输入端口号。不过要注意防止其它程序占用80端口。

6.可能有的朋友会说,为什么不删除webapps中的ROOT中的内容,然后将项目拷背到ROOT中呢,这样的话,同样可以达到想要的效果。关于这点我是这样认为的,其实方法多的是。条条大路通罗马。这样做的好处还有一个就是在用TOMCAT控制台时,可以很文便的将目录修改回来。

Tomcat虚拟主机配置方案(域名解析)For Windows/Linux(最完全版)

一、打开tomcat安装目录下conf/server.xml这个文件

在server.xml文档中找到

</Engine>

</Service>

接着添加上面添加以下内容(暂时先说分为三种方式):

第一种:

<Host name=".cn" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="www" debug="0" reloadable="true" crossContext="true"/>

<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www_5sai_log." suffix=".txt"

timestamp="true"/>

</Host>

以上的内容就是在Tomcat的webapps目录下新建一个www文件夹作为.cn这个域名的主目录

第二种:

<Host name=".cn" debug="0" appBase="C:\\test\www" unpackWARs="true" autoDeploy="true">

<Context path="" docBase="."/>

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="test_5sai_access_log."

suffix=".txt" pattern="common" resolveHosts="false"/>

<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="test_5sai_log." suffix=".txt" timestamp="true"/> </Host>

以上内容的意思就是在C盘test文件夹下面建立一个www文件夹作为.cn这个域名的主目录

第三种,如果是linux系统的/var/www作为.cn这个域名的主目录的话内容如下:

<Host name=".cn" debug="0" appBase="/var/www" unpackWARs="true" autoDeploy="true">

<Context path="" docBase="."/>

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="test_5sai_access_log."

suffix=".txt" pattern="common" resolveHosts="false"/>

<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="test_5sai_log." suffix=".txt" timestamp="true"/> </Host>

再补充一种

<Host name=".cn" debug="0" unpackWARs="true">

<Valve className="org.apache.catalina.valves.AccessLogValve"

directory="/var/log/tomcat" prefix="www_5sai_access_log." suffix=".txt"

pattern="common"/>

<Logger className="org.apache.catalina.logger.FileLogger" directory="/var/log/tomcat" prefix="www_5sai_log." suffix=".txt"

timestamp="true"/>

<Context path="" docBase="/var/www" debug="0" reloadable="true"/>

</Host>

域名.cn 的主目录为/var/www 该站点的所有访问LOG放在/ar/log/tomcat里面

测试:

windows用户打开C:\WINDOWS\system32\drivers\etc的hosts这个文件,

linux用户打开/ect的hosts文件或者vi /ect/hosts

修改内容如下

127.0.0.1 localhost

127.0.0.1 .cn

127.0.0.1 .cn

然后打开浏览器直接输入网址测试!

 

第二篇:tomcat部署多个项目

tomcat部署多个项目

最近有个项目需要在tomcat部署多个项目:(个人解决方案)

第一种:

在host中加: <Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/xfpm222" docBase="D:\running\Xfpm2" debug="0" reloadable="true"> <Resource name="jdbc/Oraclexfpm222" auth="Container"

type="javax.sql.DataSource" maxActive="100" maxIdle="50" maxWait="-1" username="xfpm2"

password="xfpm2" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@162.8.156.40:1521:orcl"/> </Context>

</Host>

报错1: java.lang.IllegalStateException: Web app root system property already set to dif ferent value: 'webapp.root' = [D:\running\Xfpm2\] instead of [C:\Program Files\T omcat 5.5\webapps\Xfpm2\] - Choose unique values for the 'webAppRootKey' context -param in your web.xml files!

at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(Web Utils.java:132)

at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebC onfigurer.java:118)

......

解决1:

是两个项目的设置重复了,导致出错,但我发现web.xml里并没有配置webAppRootKey项,然后查阅网上资料

,原来是因为如果没有web.xm 内没有设置webAppRootKey项,是为默认设置

public static void setWebAppRootSystemProperty(ServletContext servletContext)

throws IllegalStateException {

String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM); String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY); String oldValue = System .getProperty(key);

if (oldValue != null ) {

throw new IllegalStateException ("WARNING: Web app root system property already set: " + key + " = " +

oldValue + " - Choose unique webAppRootKey values in your web.xml files!" ); }

String root = servletContext.getRealPath("/" );

if (root == null ) {

throw new IllegalStateException ("Cannot set web app root system property when WAR file is not expanded");

}

System .setProperty(key, root);

servletContext.log("Set web app root system property: " + key + " = " + root); }

从代码看出,该方法其实就是把该web application的根目录的绝对文件路径作为属性保存在 System的属性列表中。该属性的名字,由web.xml文件中的名为"webAppRootKey"的参数值指出。

如果不在web.xml中定义 webAppRootKey参数,那么属性名就是缺省的"webapp.root".在我们的petclinic项目中已经定义了 webAppRootKey参数,其值为"petclinic.root",因此,属性的名字

就是"petclinic.root".

最后将webAppRootKey项配置好,错误解决。

以上解释懂一点,但是自己解决方法:在web.xml中加: <context-param> <param-name>webAppRootKey</param-name>

<param-value>web1.root</param-value>

</context-param>

另一个项目中加: <context-param> <param-name>webAppRootKey</param-name> <param-value>web2.root</param-value>

</context-param>

报错2: Caught exception while loading file struts-default.xml - [unknown location]

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa dConfigurationFiles(XmlConfigurationProvider.java:795)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa dDocuments(XmlConfigurationProvider.java:132)

......

解决2:可能是出现包之间的冲突,可以把冲突的包放在tomcat的common中(xerces-2.6.2.jar)

报错3: java.lang.NullPointerException

at jimmystudio.util.table.TableParser.getPageCount(Unknown Source)

at jimmystudio.util.table.TableParser.getPage(Unknown Source)

at jimmystudio.util.table.TableUtils.init(Unknown Source)

at org.apache.jsp.util.table.table_jsp._jspService(table_jsp.java:57)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper .java:332)

解决3:这是同一数据库,出现找不到数据(不知道是页面缓存的问题,还是数据库连接的问题)

如果数据用同一数据库可能出现报错!!

解决另外建立数据库、用户名和密码,分开连接。

第二种:增加虚拟目录,配置多个项目(自己还未实践)

想要通过tomcat访问你的项目,第一种方法就是把你的项目复制到tomcat目录下的webapps目录里。第二种方法就是

配置要运行的项目的路径,如下:

打开tomcat目录下的conf目录找到server.xml用记事本打开,找到<Host ....></Host>标记,先看看我的tomcat的server.xml里的Host标记里的配置:

<Host name="127.0.0.1" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="D:\HtmlTools\xinjing\yangWork\homework\web" debug="0" reloadable="true" crossContext="true"></Context>

<!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html -->

<!--

<Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->

<!-- Access log processes all example.

Documentation at: /docs/config/valve.html -->

<!--

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

-->

</Host>

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="D:\HtmlTools\xinjing\teacher\GWTGXT_TEST_4\web" debug="0"

reloadable="true" crossContext="true"></Context>

</Host>

我的配了两个Host,每一个Host配了一个项目,就是说我的tomcat配了两个项目。(如果没有Context path...,可以自己加上去)注意:两个Host的name就不能相同,这个name就是访

问tomcat的域名,也就是说这里每个项目配置了独立的域名。我试过在同一个Host里配两个项目(就是在</Context>后加一个<Context path>),可是这样会出错,就是说同一个域名不能配

两个项目。访问时要注意:第一个是:http://127.0.0.1:8080/Homework.html,第二个是:http://localhost:8080/GWTGXTTest.html;我的tomcat的端口配置是8080;同在server.xml配置

访问端口: <Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

maxThreads="500" minSpareThreads="50" maxSpareThreads="500"

enableLookups="false" acceptCount="500"

redirectPort="8443" URIEncoding="UTF-8"

useBodyEncodingForURI="true"/>

GET方式URL乱码问题解决也是在这里,其中的UTF-8 请根据你的需要自己修改,比如GBK。

tomcat的权限请看conf目录下tomcat-users.xml,在这不多说了。

相关推荐