一、什么是Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因为指针和多重继承使程序变得复杂,因此Java语言具有功能强大和简单易用两个特征。java按应用范围分为JavaSE、JavaEE、JavaME。
JavaSE:是Java的标准版,主要用于桌面应用程序开发。同时也是Java的基础。包含Java语言基础、JDBC操作、I/O流、网络通信、多线程等技术。JavaSE结构图如下:
JavaEE:是Java的企业版,主要用于开发企业级分布式网络程序。如电子商务系统,其核心为:EJB(企业Java组建模型)。结构图如下:
JavaME:Java ME主要应用于嵌入式系统开发。为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
二、Java语言特性:面向对象、分布性、可移植性、解释性、安全性、健壮性、多线程、高性能。
面向对象:java语言是一种纯面向对象的高级程序语言,提倡万物皆对象,在类外面不能定义单独的数据和函数,所有的元素都需要通过类和对象来访问。
分布性:Java分布性包括操作分布和数据分布。操作分布指在多个不同主机上布置相关操作。数据分布是将数据存放在多个不同的主机上。
可移植性:可以方便的移植到网络上的不同计算机。借助jvm虚拟机,可以一处编译,到处执行,具有与体系结构无关的特性。
解释性:运行Java需要解释器、任何移植了java解释器的计算机或其他设备都可以都可以用java字节码进行解释执行。字节码独立于平台
安全性:Java语言抛去了危险的指针和内存释放等语言,避免非法操作内存,给系统带来危害。
健壮性:Java将检查程序在编译和运行时的错误、并消除错误。类型检查能帮助瀛湖检查出许多在早期开发出现的错误。
多线程:多线程机制能够使应用程序在同一时间并执行多项任务。而且相应的同步机制可以保证不同线程能够正确的共享数据。使用多线程可以更好的带来交互能力和实时行为。
高性能:Java编译后的字节码实在解释器中运行的、所以他的速度较多数交互式应用程序提高了很多。另外字节码可以在程序运行时被翻译为特定平台的机器指令,从而进一步提高运行速度。
三、Java EE SDK 与 JDK的区别:
Oracle官网有JavaSE JDK,有Java EE SDK,那么它们有什么区别呢?
SDK(Software Development Kit)软件开发工具包,是一个相当广泛的名词,可以这么说辅助开发某一类软件的相关文档,范例和工具的集合都可以叫做“SDK”。SDK是一系列文件的组合,它为软件的开发提供了一个平台。
JDK(Java Development Kit)Java 开发工具包,是针对Java开发的产品。JDK是SDK的一个子集,因为它是开发java程序的一个平台,开发其他程序的SDK可以没有JDK。比如你下载了一个软件平台eclipse-SDK-3.2.2-win32.zip,它本身里面是没有JDK的。但是只要开发Java程序就必须使用JDK(Java EE和Java SE)。
四.JDK 与 JRE 的区别:
JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
JDK(Java Development Kit)又称J2SDK(Java2 Software Development Kit),是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK,那么你不仅可以开发Java程序,也同时拥有了运行Java程序的平台。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库 (rt.jar)。
五、JSP(Java Server Pages)
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
JSP可以使用Servlet提供的API,一般和JavaBean结合使用,从而将界面表现和业务逻辑分离。
六、XML(Extensible Markup Language)可扩展标记语言
XML是一种用于标记电子文件使其具有结构性的标记语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的,但是它和Java有着相同的目标,即平台独立性。通过Java和XML的组合,可以得到一个完美的具有平台独立性的解决方案。
七、tomcat
1.Tomcat的缺省端口是多少(8080),怎么修改
(1)找到Tomcat目录下的conf文件夹
(2)进入conf文件夹里面找到server.xml文件
(3)打开server.xml文件
(4)在server.xml文件里面找到下列信息
(1)把port=”8080″改成port=”8888″,并且保存
(2)启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/
2.Tomcat有几种部署方式
-
直接把Web项目放在webapps下,Tomcat会自动将其部署
-
在server.xml文件上配置
<Context>
节点,设置相关的属性即可 -
通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置。
部署方式第二点:
-
在其他盘符下创建一个web站点目录,并创建WEB-INF目录和一个html文件。
-
找到Tomcat目录下/conf/server.xml文件
-
在server.xml中的节点下添加如下代码。path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径
<Context path="/web1" docBase="D:\web1"/>
-
访问配置好的web站点
部署方式第三点:
-
进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。
-
xml文件的代码如下,docBase是你web站点的绝对路径
-
访问web站点下的html资源
八、Servlet
Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
1.生命周期:
Servlet生命周期可分为5个步骤
-
加载Servlet。当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例
-
初始化。当Servlet被实例化后,Tomcat会调用init()方法初始化这个对象
-
处理服务。当浏览器访问Servlet的时候,Servlet 会调用service()方法处理请求
-
销毁。当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用destroy()方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁
-
卸载。当Servlet调用完destroy()方法后,等待垃圾回收。如果有需要再次使用这个Servlet,会重新调用init()方法进行初始化操作。
-
简单总结:只要访问Servlet,service()就会被调用。init()只有第一次访问Servlet的时候才会被调用。destroy()只有在Tomcat关闭的时候才会被调用。
2.get方式和post方式有何区别
数据携带上:
-
GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
-
POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。
请求参数的位置上:
-
GET方式:请求参数放在URL地址后面,以?的方式来进行拼接
-
POST方式:请求参数放在HTTP请求包中
用途上:
-
GET方式一般用来获取数据
-
POST方式一般用来提交数据
-
首先是因为GET方式携带的数据量比较小,无法带过去很大的数量
-
POST方式提交的参数后台更加容易解析(使用POST方式提交的中文数据,后台也更加容易解决)
-
GET方式比POST方式要快 GET方式比POST方式要快,
-
详情可看:https://www.cnblogs.com/strayling/p/3580048.html
-
3.Servlet相关 API
(1)doGet与doPost方法的两个参数是什么
HttpServletRequest:封装了与请求相关的信息
HttpServletResponse:封装了与响应相关的信息
(2)获取页面的元素的值有几种方式,分别说一下
-
request.getParameter() 返回客户端的请求参数的值
-
request.getParameterNames() 返回所有可用属性名的枚举
-
request.getParameterValues() 返回包含参数的所有值的数组
(3)request.getAttribute()和request.getParameter()区别
用途上:
-
request.getAttribute(), 一般用于获取request域对象的数据(在跳转之前把数据使用setAttribute来放到request对象上)
-
request.getParameter(), 一般用于获取客户端提交的参数
存储数据上:
-
request.getAttribute()可以获取Objcet对象
-
request.getParameter()只能获取字符串(这也是为什么它一般用于获取客户端提交的参数)
(4)转发(forward)和重定向(redirect)的区别
1.实际发生位置不同,地址栏不同
-
转发是发生在服务器的
-
转发是由服务器进行跳转的,在转发的时候,浏览器的地址栏是没有发生变化的,在我访问Servlet111的时候,即使跳转到了Servlet222的页面,浏览器的地址还是Servlet111的。也就是说浏览器是不知道该跳转的动作,转发是对浏览器透明的。实现转发只是一次的http请求,一次转发中request和response对象都是同一个。这也解释了,为什么可以使用request作为域对象进行Servlet之间的通讯。
-
-
重定向是发生在浏览器的
-
- 重定向是由浏览器进行跳转的,进行重定向跳转的时候,浏览器的地址会发生变化的。曾经介绍过:实现重定向的原理是由response的状态码和Location头组合而实现的。这是由浏览器进行的页面跳转实现重定向会发出两个http请求,request域对象是无效的,因为它不是同一个request对象
2.用法不同:
-
很多人都搞不清楚转发和重定向的时候,资源地址究竟怎么写。有的时候要把应用名写上,有的时候不用把应用名写上。很容易把人搞晕。记住一个原则: 给服务器用的直接从资源名开始写,给浏览器用的要把应用名写上
-
request.getRequestDispatcher("/资源名 URI").forward(request,response)
-
转发时"/"代表的是本应用程序的根目录【zhongfucheng】 - response.send("/web应用/资源名 URI"); - 重定向时"/"代表的是webapps目录
-
-
能够去往的URL的范围不一样:
-
转发是服务器跳转只能去往当前web应用的资源
-
重定向是服务器跳转,可以去往任何的资源
-
-
传递数据的类型不同
-
转发的request对象可以传递各种类型的数据,包括对象
-
重定向只能传递字符串
-
-
跳转的时间不同
-
转发时:执行到跳转语句时就会立刻跳转
-
重定向:整个页面执行完之后才执行跳转
-
那么转发(forward)和重定向(redirect)使用哪一个?
-
根据上面说明了转发和重定向的区别也可以很容易概括出来。转发是带着转发前的请求的参数的。重定向是新的请求。
典型的应用场景:
-
转发: 访问 Servlet 处理业务逻辑,然后 forward 到 jsp 显示处理结果,浏览器里 URL 不变
-
重定向: 提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,浏览器里 URL 变了