Java Servlet【3】<load-on-startup>的配置、ServletConfig对象如何提起信息
2015-08-17 22:11
766 查看
近几个月看的狼图腾书快接近尾声了,感慨挺多的,做人要有狼性,若无狼性奴性便生出来了。
好了,开始技术,今天就来说说 <load-on-startup>的配置、ServletConfig对象如何提起信息。
(1)在***网页的时候常常有遮掩的需求:当我们的网站启动的时候,会要求初始化一些数据(比如创建一些临时表)、网站有一些要求定时完成的任务(定时写日志、备份数据库、定时发送邮件),那么用什么技术解决呢,我们可以通过load-on-startup + 线程的 知识搞定!
<load-on-startup>:通过配置可以指定某个Servlet在服务器启动的时候自动创建,然后再定时查看时间和邮件发送时间,若两者匹配就将邮件发送出去(这里需要用到JavaEmail技术、内存中需要有这样一张表,这里只是简单说明)
sendEmailTable:id content
sendTime
1 "linweieran" 2015/8/20/11:11
2 "chengzhang"
2015/8/20/17:17
例如模拟发送邮件的代码是:(这里规定每10秒发送一封)
那么在loadon的Servlet函数中需要启动一个SendEmailThread,代码如下
也就是说,这个程序在服务器启动的时候就会加载。
器运行结果如下:
运行结果表明代码正确。
(2)ServletConfig对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为Servlet配置一些初始化参数,当Servlet配置了初始化参数后,web容器在创建Servlet实力对象的时候,会自动将初始化对象封装到ServletConfig中,在调用init时将ServletConfig传递给Servlet。
案例如下:
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
读取这里配置的方法是:
其中另一种配置的方式是:
<context-param></context-param>这里配置用户名密码等等,参数可以被所有Servlet读取。
好了,开始技术,今天就来说说 <load-on-startup>的配置、ServletConfig对象如何提起信息。
(1)在***网页的时候常常有遮掩的需求:当我们的网站启动的时候,会要求初始化一些数据(比如创建一些临时表)、网站有一些要求定时完成的任务(定时写日志、备份数据库、定时发送邮件),那么用什么技术解决呢,我们可以通过load-on-startup + 线程的 知识搞定!
<load-on-startup>:通过配置可以指定某个Servlet在服务器启动的时候自动创建,然后再定时查看时间和邮件发送时间,若两者匹配就将邮件发送出去(这里需要用到JavaEmail技术、内存中需要有这样一张表,这里只是简单说明)
sendEmailTable:id content
sendTime
1 "linweieran" 2015/8/20/11:11
2 "chengzhang"
2015/8/20/17:17
例如模拟发送邮件的代码是:(这里规定每10秒发送一封)
public class SendEmailThread extends Thread{ public void run(){ int count = 0; while(true){ try { //没休眠一分钟就去扫描一下这个表,看看那封信应当被发出 Thread.sleep(10*1000); System.out.println("发出 第"+(++count)+"邮件"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } }
那么在loadon的Servlet函数中需要启动一个SendEmailThread,代码如下
public class loadon extends HttpServlet { public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void init() throws ServletException { // 当网站启动的时候init就自动触发一次 System.out.println("loadon的init被调用>>>>"); //完成一些初始化的问题。 System.out.println("初始化数据(创建一些临时表)、定时写日志、备份数据库、定时发送邮件"); //创建一个线程 //SendEmailThread sendET = new SendEmailThread(); //sendET.start(); } }下面是最重要的环节,在Servlet注册那里添加<load-on-startup>的配置,先看一下代码:
<servlet> <servlet-name>loadon</servlet-name> <servlet-class>com.lijingbo.loadon</servlet-class> <load-on-startup>1</load-on-startup> </servlet>由于希望被客户通过浏览器主动调用,所以<servlet-mapping>可以删除。其中
<load-on-startup>1</load-on-startup>代表启动时候的优先级,数值越小优先级越高。
也就是说,这个程序在服务器启动的时候就会加载。
器运行结果如下:
运行结果表明代码正确。
(2)ServletConfig对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为Servlet配置一些初始化参数,当Servlet配置了初始化参数后,web容器在创建Servlet实力对象的时候,会自动将初始化对象封装到ServletConfig中,在调用init时将ServletConfig传递给Servlet。
案例如下:
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
读取这里配置的方法是:
//这里可以读取配置信息 String encoding = this.getServletConfig().getInitParameter("encoding"); response.setCharacterEncoding(this.getServletConfig().getInitParameter("encoding")); //将全部配置读取出来。 Enumeration<String> names = this.getServletConfig().getInitParameterNames(); while(names.hasMoreElements()){ String name = names.nextElement(); System.out.println(name); System.out.println(this.getServletConfig().getInitParameter(name)); } response.getWriter().println("lijingbo,"+encoding);
其中另一种配置的方式是:
<context-param></context-param>这里配置用户名密码等等,参数可以被所有Servlet读取。
相关文章推荐
- Spring AOP
- Java跨平台开发神器之JNI
- leetcode-110:判断平衡二叉树 Java
- leetcode-110:判断平衡二叉树 Java
- java中String的常用方法
- [笔记][Java7并发编程实战手册]3.3 资源的多副本并发访问控制Semaphore
- Java静态语句块、语句块、构造方法执行顺序
- Struts2中的ModelDriven机制及其运用
- Mark Knowledge of Java Thread (2): Notify and Wait
- Spring注解的步骤
- java并发-读书笔记
- java基础及多线程
- java内存管理:垃圾回收机制
- Java日志框架——Logback的Filter
- java实例 N的阶乘末尾有多少个0
- Java开发中的23种设计模式详解
- 【Java技术位】——代理模式及其事务包
- Eclipse maven 插件之helloword
- JavaEE细节问题05——Cookie和Session
- Spring MVC 教程,快速入门,深入分析