Java for Web学习笔记(一):Java EE的介绍

  最近有个项目,当中涉及到Java Servlet,项目已经进行了一段日子,最近因为有重大需求调整,需要对架构重新进行梳理,一看,基本上哭笑不得,有不少地方真是黑色幽默,怎么会这样呢。

  当在这过程中,也引发了我兴趣,毕竟之前没有系统地了解过。在网上找到了一本书professional Java for Web Applications,是2014年的,算蛮新的。所以开始了这一系列。但是这本书也相当地厚,正文有938页,希望能够完成。

  Java SE或者J2SE,Java EE或者J2EE都是同一样东西不同的叫法,只是我们更常用的J2EE其实已经被新的Java EE替代(不知道为什么,但J2EE只需敲4个字母,更短)。Java SE 8等同与J2SE 1.8。Java EE的内容有时会融入到Java SE中,例如处理XML的JAXP原来在Java EE中,后来作为不可缺放入到SE中。

  今年发布了两个新的J2SE版本,7和8。进入了新一些变化。

Java SE 7的一些变化

  1、简化对象定义的类型描述:

   //原书写
    Map<String, Map<String, Map<Integer, List<MyBean>>>> map = new Hashtable<String, Map<String, Map<Integer, List<MyBean>>>>(); 
   // Java SE 7可以书写为:
    Map<String, Map<String, Map<Integer, List<MyBean>>>> map = new Hashtable<>(); 

  2、引入自动关闭接口,如果类实现了java.lang.AutoCloseable,通过try(xxxx){}catch(yyy){},对于xxxx中的对象,隐含了finally{ x.close()}的处理。这样在书写上方便了很多,例如读写,下面是数据库查询的例子,在1.7之前,我们需为了确保close需要这么写:

Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try{
    connection = dataSource.getConnection();
    statement = connection.prepareStatement(...);
    // set up statement
    resultSet = statement.executeQuery();
    // do something with result set
}catch(SQLException e){
    // do something with exception
}finally{
    if(resultSet != null) {
        try {
            resultSet.close();
        } catch(SQLException ignore) { }
    }
    if(statement != null) {
        try {
            statement.close();
        } catch(SQLException ignore) { }
    }
    if(connection != null && !connection.isClosed()) {
        try {
            connection.close();
        } catch(SQLException ignore) { }
    }
}

  在Java SE 7的版本就可以写为下面的方式,处理代码上简洁外,也避免我们忘却close()的问题。

try(Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(...)){
    // set up statement
    try(ResultSet resultSet = statement.executeQuery()) {
        // do something with result set
    }
}catch(SQLException e){
    // do something with exception
}

  3、在cathe中支持同时捕获多个异常,例如:

try{
    // do something
}catch(MyException | YourException e){ //当然这两个异常不能是继承关系
    // handle these exceptions the same way
}

  4、更便捷的位操作,下面几个数字是等同的

  1928,0b11110001000,1_928,0b111_1000_1000

  5、可以在switch中使用使用String了。

Java SE8的变化

  在时间方面增加了JSR310。

  支持lambda表达式,长用于匿名实现中。

  常规方式如下:

public String doSomethingInThread(String someArgument){
    ...
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run(){
            // do something
        }
    });
    ...
}

  lambda表达方式:

public String doSomethingInThread(String someArgument){
    ...
    Thread thread = new Thread(() -> {
        // do something
    });
    ...
}

  方法参考方式(method reference)

public String doSomethingInThread(String someArgument){
    ...
    Thread thread = new Thread(this::doSomething);
    ...
}
public void doSomething(){
    // do something
}

目录结构

  在Java EE标准中支持WAR(Web Application Archive)和EAR(Enterprise Archive)两种结果,当然还有不带包的方式。这两种结构的目录如下图所示:

Java for Web学习笔记(一):Java EE的介绍_第1张图片

  在WAR中,WEB-INF/tags和WEB-INF/tld目录用来存放JSP tag文件和tag lib描述符。i18n不是Java EE标准,但是作为管理用于存放国际(i18n)和本地(L10n)文件。

其它

  接下来还介绍了ClassLoader,但在实际中我们很少会去改动它,略过。

 

相关链接: 我的Professional Java for Web Applications相关文章

 
 

你可能感兴趣的:(Java for Web学习笔记(一):Java EE的介绍)