Java基础知识

一、什么是Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因为指针和多重继承使程序变得复杂,因此Java语言具有功能强大和简单易用两个特征。java按应用范围分为JavaSE、JavaEE、JavaME。

    JavaSE:是Java的标准版,主要用于桌面应用程序开发。同时也是Java的基础。包含Java语言基础、JDBC操作、I/O流、网络通信、多线程等技术。JavaSE结构图如下:

515c68836b81cf79fdfa06c7eb43a34326d.jpg

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文件里面找到下列信息

264daaa82972a7d3426bcc49e807b90d8cf.jpg

(1)把port=”8080″改成port=”8888″,并且保存

(2)启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/

1551343069412922.png

2.Tomcat有几种部署方式

  1. 直接把Web项目放在webapps下,Tomcat会自动将其部署

  2. 在server.xml文件上配置 <Context>节点,设置相关的属性即可

  3. 通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置。

部署方式第二点

  • 在其他盘符下创建一个web站点目录,并创建WEB-INF目录和一个html文件。

1551343069681027.png

  • 找到Tomcat目录下/conf/server.xml文件

3af6e6b6cc5f16cec2aca5985219906fdc9.jpg

  • 在server.xml中的节点下添加如下代码。path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径

        <Context path="/web1" docBase="D:\web1"/>

1551343069531210.jpg

  • 访问配置好的web站点

1551343070348916.png

部署方式第三点:

  • 进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。 

     

  • 1551343070249116.png

  •  

    xml文件的代码如下,docBase是你web站点的绝对路径

     

Tomcat+Servlet面试题都在这里(修订版).png

  • 访问web站点下的html资源

1551343070333841.jpg

八、Servlet

  Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML

1.生命周期:

Servlet生命周期可分为5个步骤

  1. 加载Servlet。当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例

  2. 初始化。当Servlet被实例化后,Tomcat会调用init()方法初始化这个对象

  3. 处理服务。当浏览器访问Servlet的时候,Servlet 会调用service()方法处理请求

  4. 销毁。当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用destroy()方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁

  5. 卸载。当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)获取页面的元素的值有几种方式,分别说一下

  1. request.getParameter() 返回客户端的请求参数的值

  2. request.getParameterNames() 返回所有可用属性名的枚举

  3. 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)使用哪一个?

  • 根据上面说明了转发和重定向的区别也可以很容易概括出来。转发是带着转发前的请求的参数的。重定向是新的请求

典型的应用场景:

  1. 转发: 访问 Servlet 处理业务逻辑,然后 forward 到 jsp 显示处理结果,浏览器里 URL 不变

  2. 重定向: 提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,浏览器里 URL 变了

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3848699/blog/3018979

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值