【javaEE知识总结】
一.servlet和CGI
1.什么是servlet?
- Servlet是server
Applet的简称,称服务端小程序,是基于语言编写的服务端程序,Web容器或应用服务器实现了Servlet的标准所以Servlet需要运行在Web容器和应用服务器中。Servlet主要功能在于能够在服务器中执行并生成数据。
2.什么是CGI? - CGI是一个公共网关接口是Web服务器运行时外部程序的规范。
CGI的缺点: - ①以进程方式运行 ,对每一个客户端的 请求都要启动一个进程来运行程序,导致用户数目增加时,服务器端资源被大量占用
- ②由于对操作系统和进程的不深刻理解,使得开发人员开发的CGI程序经常遇到莫名奇妙的错误。
- ③不同的 CGI不同的资源
3.对比CGI和Servlet - 对比一:当用户从浏览器发出一个http/CGI的请求时,或者说调用一个CGI程序的时候,服务器端就要新启动一个进程。这样会调用CGI程序越多,会消耗很多时间,对于用户来说这个时间很漫长,大大增加了用户对程序的不满,而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并不是新启动一个进程,而是在一个Web服务器的共享和分离线程,而线程最大的好处可以共享一个数据资源,是系统资源被有效利用 。
- 对比二:传统的CGI程序,不具备平台无关性特征,系统环境发生变化时,CGI程序就要瘫痪,而Servlet具备java的平台无关行,在系统开发过程中保持了系统的可扩展性,高效性
- 对比三:传统技术中,一般都分为两层的系统架构,即web服务器和数据库服务器,导致网站访问量大的时候,无法克服CGI程序与数据库建立链接时速度慢的瓶颈,从而死机,数据库死锁现象会频繁发生。
- 而Servlet是有连接池概念的,它可以利用多线程的优点,在系统缓存中实现建立好若干个资源与数据库连接。这样就会大大的提供效率,不会出现死机和数据库死锁的现象。
4.Servlet的作用
- ①获取用户提交的数据
- ②获取浏览器附加的信息
- ③处理数据(访问数据库或调用接口)
- ④给浏览器产生一个响应
- ⑤在响应值添加附加信息
二.Servlet的继承结构和生命周期
1描述Servlet的继承结构
2说明Servlet的生命周期,每个环节都会调动什么方法
- 当客户端浏览器第一次请求Servlet时,容器会实例化这个Servlet,然后调用一次init方法完成初始化创建,并在新的线程中执行service方法处理请求。Service方法执行完毕后容器不会销毁这个Servlet而是做缓存处理,当客户端浏览器再次请求这个servlet是容器会从缓存中直接找到这个servlet
对象,并再一次在新的线程中执行service方法。当容器在销毁时Servlet之前调用一次destroy方法完成销毁。
3 描述Servlet处理请求的过程 - 当浏览器基于get方式请求我们创建Servlet时,自定义Servlet中的doGet方法会被执行
。在service方法中通过request.getMethod()获取到请求方式进行判断如果是GET方式请求就执行doGet方法,如果是POST请求就会执行doPost方法。如果基于GET方式提交,并且在我们自定义的Servlet中又重写了httpServlet中的doGet方法,那么最终会根据Java的多态特性转而执行我们自定义的Servlet中的doGet方法。
三.GET请求和POST请求的区别?
- ①GET在浏览器回退时无害的,而POST会再次提交请求。
- ②GET产生的URL地址可以被标记,而POST不会。
- ③GET请求会被浏览器主动隐藏,而POST不会,除非手动设置 。
- ④GET请求只能进行URL编码,而POST支持多种编码格式。
- ⑤GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- ⑥GET请求在URL中传送的参数是有长度限制的,而POST则没有,对参数的数据类型GET只接受ASCII字符,而POST可以是字符也可以是字节。
- ⑦GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- ⑧GET参数通过URL传递,而POST放在请求主体中。
四.HttpServletRequest对象的生命周期
五.ServletContext对象
1.什么是ServletContext对象?
- ① 相对路径转绝对路径
- ② 获取容器的附加信息
- ③ 读取配置信息
- ④ 全局容器
六.请求转发和响应重定向
1.什么是请求装发和响应重定向? - 响应重定向:Servlet1收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问Servlet1中给的URL,即Servlet2的路径,然后Servlet2给客户端一个响应,整个过程中,客户端发出
两个请求,收到两个响应。
2.forward和include有什么差别? - Forward:forward指令用于将页面响应控制装发给另一个页面。
Include:它是一个动态指令,可以用于导入某个页面。
3.请求转发和响应重定向的异同?
七.路径问题
1.什么是相对路径?什么是绝对路径
- 绝对路径:以固定的某一个路径作为根路径,再以根路径为标准去定位其他资源的方式
2.页面上的相对路径和绝对路径分别是以谁为基准? - 绝对路径:以Web站点根目录为参考基础的目录路径。
3.页面上的base标签有什么作用? - Base标签为页面上的所有链接规定默认地址或默认路标。浏览器会从当前文档的URL中提取相应的元素来填写相对URL,构成完整的请求地址。
4.请求转发的相对路径基准是谁?绝对路径的跟路径是谁?
八.Cookie和HTTPSession对象
1.什么是Cookie?
- Cookie是保存少量信息至浏览器的一种技术,第一请求时,服务器回去响应给浏览器一些Cookie信息,第二次请求浏览器会携带之前的Cookie发送给服务器,通过这种机制可以实现在浏览器端保留一些用户信息,为服务端获取用户状态获取数据。
2.什么是HTTPSession - HTTPSession是一种保存少量信息至服务器端的一种技术,第一请求时,服务器会创建HTTPSession,我们可以在HTTPSession对象中保存一些关于用户的状态信息,并将HTTPSession的JSESSIONID以Cookie形式响应给浏览器,第二次请求,浏览器会携带之前的JSESSUOND的Cookie,发送给服务器,服务器会根据JSESSIONID获取对应的HTTPSession对象,通过这种技术可以解决http协议本身无法记录用户状态情况。
3.二者的作用?
九.关于域对象的使用
1.什么是域对象?常用的域对象有哪些?
- 域:即区域。域对象:镀锌作为存储数据的区域。
Java中的域对象就是在一定范围内,可以实现数据的存储和读取的一些对象,在某些特定的范围内能够实现数据共享的对象。
2.每个域对象的使用范围和声明周期是什么? - Application域 也叫应用域 对应 ServletContext对象
Request域得生命周期 - ①创建 没发生一次请求创建一个独立的请求域
- ②使用 service方法中或者请求转发有效
- ③销毁 请求结束,已经向浏览器响应数据
Session域 - ①创建 会话的产生,第一次发生请求,会话开始
- ②使用 本次会话之内,浏览器和服务器之间发生多次请求和响应有效
- ③销毁 会话结束,如:浏览器失去JSESSIONID,到达最大不活动时 间, 手动清除。
**Java服务端页面技术**
一.JSP的使用
1.什么是JSP?
- JSP是由sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的web网页,然后返回给请求者。
2 如何在JSP页面上编写JAVA代码?
3 JSP执行的原理是什么?- JSP看似HTML代码,看似是页面,实际是一种后台技术,当我们第一次发送请求一个JSP资源时,JSP加载引擎会帮助我们将一个JSP文件转换成一个点java文件,相当于自动给我们生成了一个Servlet并将页面上HTML代码编入到这个Servlet中,然后运行这个Servlet,将数据响应给浏览器JSP的本质其实就是一个Servlet,JSP文件相当于是我们向浏览器响应的HTML内容的模版。
4 JSP执行的过程是什么? - JSP的执行过程大致可以分为两个时期:转译时期和请求时期
5 描述JSP的继承结构?
二.JSP中的常用指令标签
1 什么是JSP指令标签?
- 指令标签是JSP页面上的一种特殊标签,JSP指令可以用来设置整个JSP页面相关的属性,如网页的编码方式,脚本语言,导包等。
2 JSP中的指令标签都有哪些?如何使用?
Page标签:
- 1)将jsp文件编译成Servlet java文件
- 2)服务器将java文件编译成class文件
- 3)服务器将数据返回到浏览器
Include标签:分为静态引入和动态引入 - [ ] 静态引入:被引入的JSP页面不会生成java代码被引入的网页
和当前页生成代码后形成了一个java文件
T
- aglib标签:JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的
集合。Taglib指令引入一个自定义标签集合的定义,包括库路径,自定义标签。
三.EL表达式的使用
1.什么是EL表达式?
- EL表达式是为了使JSP写起来更加简单,它提供了在JSP中简化表达式的方法,让JSP的代码更加简化。
2.EL表达式的底层原理是什么?使用它取出属性值时应该注意什么? - 总结:
EL表达式定义在JSP页面上,在转译之后的java文件中,会被转化成java代码。
EL表达式是一种后台技术,服务器上运行,不是在浏览器上运行,不能用于HTML页面
EL表达式底层是通过反射实现的,在获取对象属性值时是通过对象的get方法实现的
四.Jstl_el标准标签库
1.什么是JSTL?
- JSTL即JSP标准标签库是由JCP所制定的标准规范,它主要提供给java Web开发人员一个标准通用的标签库。
2.JSTL标签库有哪些组成部分? - JSTL标签库的组成部分
核心标签库:core,简称c
格式化标签库:format,简称fmt
函数标签库:function,简称fn
3.什么是MVC? - MVC是一种项目架构型模式,它本身并不引入新的功能,只能用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而得到
4.MVC模式有哪些优势? - ① 耦合性低:实现视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。
- ②重用性高:MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图共享一个模型。
- ③开发效率提高,人员职责明确:使用MVC模式使开发时间得到较大的 缩减,它使程序员集中精力与业务逻辑,界面程序员集中于表现形式上。
- ④耦合度低,可维护性高:分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
- ⑤有利软件工程化管理:由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
过滤器和监听器
一.过滤器
1 什么是过滤器?如何实现功能?
- 1在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
- 2在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
- 3 Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,doFilter方法中有一个filterChain对象,用于继续传递给下一个filter,在传递之前我们可以定义过滤请求的功能,在传递之后,我们可以定义过滤响应的功能
2 什么是过滤器链?为什么会有过滤器链的存在?
- 使用过滤器链的好处是我们可以将不同的过滤功能分散到多个过滤器中,分工明确,避免一个过滤器做太多的业务处理,降低了代码的耦合度,这体现了单一职责的设计原则,应用了责任链的代码设计模式.
二.监听器
1 什么是监听器?他们有哪些分类? - 类似于前端的事件绑定,java中的监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。
按监听的对象划分
a.ServletContext对象监听器
b.HttpSession对象监听器
c.ServletRequest对象监听器
按监听的事件划分
a.对象自身的创建和销毁的监听器
b.对象中属性的创建和消除的监听器
c.session中的某个对象的状态变化的监听器
2 每个监听器的API都是处理哪些事件的? - ServletRequestListener (处理request对象创建和销毁)
- ServleRequestAttributeListener (处理域对象中的数据添加 替换 删除)
- Session
- HttpSessionListener (处理session对象创建和销毁)
- HttpSessionAttributeListener 处理session域对象中的数据添加 修改 删除)
- HttpSessionBindingListener (处理session对象监听器绑定和解绑定接口)
- HttpSessionActivationListener (处理session对象钝化和活化状态接口)
- Application
- ServletContextListener (处理application对象创建和销毁)
- ServletContextAttributeListener (处理application域对象中的数据添加 修改 删除)
文件的上传和下载
一.分页
1.什么是分页?
- 简单来说:大量数据无法一次性全部显示在网页上?怎么办?只能选取其中的一部分,将大量数据分成好几段,每一段我们用一个网页显示,也就是一页,在页面上我们可以手动控制我们要选择的页面.分页就是将大量数据分成很多页显示的一种处理手段.
2.分页有什么好处? - ①通过分页,我们不用一次性将所有的数据查出来,只需先查出来一部分,可以减少数据库的IO数据量的传输,降低数据库读写压力,从而提高数据库响应速度
- ② 页面也不用一次性显示所有的数据,可以减少浏览器和服务器之间大量数据的IO传输,从而提高服务器的响应速度
- ③ 我们可能值需要很多信息中少数的几条,那么传输其他多余的数据就是无形之中对于资源的浪费,分页可以减少资源的浪费
Ajax
一.Ajax
1什么是同步交互和异步交互?二者优缺点是什么?
同步优点:
**同步缺点:**
- 1同步交互的不足之处,会给用户一种不连贯的体验,当服务器处理请求时,用户只能等待状态,页面中的显示内容只能是空白。
- 2因为已经跳转到新的页面,原本在页面上的信息无法保存,好多信息需要重新填写
异步优点: - 1前端用户操作和后台服务器运算可以同时进行,可以充分利用用户操作的间隔时间完成运算
- 2页面没有跳转,响应回来的数据直接就在原页面上,页面原有信息得以保留
异步缺点:
2什么是JSON?为什么要使用它
J
- SON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于
ECMAScript
(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON
成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
Json的优点: - 1轻量级,在这里用它不是为了厉害的功能代码,而是为了实现数据转换
- 2 Json 格式既能考虑到前端对象的特点同时也能兼顾后台对象信息的特点
- 3 Json 格式可以被前端直接识别并解析成对象
- 4 jQuery形式实现AJAX默认前后端传递数据的格式就是JSON
【MyBatis:优秀的持久层框架】
1.什么是Mybatis框架?
- Mybatis是基于java的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所以的JDBC代码和手动设置参数以及获取结果集。
2.Mybatis的作用? - 就是对JDBC的封装,实现java代码和sql语句之间的解耦。
3.Namespace的使用? - 这个属性中可以随意命名,但是必须填写要处理接口的全路径名。
4.#{}和${}的区别? - ①#{}是占位符,会对SQL进行预编译相当于?;${}是做sql语句的拼接,有SQL注入的隐患。
- ②#{}不需要关注数据类型,Mybatis自动实现数据类型转换,${}必须自己 判断数据类型。
5.JDBC的缺点? - 缺点:需要手动的完成面行对象的java语言、面向关系的数据库之间数据转换,代码繁琐无技术含量,影响了开发效率。
Mapper代理注意
1.接口和映射文件的名字必须一致
2.映射文件中的namespace必须是接口的全路径名
3.SQL语句的id必须是接口中的方法名
SQL语句的动态拼接使用和作用 - ①where作用:如果标签内容不为空字符串则自动添加where关键字,并且会自动去掉第一个条件前面的and或or。
- ②If 作用:每一个if相当于一个if单分支语句,一般添加一个where1=1的查询所有数据的条件,作为第一个条件。这样可以让后面每个if语句的SQL语句都以and开始
- ③Bind作用:主要用在 场合是模糊查询,通过bind通配符和查询值,可以避免使用数据库的具体语法来进行拼接。
- ④Set作用:set元素用在update语句中给字段赋值。借助if的配置,可以只对有具体值的字段进行更新。Set元素会自动帮助添加set关键字,自动去掉最后一个if语句的多余逗号。
- ⑤Foreach作用:允许你指定一个集合或者数据,声明集合项和索引变量。它也允许你指定开放和关闭的字符串,在迭代之间放置分割符。