摘要: 需求说明 做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化。 web.xml说明 首先了解下web.
需求说明
做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化。
web.xml说明
首先了解下web.xml中元素的加载顺序:
-
启动web项目后,web容器首先回去找web.xml文件,读取这个文件
-
容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部分都将共享这个上下文
-
容器将 转换为键值对,并交给 servletContext
-
容器创建 中的类实例,创建监听器
-
容器加载filter,创建过滤器, 要注意对应的filter-mapping一定要放在filter的后面
-
容器加载servlet,加载顺序按照 Load-on-startup 来执行
完整加载顺序:ServletContext -> context-param -> listener-> filter -> servlet
配置实现
InitServlet.java:
/**
* 初始化系统参数
* 创建者 科帮网
* 创建时间 2017年5月10日
*
*/
public class InitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(){
try {
if(Constants.PAY_URL.size()==0){
List<CommonEntity> listPayUrl = PropertiesListUtil.listPayUrl();
for(CommonEntity entity:listPayUrl){
Constants.PAY_URL.put(entity.getEntityCode(), entity.getEntityName());
}
}
LogUtil.info("佛祖保佑 永不宕机 永无BUG :初始化系统数据数量:"+Constants.PAY_URL.size());
Configs.init("zfbinfo.properties");
LogUtil.info("初始化支付宝配置信息");
SDKConfig.getConfig().loadPropertiesFromSrc();
LogUtil.info("初始化银联支付配置信息");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 重新加载配置文件
* @Author 科帮网
* @param request
* @param response
* @throws ServletException
* @throws IOException
* @Date 2017年5月10日
* 更新日志
* 2017年5月10日 张志朋 首次创建
*
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Constants.PAY_URL = new ConcurrentHashMap<String, String>();
List<CommonEntity> listPayUrl = PropertiesListUtil.listPayUrl();
for(CommonEntity entity:listPayUrl){
Constants.PAY_URL.put(entity.getEntityCode(), entity.getEntityName());
}
LogUtil.info("初始化系统数据数量:"+Constants.PAY_URL.size());
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
web.xml:(部分配置)
<!-- 初始基础化数据-->
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.acts.web.common.servlet.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/InitServlet</url-pattern>
</servlet-mapping>
servlet介绍
什么是servlet
servlet是sun公司为开发动态web而提供的一门技术,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
- 编写一个Java类,实现servlet接口。
- 把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。
servlet的运行过程
- 浏览器发出请求,被web容器获取到
-
Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
-
装载并创建该Servlet的一个实例对象,调用Servlet实例对象的init()方法。
-
创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
-
WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法
servlet初始化
-
load-on-startup >=0 时,表示在web应用启动后立即加载,其中load-on-startup的值越小,表示加载的优先级越高,如果两个servlet的load-on-startup值相同,则其加载优先级有容器决定;
-
load-on-startup 未配置时,则该servlet的加载由容器决定;
配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。
PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:
1. 如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;
2. 配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。
关于load-on-startup一些官网说明:
If the value is a negative integer, or the element is not present, the container is free to load the servlet
whenever it chooses. If the value is a positive
integer or 0, the container must load and initialize the servlet as the application is deployed.
注意
使用servlet时,一般都是继承httpServlet,然后分别实现doGet或者doPost方法,但是在这里面要注意的是,这servlet并不是线程安全的,多线程单实例执行的,当并发访问同一个资源的话(成员变量等等),就有可能引发线程安全问题。
相关推荐
汽车产品数据https://tianchi.aliyun.com/?spm=5176.12281973.J_3941670930
http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
此内容主要用于CentOS7.6、CentOS7.9操纵系统中,并且操作系统不能够链接外网无法使用yum安装httpd服务,所以只能使用离线安装包进行安装。...阿里云:http://mirrors.aliyun.com/ 网易云:http://mirrors.163.com/
幸福感分析-机器学习项目 https://tianchi.aliyun.com/competition/entrance/231702/introduction 幸福感是一个古老而深刻的话题,是人类世代追求的方向。与幸福感相关的因素成千上万、因人而异,大如国计民生,...
一、准备 确认在预拉取yum包的机子关于网络...[root@mini2 /]# wget -O /etc/yum.repos.d/base.repo http://mirrors.aliyun.com/repo/Centos-7.repo //base源 [root@mini2 /]# wget -O /etc/yum.repos.d/epel.repo h
centos7.0 sso下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1804.iso 方案二: centos7.0已经做好的镜像(包含图形化): 链接:...
阿里云 NPM 镜像:https://npm.aliyun.com 腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/ 华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/ 网易 NPM 镜像:...
- 进入阿里云开源镜像站:[https://mirrors.aliyun.com/centos/](https://mirrors.aliyun.com/centos/) - 按照与官方站点相同的方式找到你需要的版本和架构。 - 点击下载链接,同样会提供.torrent文件。 3. 网易...
输入命令wget http://mirrors.aliyun.com/repo/Centos-7.repo 如果wget命令不生效,说明还没有安装wget工具,输入yum -y install wget 回车进行安装。 当前目录是/etc/yum.repos.d/,刚刚下载的Centos-7.repo也在这...
阿里云视频点播转码SDK,文档地址https://helpcdn.aliyun.com/product/29932.html?spm=a2c4g.11186623.6.540.57403893NeEgPt
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ``` 4. 清理缓存并生成新的缓存: ``` yum clean all yum makecache ``` **3.2 关闭防火墙** 在某些情况下,可能需要暂时关闭CentOS...
<url>https://maven.aliyun.com/repository/central</url> </mirror> * 在settings.xml文件中添加阿里云Maven仓库镜像的配置,例如: <id>aliyunmaven</id> <id>aliyunmaven</id> <url>...
CIKM-AnalytiCup-2020是由阿里云主办的数据分析竞赛,旨在促进信息检索(IR)和知识管理(KM)领域的技术创新与实践应用。这个比赛为参赛者提供了运用机器学习、深度学习和数据分析技能的机会,挑战可能涉及到数据...
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse # 更多其他版本的源配置... ``` 4. **更新apt源**: 完成更改后,需要更新apt源以确保系统能够识别新的软件源地址: ...
wget -O /etc/yum.repos.d/epel-7.repo https://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo 二、清除系统所有的 ...
NULL 博文链接:https://xiaorao.iteye.com/blog/476577
http://mirrors.aliyun.com/pypi/simple/ 阿里 http://pypi.hustunique.com/simple/ 华中理工大学 http://pypi.sdutlinux.org/simple/ 山东理工大学 http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学 ...
-- https://mvnrepository.com/artifact/com.aliyun.ams/emas-services --> <groupId>com.aliyun.ams</groupId> <artifactId>emas-services</artifactId> <version>1.0.1</version> </dependency> mvn ...
阿里云java源码 说明:支持阿里Teambition网盘的webdav协议,后续的2.x版本仅支持阿里云盘,不再维护Teambition网盘版本 webdav-aliyundriver 本项目实现了阿里云盘的.../etc/aliyun-driver/:/etc/aliyun-driver/ -e
Yum简介 yum (全称为 Yellow dogUpdater,modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从...wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/r