需求说明
做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化。
web.xml说明
首先了解下web.xml中元素的加载顺序:
完整加载顺序: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个步骤:
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。
servlet的运行过程
servlet初始化
配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。
PS:一般我们在开发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并不是线程安全的,多线程单实例执行的,当并发访问同一个资源的话(成员变量等等),就有可能引发线程安全问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。