使用Quartz定时器在Java中执行计划任务

在JavaEE系统中,计划任务的执行是一项很普通的工作,需要我们定时执行一些维护和例行的任务。比如定时统计,发送邮件,报表,甚至通知和提醒等。

计划任务的实现有多种方式。比如使用数据库的定时任务(Jobs和Events),服务器的计划任务(Windows的计划作任务,Linux的Crontab系统。

那么Java本身能否实现定时任务呢,当然是可以的,我们可以使用Java.util.Timer 和 Java.util.TimerTask来完成这项工作,但是这种方法在调用上其实是不方便,需要大量的代码。解决这个问题的通行方法是使用Quartz框架。它是一个基于Java的计划任务框架,在定时执行上,可以使用Linxu的CronExperssion,便于使用和维护。

继续阅读使用Quartz定时器在Java中执行计划任务

解决JSP乱码问题的方式和思考途径

JSP中的乱码问题是一个普遍的问题,对于初学者来说,没有经历过乱码,不算是真正的初学者。但是,乱码的解决方法却是有一定的策略的。一般来讲,需要做到以下几点。

1. 修改MYSQL服务器的编码
修改MYSQL的my.ini配置文件

default-character-set=utf8

2.修改MYSQL数据库的编码
修改已有的数据库编码

ALTER DATABASE databaseName CHARACTER SET utf8;

由于修改数据库编码不会影响到已经存在的表的编码,因此,还需要修改已经存在的表。

ALTER TABLE table_name CHARACTER SET utf8;

3.修改Tomcat服务器的默认编码
Tomcat的server.xml中有编码设置,设置如下

<Connector prot=“8080protocol=“HTTP/1.1connectionTimeOut=“2000redirectPort=“8443URIEncodeing=“UTF-8/>

4.修改JSP的页面编码
JSP页面的编码通常包括文件本身的编码和页面顶部的声明的编码

<%@ page language="java" import="java.util.*” pageEncoding="utf-8"%>

5.修改数据库连接字符串的编码
在创建connection时指定编码的方式,代码如下

Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/databaseWeb?unicode=true&characterEncodeing=UTF-8”,”root”,”admin”);

JSP连接数据库总结

最近学习Java,终于到了连接数据库了,各种教程中给出的示例都是Mysql适用的,不可否认,Java+Mysql算是一个不错的组合,全开源免费的环境也是互联网公司的最爱.

不过,很多系统还是SQL Server的,如果想一夜之间把这些系统换掉是一个不太可能的任务.

1. 下载并引入驱动包.

到微软官方站点下载驱动包,http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=21599.然后放到WebRoot\Web-INF\lib下面既可.我用的是sqljdbc4.jar,所说这个比较新.

2. 接着在页面顶端添加数据库所必须的几个引用.

<%@page import="java.sql.DriverManager" %>
<%@page import="java.sql.Connection" %>
<%@page import="java.sql.Statement" %>
<%@page import="java.sql.ResultSet" %>
<%@page import="com.microsoft.sqlserver.jdbc.SQLServerDriver"%>
<jsp:directive.page import="java.sql.Date"/>
<jsp:directive.page import="java.sql.Timestamp"/>
<jsp:directive.page import="java.sql.SQLException"/>

3. 再然后就是加载驱动,打开连接,建立查询命名,返回查询结果集,显示结果了.

具体的代码如下.

Connection conn=null;   
Statement stmt=null;
ResultSet rs=null;
String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//SQL数据库引擎
String connectDB="jdbc:sqlserver://172.17.10.15//dev;DatabaseName=tech_doc";//数据源
    try
  {
   Class.forName(JDriver);//加载数据库引擎,返回给定字符串名的类
   conn=DriverManager.getConnection(connectDB,"User","Password");
    stmt=conn.createStatement();
   rs=stmt.executeQuery("select top 10 * from access_group");
   
   
   while(rs.next()){
   String group_id=rs.getString("group_id");
   String group_name=rs.getString("group_name");     
   }      
   }
   catch(SQLException ex){
   out.println();
   ex.printStackTrace();
   }finally{
   if(rs!=null)
   rs.close();   
      if(stmt!=null)
   stmt.close();
         if(conn!=null)
   conn.close();
   
   }

JAVA编程不得不看的几本经典书籍

入门类

1.《java从入门到精通》(第3版)

【内容介绍】

本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术。全书共分28章,包括:初识Java,熟悉Eclipse开发工具,Java 语言基础,流程控制,字符串,数组,类和对象,包装类,数字处理类,接口、继承与多态,类的高级特性,异常处理,Swing程序设计,集合类,I/O输入输出,反射,枚举类型与泛型,多线程,网络通信,数据库操作,Swing表格组件,Swing树组件,Swing其他高级组件,高级布局管理器,高级事件处理,AWT绘图与音频播放,打印技术和企业进销存管理系统等。所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Java程序开发的精髓,快速提高开发技能。

【推荐理由】

本书内容详尽,实例丰富,非常适合作为编程初学者的学习用书,也适合作为开发人员的查阅、参考资料。

2.《java核心技术卷一》

【内容介绍】

本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI工具箱进行图形用户界面设计,异常处理、流输入/输出和对象序列化、泛型程序设计等。本书内容翔实、深入浅出,附有大量程序实例,极具实用价值,是Java初学者和Java程序员的必备参考书。

【推荐理由】

本书出版以来,深受广大读者的喜爱,它全面介绍了Java SE的基础知识,不但具有使用价值,而且易于阅读,易理解,它必成为想进军Java和基础薄弱同学的不二之选。

3.《java编程语言》

【内容介绍】

本书以Java语言创建者的独特视角向读者展现了为什么以及如何使用Java语言,以便读者理解Java语言的基本设计目标以及它在现实世界中的应用。本书介绍的是Java语言的最新版本,该版本在《Java Language Specification,Second Edition》中定义,在Java2SDK1.3标准版中实现。本书已是第三版,在经构上相对前两版有所调整,重点讲述了新的语言特征,并提供了新API的使用实例。本书完全覆盖了Java语言当前版本的特征和类库,可以作为Java语言的入门向导,也可作为高级Java开发及Java语言教学的参考用书。

【推荐理由】

本书介绍的是Java语言的最新版本,该版本在《Java Language Specification,Second Edition》中定义,在Java2SDK1.3标准版中实现。本书已是第三版,在经构上相对前两版有所调整,重点讲述了新的语言特征,并提供了新API的使用实例。本书完全覆盖了Java语言当前版本的特征和类库,可以作为Java语言的入门向导,也可作为高级Java开发及Java语言教学的参考用书。

进阶类

1.《java编程思想》

【内容介绍】

本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。

【推荐理由】

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在BruceEckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。

2.《java核心技术卷二》

【内容介绍】

《JAVA核心技术卷2:高级特征》是Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、XML、网络、数据库编程、高级Swing、高级 AWT、JavaBean构件、安全、分布式对象、脚本、编译与注解处理等,同时涉及本地化、国际化以及Java SE 6的内容。《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。

【推荐理由】

本书是经典的《Java核心技术,卷II:高级特性》的最新修订版,涵盖了Java SE6平台的高级用户界面程序设计和企业特性。与第1卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了JavaSE6。并且对新内容都作了重点标注。书中所有的示例程序都进行了详细的设计,用来演示最新的编程技术。并展示针对专业开发者在现实中所碰到的典型问题的最佳解决方案。本书包含有关StAXAPI、JDBC 4、编译器API、脚本框架、闪屏和托盘API以及其他许多JavaSE6改进特性的新章节。本书聚焦于Java语言中更高级的特性,包括下列内容:流与文件、网络、数据库编程、XML、JNDI与LDAP、国际化、高级GUI组件、Java2D、JavaBeans、安全、RMI与Web服务、高级AWT、注解、本地方法。

3.《疯狂java讲义》

【内容介绍】

本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制。共覆盖了java.awt、java.lang、java.io和java.nio、java.sql、java.text、java.util、javax.swing包下绝大部分类和接口。

【推荐理由】

本书并不单纯从知识角度来讲解Java,而是从解决问题的角度来介绍Java语言,所以本书中介绍了大量实用案例开发。这些案例既能让读者巩固每章的知识,又可以让读者学以致用、激发编程自豪感,进而引爆内心的编程激情。本书光盘里包含书中所有示例的代码,如果读者希望获得课后练习的程序代码。

本书为所有打算深入掌握Java编程的读者而编写,适合各种层次的Java学习者和工作者阅读,也适合作为大学教育、培训机构的Java教材。但北大青鸟光谷校区专业老师认为,如果只是想简单涉猎Java,则本书过于庞大,不适合阅读。

JavaEE类

1.《javaWeb整合开发王者归来》

【内容介绍】

本书全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛系统(Spring+Struts+Hibernate)、宠物商店(EJB 3+JPA+Struts 2)。

【推荐理由】

资深Java程序员耗时一年时间写作,十年开发经验毫无保留。全面、系统、深入介绍Java Web开发的核心技术与主流框架。

2.《spring 入门到精通》

【内容介绍】

本书由浅入深,循序渐进地介绍了Spring的体系结构和相关知识点,目的是帮助初学者快速掌握Spring,并能使用Spring进行应用程序的开发。本书最大的特色在于每章都是由浅入深,从一个简单的示例入手,让读者快速了解本章内容,然后再详细讲解本章涉及的基本原理和知识点,最后再通过一个详细的示例宋巩固所学内容。本书每一章的例子都是经过精挑细选,具有很强的针对性,力求让读者通过亲自动手做而掌握其原理和方法,从而学习尽可能多的知识。本书适用于初、中级软件开发人员,同时也可用作高校相关专业师生和社会培训班的教材。

【推荐理由】

全书共分14章,内容涵盖了Spring的基础概念、核心容器、Spring AOP、事务处理、持久层封装、Web框架、定时器、Spring和Struts、Spring和Hibernate、Spring和Ant、Spring和Junit。本书适用于初、中级软件开发人员,同时也可用作高校相关专业师生和社会培训班的教材。

3.《JavaWeb开发详解》

【内容介绍】

本书共分4部分,从XML、Servlet、JSP和应用的角度向读者展示了Java Web开发中各种技术的应用,循序渐进地引导读者快速掌握Java Web开发。

【推荐理由】

本书内容全面,涵盖了从事Java Web开发所应掌握的所有知识,在知识的讲解上本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。

JSP基本概念学习(2)

JSP指令

格式

<%@ directive attribute=value%>

上面的格式中的星号代表可以有0或者多个属性

常见的directive可以有page,taglib,include等

page 指令

最常用指令,用于声明页面的属性。多个属性可以写在一个指令中,也可以分开写,但每个指令(import除外)只允许出现一次。

include指令

最常用的指令之一,用于包含jsp页面或者HTML页面,达到页面重用的目的。

<%@ include file=“foot.jp”%>

还有一种使用JSP命令的包含方式

<jsp:include page=“foo.jsp”/>

两者的区别是include是先包含后编译,后者是先运行后包含。也就是说,前者有可能会有变量名冲突的总是,后者由于是编译结果的包含,所以不存在这个问题。但也没有办法做到变量共享和重用了。

taglib指令

taglib用来指明JSP内置的标签库,它有两个属性,一个是URI,另一个是prefix属性。格式如下:

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

JSP 行为

格式: <jsp:elements { attribute=“value”}/>

JSP行为中最常用的就是include行为。

JSP行为可以更好的组织代码,因为它基本上可以代替原来JSP中出现的<%%>代码块完成相应的功能。

Java Bean(POJO)

JavaBean 是普通的Java类。也叫POJO,这种类只有私有属性与对应的getter和setter方法。

useBean

用于在JSP中定义一个Java Bean对象,其格式为

<jsp:useBean id=“benaId” class=“className” scope=“Value”/>

scope可以为page,request,session,application中的任何一种。

getPropert和setPropery

这两个行为用于获取和设置JavaBean的属性。

EL表达式

EL表达式是指用“${}”括起来的脚本,用来更方便的读取对象。EL只能写在JSP的HTML代码中,不能写在<%%>的JSP脚本中。

${param.foo}

EL表达式类似于MVC中的Razor语法引擎,不同的是MVC中的Razor更进一步,也更更方便一些。

EL表达式是不能直接访问普通的方法和静态属性的。这点需要注意。

在现有的Java EE(J2EE)系统中,Servlet只用于处理业务逻辑,而JSP通常只用于显示结果。也就是说,一般的现代框架中,其视图引擎使用的多是JSP。

当然,使用其它的语言作视图引擎也是可以的,例如使用PHP作为View显示,而使用Java 的Servlet作为后台处理逻辑就是很多互联网公司的做法。而且相当不错。

Java Web开发学习笔记(1)

Web.xml中Servlet中的配置

->Servlet配置

Servlet

servlet-name:名称

servlet-class:类名称

init-param:初始化参数节

param-name:参数名称

param-value:参数值

load-on-straup:是否在启动时加载,为1时自动加载,为0时有请求时才加载

实际中如果使用了框架,例如Structs,JSF,Spring都使用此方式预加载。

Servlet-mapping配置

servlet-mapping

servlet-name

url-pattern:地址格式,可以使用通配符。

同一个Servlet可以配置多个url-pattern

后缀名称在这里的意义并不是很大,因为可以直接在这里定义不同的后缀名称。

Context Param

这个参数是所有的Servlet都能够读取的参数。配置规则如下

context-param

param-name

param-value

可以有多个同样的配置节配置不同的参数,Servlet中通过使用getServletConfig().getServletContext()方法获取servletContext对象,然后使用其getInitParameter()获取所有的context-param参数名称和参数值列表

另一个可选的方式是把参数配置写到properties文件里面。

资源注入@Resource

Annotation是Java5.0引入的新特特特性,以@符号作为标记。

例如

@Resource(name=“messageFormXml”)

private String message;

代表在运行时,只要在web.xml中配置一个messageFormXml的参数就可以了。

也可以写成下面的形式

private @Resource(name=“messageFormXml”) String message;

资源注释添加后,需要在web.xml中添加对应的节点后,才能够被读取到。

Servlet生命周期

所有用户共用同一个Servlet实例

init方法和destroy方法只会调用一次,service在每次请求时都会被执行。

可以考虑把一些配置型的事务放到init中进行,这样,可以减少执行的次数。

Servlet线程安全

Servlet不是线程安全的,所以公共私有变量有可能会存在线程同步的问题,在Servlet中定义属性的话,如果存在写入的可能,则会导致线程数据同步问题