记一次JAVAWEB项目部署
需求
原本服务器上tomcat部署了一个javaweb项目在80端口,这次要部署另一个javaweb项目在8090端口,或者同时部署在同一端口不同目录下。
解决方法
不同端口部署
不同端口部署我们需要修改Tomcat\conf路径下的server.xml文件,复制一下原本标签里面的内容,然后修改Service_name port(你要的端口) Engine_name Host_appBase(存放项目的文件夹) 修改后内容如下。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina2" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps2"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
然后复制一份Tomcat目录下的webapps目录修改名字为你上面修改的appBase的值,同理复制一份Tomcat\conf目录下的catalina文件改名为上面修改的name的值,然后把javaweb项目放入webapps2(appBase值)中,重启Tomcat即可,Tomcat版本的差异会导致路径下的文件不同,安装版本和解压版本也会有所不同,我用的是安装版的Tomcat7。
同一端口不同路径部署
同一端口部署就相对简单了,只需要把javaweb项目导出的.war文件放入Tomcat路径下的webapps下重启Tomcat即可。
默认访问
更改上文中的server.xml文件,在Host标签中加入Context path="" docBase="你的项目的绝对路径"即可,示例如下。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="C:\Tomcat\webapps\dwsurvey" />
</Host>
遇到的问题
乱码
部署成功之后访问页面发现页面中文乱码,大概可能是三个方面出现问题,若果不能确定的话可以挨个修改排查。
工程编码
修改eclipse项目的编码为UTF-8
Tomcat编码
修改server.xml中的 Connector标签,增加属性URIEncoding="UTF-8",示例如下。
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000" URIEncoding="UTF-8"
redirectPort="8443" />
数据库编码
我用的是Mysql,删除掉之前导入的数据库(drop databse “数据库名”)执行以下命令重新创建数据库
CREATE DATABASE `mydatabase` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
然后用source命令重新导入数据库,登陆之后先用use命令选择数据库,然后source sql文件的绝对路径就能成功导入了。
内存泄露
成功启动Tomcat访问项目的时候,Tomcat卡死,查看Tomcat\logs文件下的日志发现错误
Exception in thread "http-bio-8090-exec-8" java.lang.OutOfMemoryError: PermGen space,
查询得知是因为JVM内存大小设置不当,加大即可。
免安装版本的Tomcat可以修改Tomcat\bin目录下的catalina.bat文件在“echo "Using CATALINA_BASE: $CATALINA_BASE"”(大概在130+行)上面加入以下行: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m" 。
安装版本bin目录下没有catalina.bat文件所以修改注册表Win+R 输入regedit打开注册表 。
32位OS打开HKEY_LOCAL_MACHINE -> SOFTWARE -> Apache Software Fundation -> Procrun2.0 -> Tomcat7 -> Parameters -> Java -> Options
64位OS打开HKEY_LOCAL_MACHINE -> SOFTWARE -> WOw6432Node -> Apache Software Fundation -> Procrun2.0 -> Tomcat7 -> Parameters -> Java -> Option
在最后加上:
-XX:PermSize=128m
-XX:MaxPermSize=512m
无法打开文件
项目运行报错,找不到数据库表,经过老师帮助查看日志发现一个路径很长的XLS文件无法打开,此文件是配置数据库映射关系的,怀疑是路径过深的问题,安装Tomcat到C盘根目录解决。
这样好暴力啊
IIS占用80端口
因为用的是Windows Server所以自带了IIS,考虑到之后可能会用到IIS,所以不彻底删除,只是禁用在管理员命令行运行iisreset/stop,服务里禁用 world wide web publishing service(IIS)就行了,或者改变IIS的端口,这个错误耽搁了好久,因为浏览器的缓存,导致我改好了还是会显示IIS页面,浏览器缓存害死人啊。
JDK环境变量
之前的项目用的是1.8,但是现在部署的项目必须是1.7,因为之前没有经验天真的以为把这俩都设置成环境变量就万事大吉了,结果1.7的项目报错,经查询原因是因为JDK版本,测试之后发现在1.7环境下之前的项目依然可以运行。所以删除1.8环境变量,cmd java -version 结果还是1.8,当时我仿佛见了鬼,气得我删除了1.8,然后继续java -version,结果输出找不到1.8,找不到你还找个头! 又查了一圈,说是可能写入了注册表,操作了一番发现并不是。最后我只好使出绝招 where java,然后在某Oracle路径下发现了一系列以java.exe为首的文件,一看环境变量,原来Oracle目录在环境变量里,但是有这个java.exe为什么会显示找不到呢,百度之后发现原来这个java.exe是一个链接文件相当于一个快捷方式,我把本体删了他自然就找不到了,删除这几个文件再次java -version 成功!
总结
这次部署耗费了我一天的时间,总结起来的错误看起来不难解决,但是遇到的时候还是要到处查,尤其是浏览器缓存已经吃过很多次亏了,总结错误就会更加熟练。你怎么这么熟练啊.jpg
虽然部署的问题解决了,项目的问题还是不断。
记一次JAVAWEB项目部署的更多相关文章
- 7-将本地的javaweb项目部署到Linux服务器的一般操作
一.基本流程介绍: 1.安装tomcat;2.安装mysql;3.将本地的javaweb导出成.war文件,传到服务器的tomcat/webapps/下面4.将数据库文件导出成.sql文件,传到服务器 ...
- 使用IDEA创建JavaWeb项目 部署本地tomcat并运行
一.下载商业版IDEA 官方链接:https://www.jetbrains.com/idea/download/#section=windows 二.新建JavaWeb项目 1.在菜单栏找到File ...
- javaWeb项目部署到阿里云服务器步骤
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
- 用idea将javaweb项目部署到tomcat
之前在网上找的一些web项目都是用eclipse开发的,想把这些项目导入到idea中,然后部署到tomcat中,在网上找了很多教程,很多都不靠谱,发现网上很多配置都是多余的,其实很多只需要按idea默 ...
- javaWeb项目部署到阿里云服务器步骤 完整版
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
- 记一次PHP项目部署过程
首先介绍一下项目的基本情况:使用PHP语言开发,数据库用的是MySQL 5.5,HTTP服务器用的是Apache 2.2.早上十点到机房看了看服务器的基本情况:Windows 2000操作系统,没有安 ...
- [linux,springboot] - 记一次java项目部署
之前部署的java项目,打包war包后放入tomcat下,并配置conf下的server.xml,设置war包路径,设置是否自动解包与否等操作. 然后重启tomcat,稍等片刻,(web)java项目 ...
- 将javaweb项目部署到阿里云服务器
主要步骤:1. 购买阿里云服务器2. 远程连接3. 在云服务器上配javaweb环境:jdk,tomcat,MySQL4. 将项目的war文件放到Tomcat下关于云服务器ECS:如果还想在买服务器之 ...
- 【Linux】将javaweb项目部署到CentOS的tomcat上
1.将项目打包成war包 build之后war文件就生成了. 2.拷贝war文件到CentOS的tomcat的项目文件夹中 用WinSCP将文件粘帖进这个文件夹中 /wocloud/tomcat_cl ...
随机推荐
- 基于hortonworks的大数据集群环境部署流水
一.ambari及HDP安装文件下载地址: 1.系统 操作系统:CentOS7 2.软件 本次安装采用最新版本: ambari-2.7.0.0 hdp-3.0.0.0 详细信息及下载地址如下: Amb ...
- stm32入门学习路线个人见解
可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...
- std unorder_map insert 和 emplace的区别
std::unordered_map<int, int > map; map.insert(std::make_pair(, )); map.insert(std::make_pair(, ...
- redis加固
一.背景描述 1.漏洞描述 Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用. 在特定条件下,如果 Redis 以 root 身份运行,黑客可以给 root 账号写入 SSH 公钥文件, ...
- FastJson:Json树的CRUD操作方法实现
准备工作:json字符串 [{ "id": 1, "code": "FLOW_NODE_1", "name": &quo ...
- JsonPath如何获取JSON数据中的值
场景: 发送接口请求后,得到请求结果值是Json数据, 需要从Json数据信息中提取字段值. 响应值字符与字符之间有空格,导致用正则表达式方法提取比较麻烦,于是用java的JsonPath方法提取快速 ...
- mysql统计库下所有表数据行数
一.执行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', T ...
- 再次聊一聊promise settimeout asycn awiat执行顺序---js执行机制 EVENT LOOP
首先js是单线程 分为同步和异步,异步又分为(macrotask 宏任务 和 microtask微任务 ), 这图还是很清晰嘛,再来一张 总结一下,就是遇到同步先执行同步,异步的丢到一边依次排队,先排 ...
- 算法题:int 数组中 只有一个是id 只出现一次 其他都出现2次 怎么找出只出现一次的id
首先讲一个最笨的算法:时间复杂度为N 空间复杂度为N 代码如下:输出结果id=3完全正确: int[] a = new int[] { 1, 1, 2, 2, 3, 4, 4 }; Dictiona ...
- nodejs 前端项目编译时内存溢出问题的原因及解决方案
现象描述 昨天用webpack打包Vue的项目时,node内存溢出而停止build项目,即是项目构建过程中频繁报内存溢出:FATAL ERROR: CALL_AND_RETRY_LAST Alloca ...