java基础
java平台与环境
java平台
平台定义
-
java ME:小型版,Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。(主要是针对嵌入式设备)
-
java SE:它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类.(主要针对桌面系统)
-
java EE:J2EE架构是使用Java技术开发企业级应用的一种事实上的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物。Sun推出J2EE的目的是为了克服传统客户端\服务端模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。
体系框架
四层架构
- 客户端层:可以是web浏览器,也可以是java客户端
- 服务器端组件层:web层,例如jsp,servlet
- EJB层:业务层,封装业务逻辑
- 企业信息系统层:数据层,例如,数据库,文件系统等
深入
JSP
JSP = HTML + JAVA ,是一种动态的网页技术,其中既可以定义 HTML,CSS,JavaScript 静态内容,也可以使用 Java 代码定义动态内容。其实,jsp本质上就是一个servlet。
jsp运行过程,浏览器访问时,Tomcat会将hello.jsp转换为hello_jsp.java的一个Servlet,然后这个Servlet会被Tomcat编译为字节码文件Hello_jsp.class,Tomcat会执行这个字节码文件向外提供服务。
jsp有四个发展阶段
- 使用Servlet技术实现逻辑代码的编写以及页面拼接
- jsp的出现要比Servlet方便很多,但同时还是有很多缺点
- 使用Servlet进行逻辑开发,JSP进行数据展示,是为了解决JSP页面中JAVA代码混乱的问题。(一定不要直接在JSP中写JAVA代码)
- 使用Servlet进行逻辑开发,HTML进行数据展示,AJAX实现数据的动态展示
JSP的缺点:
- 书写复杂,阅读麻烦,可以写HTML标签,可以写JAVA代码
- 运行依赖各种环境,例如jre,jsp容器,javaEE等,会使程序变得很复杂
- 占用磁盘空间较多,jsp在运行过程中,会自动生成.java和.class文件,占用磁盘空间,运行.class文件占用内存。
- 调试困难,出现问题需要找自动生成的.java文件进行调试。
- 不利于团队开发,如果页面出现问题,需要先找前端开发工程师修改静态页面,再由后端开发将该页面修改为jsp页面。
Servlet
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
工作模式:
- 客户端发送请求至服务器
- 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并传给服务器
- 服务器将响应返回客户端
使用方法:
Servlet技术的核心是Servlet,它是所有Servlet类必须或间接实现的一个接口,使用时可以直接去实现它,但是一般使用实现HttpServlet抽象类的方法去使用它,
HttpServlet抽象类是继承于GenericServlet抽象类而来的。使用HttpServlet抽象类时,还需要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。
HttpServletRequest接口扩展于javax.servlet.ServletRequest接口,HttpServletResponse接口扩展于javax.servlet.servletResponse接口。
Servlet工作流程
tomcat主要是解析http请求的自愿,将请求信息封装成request对象,于此同时创建一个response对象,然后创建servlet对象,并且调用servlet对象的service()方法,在service()方法中会调用write()方法,其作用是将内容写到response的缓冲区中。最后tomcat会从response缓冲区中获取内容并组装成一个http响应(响应行,响应头,响应体)。
本来write()是需要一字一句将html写入response缓存中的,但是jsp的出现,简化了这个过程。
EJB
EJB 是 sun 的 JavaEE 服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借 java 跨平台的优势,用 EJB 技术部署的分布式系统可以不限于特定的平台。
在 J2EE 里,Enterprise Java Beans(EJB) 称为 Java 企业 Bean,是 Java 的核心代码,分别是会话 Bean(Session Bean),实体 Bean(Entity Bean)和消息驱动 Bean(MessageDriven Bean)。
有点类似于spring容器的注入。
基于EJB的程序架构总体有一个非常优秀的思想:业务逻辑相关的实现集中在EJB中完成,而EJB容器则负责提供带有重复性质的、系统级的功能,这样EJB组件就可对外提供完整的业务服务。
由于EJB 2拥有无比健壮的特性,而且还考虑到远程访问等大量特性,所以导致EJB 2的开发有点复杂。因此导致许多开发者的批评,以致后来直接催生了Spring框架。
Spring框架实际上大量参考了EJB的设计理念,只是Spring摈弃了EJB开发中的3大烦琐之处:
- EJB组件的接口和类必须继承指定接口或类
- 需要大量使用XML配置文件
- EJB组件必须打包成JAR包
对开发者而言,Spring容器要求的Bean要简单的多,这些Bean无需实现任何接口或继承任何基类,无需单独为每个Bean类使用XML配置文件,无需打包成JAR文件。
组件支持
J2EE应用程序是由组件构成成的,其中组件是一个个拥有独立功能的软件单元,它们通过相关的类和文件组成J2EE的应用程序,并且与其他组件交互。
- 客户层组件:包括客户端应用程序(web浏览器),applets(独立应用程序)
- WEB层组件:包括JSP,servlet
- 业务层组件:EJB
技术支持
- JDBC
- EJB
- JSP
- Servlet
- xml
- JavaMail
- JMS
java环境
java环境主要涉及到jdk,jre,jvm三大部分,三者的关系是jvm属于jre的一部分,jre属于java的一部分。
jdk
jdk是java的开发工具包,是整个java开发的核心。包含了java程序运行环境jre,java基础类库java API,以及一些工具包,例如javac源码编译器以及一些命令。
jre
jre是java程序的运行环境,所有的java程序都必须依赖jre才能运行。jre包含jvm,但是只有jvm是不能完全解释字节码文件的,还需要一些核心类库。这些类库都存放在jre目录下的lib文件中。其中包含jvm和核心类库。
jvm
jvm就是java虚拟机,java虚拟机就是jvm,jvm就是执行java程序的虚拟计算机系统,主要是为了了解java程序的运行过程,jvm的特点就在于它的内存管理,学习原因是为了如果内存出了问题,出现了内存溢出,内存泄露怎么办。虽然平常开发不用考虑内存问题,但是如果出现了内存问题还是要明白如何解决。
标识符
标识符主要是给包,类,方法,变量起名字的符号。
组成规则:主要是由字母数字,下划线,美元符号组成。
命名规则
- 包名:全部小写,多级包用.隔开。com.lsj
- 类、接口:一个单词首字母大写,多个单词每个单词的首字母大写。Student,Car,HelloWorld
- 方法和变量:一个单词首字母小写,多个单词从第二个单词开始每个单词的首字母大写。age,maxAge,show(),getAge()。
- 常量:如果是一个单词,所有字母大写,如果是多个单词,所有单词大写,用下划线区分每个单词。DATE,MAX_AGE。
- 项目名:全部用小写字母,多个单词之间用横杆-分割。举例:demo,spring-boot
注意事项
- 不能以数字开头
- 不能是java中的关键字
- java标识符大小写敏感,但是长度无限制
- 标识符还不能包含空格
运算符
算数运算符
- +、-、*、/ 基本四则运算符
- % 取模,也就是取余数 5%2 = 1
- – 自减,有两种写法,a–或者–a,结果都等同于a=a-1,a–在程序执行后执行,–a在程序执行前执行
- ++ 自增
比较运算符
- <、>、>=、<= 基本比较运算符
- == 比较两个操作数是否相等,相等结果为true,否则为false
- != 比较两个操作数是否不等,相等结果为false,否则为true
逻辑运算符
- & 逻辑与,两边结果同为true结果为true
- && 短路与 只要又一遍结果为false,就停止执行,结果为false
- | 逻辑或,两边结果只要有一个为true,结果为true
- || 短路或,只要有一边结果为true,就停止执行,结果为true
- +,字符串连接
- ! 非,非真是假,非假是真
三目运算符
? :
1 ? 2 : 3
1的位置代表一个表达式,如果表达式的值为true ,则三目运算符的结果为2位置的值
赋值运算符
- = 简单的赋值运算符
- += -= *= /= 复合运算 a+=30 也就是 a=a+30