本文将介绍Javaweb实现TOMCAT启动时加载程序里的定时器的详细情况,特别是关于javawebtomcat启动执行方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主
本文将介绍Java web实现TOMCAT启动时加载程序里的定时器的详细情况,特别是关于java web tomcat启动执行方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Centos 7 java 安装 及 tomcat启动、Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题、java 之 jsp tomcat启动失败问题、JavaWeb Tomcat 怎样实properties文件的实时加载?的知识。
本文目录一览:- Java web实现TOMCAT启动时加载程序里的定时器(java web tomcat启动执行方法)
- Centos 7 java 安装 及 tomcat启动
- Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题
- java 之 jsp tomcat启动失败问题
- JavaWeb Tomcat 怎样实properties文件的实时加载?
Java web实现TOMCAT启动时加载程序里的定时器(java web tomcat启动执行方法)
下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现 javax.servlet.ServletContextListener接口,同时实现它的contextInitialized和contextDestroyed两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器, 示例代码如下所示:
package com.ganinfo.sc.cwe.user.util;
import java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
/**
* 定时任务
* @author ruikanwang
*
*/
public class TimingListener extends HttpServlet implements ServletContextListener{
private static final long serialVersionUID = 1L;
private java.util.Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("获取app版本定时器已启动");
System.out.println("开始执行时间"+new Date());
timer.schedule(new ExTask(event.getServletContext()), 0, 5*60*1000);
event.getServletContext().log("已经添加任务调度表");
}
}
以上代码timer.schedule(new ExTask(event.getServletContext()), 0, 5601000)这一行为定时器调度语句,其中ExTask是自定义需要被调度的执行任务
ExTask.java代码
public class ExTask extends TimerTask {
private static boolean isRunning = false;
private ServletContext context = null;
public ExTask(ServletContext context) {
this.context = context;
}
@Override
public void run() {
if (!isRunning) {
isRunning = true;
context.log("开始执行指定任务");
String BASEURL=SystemConfig.getParam("APP_timing_version");
try {
doGetStr(BASEURL);//此处为执行代码
} catch (ParseException | IOException e) {
e.printStackTrace();
}
isRunning = false;
context.log("指定任务执行结束");
} else {
context.log("上一次任务执行还未结束");
}
}
}
做完上面这些我们只是完了一个个定时器的设定,如果想要在tomcat启动时就加载,必须要配置web.xml, web.xml配置的内容如下
<listener> <listener-class>com.tjsoft.buisness.util.ContextListener</listener-class> </listener>
注意: 此监听器放在其他监听器后面防止读取不到配置文件情况
Centos 7 java 安装 及 tomcat启动
运行tomcat 需要安装java环境:
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载了:jdk-8u144-linux-x64.rpm
卸载之前的openjdk
:rpm -qa | grep -E'^open[jre|jdk]|j[re|dk]'
:yum remove java-1.8.0-openjdk
:yum remove java-1.8.0-openjdk-headless
安装:rpm -ivh jdk-8u144-linux-x64.rpm
:环境变量 export JAVA_HOME=/usr/java/default
tomcat daemon.sh 启动 操作步骤:
wgethttp://archive.apache.org/dist/tomcat/tomcat-8/v8.5.12/bin/apache-tomcat-8.5.12-deployer.tar.gz tar-zxvfapache-tomcat-8.5.12-deployer.tar.gz mvapache-tomcat-8.5.12-deployer/data/app/tomcat/ cd/data/app/tomcat/bin/ tar-zxvfcommons-daemon-native.tar.gz cdcommons-daemon-1.0.15-native-src/unix ./configure make cpjsvc../.. ./daemon.shstart
ok
系统启动 :
cd/usr/lib/systemd/system vimtomcat.service
[Unit] Description=Tomcat After=syslog.targetnetwork.targetremote-fs.targetnss-lookup.target [Service] Type=forking Environment=JAVA_HOME=/usr/java/default ExecStart=/data/app/tomcat/bin/daemon.shstart ExecStop=/data/app/tomcat/bin/daemon.shstop PrivateTmp=true [Install] WantedBy=multi-user.target
systemctldaemon-reload systemctlenabletomcat.service systemctlstoptomcat.service
Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题
去年刚开始遇到这样的问题很郁闷,总以为是服务器的问题,网上的也不好找到很好的答案,花了不少时间,现在感觉这样的问题多了网上的答案也随之很多
启动巨慢问题分析:
启动慢主要是卡在初始化 Session, 通过搜索和分析,Tomcat 的 SessionID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,生成是使用了 Linux 随机函数生成器 /dev/random。读取它相当于生成随机数字。搜索 /dev/random,大概知道是什么鬼了:/dev/random 会根据 噪音 产生随机数,如果噪音不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、CPU 利用率等方式来收集噪音的,如果噪音不够生成随机数的时候就会被阻塞。
解决方案 A 和 B
A. 使用伪随机函数生成器 /dev/unrandom /dev/urandom 并不是真正的随机行为 (其实一般不容易重复),主要有两个地方可以修改。
- 通过修改 Tomcat 启动文件 -Djava.security.egd=file:/dev/urandom
- 通过修改 JRE 中的 java.security 文件 securerandom.source=file:/dev/urandom
B. 增大 /dev/random 的熵池(推荐) 问题的原因是由于熵池不够大,所以增大它是最彻底的方法。我们可以通过软件的方法实现,下面是软件的安装和配置流程。
- 安装熵服务
yum install rng-tools - 启动熵服务
systemctl start rngd - 如果你的 CPU 不支持 DRNG 特性或者像我一样使用虚拟机,可以使用 /dev/unrandom 来模拟。
cp /usr/lib/systemd/system/rngd.service/etc/systemd/system vim /etc/systemd/system/rngd.service # 以下是编辑内容 ExecStart=/sbin/rngd -f -r /dev/urandom - 重新载入服务
systemctl daemon-reload systemctl restart rngd
经过上面的修改,我们再观察 /proc/sys/kernel/random/entropy_avail 基本上在 3000 左右。这个时候重新启动 Tomcat,发现启动时间正常。
这两种方案 A 自己没有试过,也是网上看的,我一般用的是 B 方案,安装熵服务和启动熵服务这两步操作就可以了,最好是在 linux 的根目录下操作
java 之 jsp tomcat启动失败问题
问题描述:
创建了一个helloServlet
代码如下
package Test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class helloServlet
*/
@WebServlet("/helloServlet")
public class helloServlet extends HttpServlet {
// private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public helloServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("GBK");
response.getWriter().write("你好 世界");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
接着配置
web.xml
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>haha</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- 类名 -->
<servlet-name>helloServlet</servlet-name>
<!-- 类所在的包路径 -->
<servlet-class>Test.helloServlet</servlet-class>
</servlet>
<!-- 映射路径 -->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>TomcatTest/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
启动server
报错错误如下
Server Tomcat v7.0 Server at localhost failed to start.
日志:
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version: Apache Tomcat/7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built: Nov 9 2018 11:07:44 UTC
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number: 7.0.92.0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 10
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version: 10.0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture: amd64
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home: C:\Program Files\Java\jre1.8.0_161
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version: 1.8.0_161-b12
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor: Oracle Corporation
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\apache-tomcat-7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\apache-tomcat-7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\apache-tomcat-7.0.92\endorsed
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=GBK
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: Loaded APR based Apache Tomcat Native library 1.2.18 using APR version 1.6.5.
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized (OpenSSL 1.1.1 11 Sep 2018)
十二月 28, 2018 8:45:59 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:45:59 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-apr-8009"]
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 439 ms
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
警告: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [182] milliseconds.
十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:758)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.startup.Catalina.start(Catalina.java:710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
十二月 28, 2018 8:46:00 下午 org.apache.catalina.startup.Catalina start
严重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.startup.Catalina.start(Catalina.java:710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:758)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 11 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
... 13 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["ajp-apr-8009"]
解决方案:
根据日志可以分析出可能跟web.xml有关
推测是否是eclipse自动会设置映射路径,于是删掉配置的servlet
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>haha</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
启动server
成功
问题解决
JavaWeb Tomcat 怎样实properties文件的实时加载?
期望结果:手动修改properties文件中的该参数值后,不需要重启Tomcat(或重新发布),该新参数值要求立即在程序中生效。
我的主要代码:
URL url=TestClass.class.getClassLoader().getResource("test.properties"); String path=URLDecoder.decode(url.getPath(),"UTF-8"); Properties props=new Properties(); props.load(new FileInputStream(path)); String xxx=props.getProperty("yyy");
以上,当修改了yyy对应的参数值后,取得的xxx值仍然为修改前的值,而当重启Tomcat后,就可以取到修改后的值了!
补充说明:只是修改了properties文件,别的都没修改而重启Tomcat(或重新部署整个项目),感觉这样不值当!
在网上找到一个解决方法:将文件中的数据先读入内存,然后用户修改后再去修改内存中的数据和配置文件中的数据,然后读数据时只需要从内存中读取,但不知道此方法是怎样实现的!
所以,想求知:实时加载properties要如何实现(JavaWeb项目中,重启Tomcat和重新发布项目的方法除外)?
关于Java web实现TOMCAT启动时加载程序里的定时器和java web tomcat启动执行方法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Centos 7 java 安装 及 tomcat启动、Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题、java 之 jsp tomcat启动失败问题、JavaWeb Tomcat 怎样实properties文件的实时加载?的相关信息,请在本站寻找。
本文标签: