您的位置:首页 > 编程语言 > Java开发

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秒发送一封)

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读取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: