1、名词解释(20分) 5分一个
2、选择题(20分) 2分一个
3、填空题(30分) 2分一个
4、论述题(30分) 10分一个
1、Web概念知识点
2、前端(Html、CSS 少量JS)
3、后端(JSP、Servlet、JDBC、Spring MVC封装的内容、SSM)
4、SQL(JDBC的步骤、语句)
5、论述题:讲解优缺点、体系结构、原理
Web:
Web在计算机网页开发设计中就是网页的意思。网页是网站中的一个页面,通常是HTML格式的。网页可以展示文字、图片、媒体等,需要通过浏览器阅读。
Web是分布在全世界的、基于HTTP通信协议的、存储在web服务器中的所有互相链接的超文本集。
Web工作原理:
Web应用程序分为两种,静态网站和动态网站:
- 静态网站主要用HTML编写,用户使用浏览器通过HTTP请求服务器上的Web页面,服务器接收请求处理后,再发送给客户端浏览器显示给用户;
- 动态网站为满足线上业务,更多的内容需要根据用户的请求动态生成页面信息;
- 动态网站通常使用HTML和动态脚本语言(JSP、ASP或PHP)编写,并将编写后的程序部署到Web服务器上,由Web服务器对动态脚本代码进行处理,并转化为浏览器可以解析的HTML代码,返回给客户端浏览器;
体系结构:
1、C/S体系结构
概念(名词解释):C/S即客户端/服务器结构,服务器常采用高性能的PC或工作站,并采用大型数据库系统(Oracle或SQL Server)。客户端需要安装专用的客户端软件。(在2000年前,C/S结构占据网络程序开放领域的主流)
2、B/S体系结构
概念(名词解释):B/S即浏览器/服务器结构,客户端不需要开发任何用户界面,而统一采用浏览器,通过Web浏览器向Web服务器发送请求。由Web服务器进行处理,并将处理结果逐级传回客户端。这种结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,从而节约了开发成本,是一种全新的软件体系结构。这种体系结构已经成为当今应用软件的首选体系结构。
3、体系结构的比较(优缺点)
(1)开发和维护成本方面
① C/S结构的开发和维护成本都比B/S高。
② 采用C/S结构对于不同客户端需要开发不同的程序,而且软件的安装、调试和升级均要在所有的客户机上进行。
③ B/S结构则不必在客户端进行安装及维护,系统维护员只需要将服务器的软件升级到最新版本,对于其他客户端,只需要重新登录系统就可以使用最新版本的软件了。
(2)客户端负载
① C/S的客户端不仅负责与用于交互、收集用户信息,而且还需要完成通过网络向服务器请求对数据库信息进行处理工作。
② C/S的应用程序功能越复杂,客户端程序也就越庞大,对软件维护工作带来很大的困难。
③ B/S结构的客户端把事务处理逻辑部分交给服务器,由服务器进行处理,客户端只需要进行显示。
④ 但应用程序服务器的运行数据负荷较重,一旦服务器发生“崩溃” 等问题,后果就不堪设想。(为此单位都有数据库存储服务器)
(3)安全性
① C/S结构适用于专人使用的系统,可以通过严格的管理派发软件,达到保证系统安全的目的。为此安全性比较高
② B/S结构使用的人数较多,且不固定,相对安全性低一些。
发展历程:
- 静态文档阶段;
- 动态网页阶段;
- Web 2.0阶段;
开发技术:
- 客户端应用的技术:
- HTML;
- CSS;
- Flash;
- 客户端脚本技术;
- 服务器端应用的技术:
- CGI;
- ASP;
- PHP;
- ASP.NET;
- JSP;
HTML:
HTML是一种超文本语言,在因特网上常见的网页制作标注性语言,HTML是通过浏览器翻译,将网页中的内容呈现给用户。
HTML文档结构(看书)
# 如何做到表单的提交?
通过在form标签下设置表单相关标签的name属性,再通过用户输入或者选择自动的给标签设置value属性,在用户点击提交按钮或者用Ajax的方式提交数据时,将数据以key=value&key=value...的形式传到服务器端。
HTML5的新特性:
- 语义元素多;
- 表单控件多;
- 更强大的多媒体支持;
- 更强大的图像支持;
- 更强大的API;
CSS:
CSS(层叠样式表)是W3C协会为弥补HTML在显示属性设定上的不足而制定的一套扩展样式标准。
CSS选择器:
1、标记选择器
格式:标签名 {}
2、类选择器
格式:.类名{}
3、ID选择器
格式:#ID{}
4、伪类选择器
格式:选择器:伪类
active:激活的元素(鼠标点击时)
hover:鼠标移入
visited:链接地址已被访问
link:有链接属性时
鼠标未移入a标签链接时:link
鼠标移入a标签链接时:link、hover
点击a标签链接时:link、hover、active
点击后未移入a标签连接时:link、visited
点击后移入a标签连接时:link、visited、hover
点击后再次点击a标签连接时:link、visited、hover、active
5、全局选择器
格式:*{}
Display:
HTML提供丰富的标签,这些标签被定义成不同的类型,一般分为块标签和行内标签:
1、块标签:以区域块方式出现。每个块标签独自占据一整行或多整行;
常见的块元素:
、
、等;
2、行内元素:不必在新的一行开始,同时也不强迫其他元素在新的一行显示;
常见的行内元素:、等;
常见属性值:
1、inline:此元素将显示为行内元素(行内元素默认的display属性值)
2、block:此元素将显示块元素(块元素默认的display属性值)
3、none:此元素将被隐藏,不显示,也不占用页面空间
4、flex:弹性布局 设为 flex 布局以后,子元素的float、clear和vertical-align属性将失效。
(1)flex-direction:主轴方向
- row(默认值):主轴为水平方向,起点在左端;
- row-reverse:主轴为水平方向,起点在右端;
- column:主轴为垂直方向,起点在上沿;
- column-reverse:主轴为垂直方向,起点在下沿;
(2)justify-content:
- flex-start(默认值):与main start对齐 左对齐;
- flex-end:与main end对齐 右对齐;
- center:居中;
- space-between:flex items 之间的距离相等,与main start、main end两端对齐;
- space-evenly: flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离;
- space-around :flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离的一半
(3)align-items:决定多行flex items 在cross axis的对齐方式,用法与
justify-content相似 一个是横轴。一个控制竖轴
- stretch(默认值):与align-items的stretch类似,当items有高度的时候,无效果;
- flex-start:与cross start 对齐;
- flex-end :与cross end 对齐;
- center:居中对齐;
- space-between:flex items 之间的距离相等,与cross start、cross end两端对齐;
- space-evenly: flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离;
- space-around :flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离的一半
(4)flex-wrap:flex-flow 是flex-direction与flex-wrap的简写,当你使用
这个属性的时候,你可以使用上述两个的属性值。
e.g:flex-flow: row wrap;(水平排列,多行显示)
(5)align-content:定义多根轴的对齐方式,只有flex-wrap:wrap时才有效。
CSS的引用方式:
1、行内样式
示例:ss273
2、内部样式(内嵌式样式表)
示例:
body{
background-color:#ddd;
}
3、外部样式(链接式样式表)
示例:
@import url("http://www.taobao.com/home/css/global/v2.0.css?t=20070518.css");
JavaScript:
概念(名词解释):JavaScript是一种基于对象和事件驱动并具有安全和性能的解释性脚本语言,在Web应用中得到了非常广泛的应用。它不需要进行编译,而是直接嵌入在HTTP页面中。JS常用来进行数据验证、控制浏览器以及生成时钟、日历和时间戳文档等。
特点(论述题):
1、解释性
JS是一种脚本语言,采用小程序段的方式实现编程,不需要编译。
2、基于对象
JS是一种基于对象的语言,它可以应用创建的对象,有许多功能可以来自脚本环境中的对象方法与脚本的相互作用。
3、事件驱动
JS可以以事件驱动的方式直接对客户端的输入做出响应,无须经过服务器端程序。
4、安全性
JS具有安全性,它不允许访问本地硬盘、不能将数据写入服务器中、不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互,能有效地防止数据丢失。
5、跨平台
JS依赖浏览器本身,与操作系统无关,只要浏览器支持JS,JS的程序就能正常运行。
JavaScript和Java的区别(论述题):
JavaScript与Java除了语法有一些相似之外,两者毫不相关。
1、基于对象和面向对象
(1)JS是一种基于对象和事件驱动的脚本语言,它本身提供了非常丰富的内部对象供设计人员使用;
(2)Java是一种真正的面向对象的语言,即使是开发简单程序,也必须设计对象。
2、解释和编译
(1)JS是一种解释型编程语言,其源代码不需要经过编译,而是将文本格式的字符代码发送到客户端由浏览器解释运行;
(2)Java的源代码在传递到客户端执行之前,必须经过编译才可以执行。
3、弱变量和强变量
(1)JS采用弱变量,变量在使用前无须声明,解释器在运行时自动检查数据类型;
(2)Java使用强变量检查,即编译之前必须声明。
Ajax技术:
概念(名词解释):Ajax的意思是异步的JavaScript和XML,它是JS、XML、CSS、DOM等多种已有技术的组合,可以实现客户端的异步请求操作,进而不需要刷新页面的情况下与服务器进行通信,减少用户的等待时间,减轻服务器和带宽的负担,提供更好的服务响应。核心技术就是 XMLHttpRequest。
Ajax的开发模式
1、传统:传统的Web应用模式,每次触发HTTP请求服务器都会进行响应的处理后,返回一个HTML页面给客户端。
2、Ajax应用:页面的操作由Ajax引擎与服务器进行通信,然后将返回结果提交给客户端页面的Ajax应用,再由Ajax引擎决定将这些数据插入页面的指定位置。
Ajax的优点
- 减轻服务器的负担;
- 把部分服务器的负担和工作转移到客户端;
- 无刷新更新页面;
- 可以调用XML等外部数据,促进页面显示和数据的分离;
- 基于标准化并被广泛支持,不需要下载其他程序。
JSP:
概念:JSP(Java Server Pages)是由Sun公司倡导、许多公司参与而建立的动态网页技术标准。它在HTML代码中嵌入Java代码片段(Scriptlet)和JSP标签,构成了JSP网页。在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终页面效果。
JSP的技术特征:
- 跨平台;
- 业务代码分离;
- 组件重用;
- 继承Java Servlet功能;
- 预编译;
JSP的基本构成:
- 指令标签;
<%@ page conetntType="text/html;charset-UTF-8" language="java" %>
- page指令(可以修改JSP页面中的一些重要属性或行为):
- language属性:表示JSP翻译之后是什么语言文件(目前只支持Java);
- extends属性:设置JSP页面翻译出来的Java类默认继承谁;
- import属性:设置JSP导入的类包,与Java一致;
- pageEncoding属性:用于定义JSP文件的字符集(编码格式);
- contentType属性:用于设置JSP页面的MIME类型和字符编码;
- include指令(用于文件包含,可在JSP页面中包含另一个文件的内容):
<%@include file="文件名"%>
# 当前仅支持静态包含(不执行文件内包含的代码)
#i nclude指令包含的JSP页面中不要使用
标签,会破坏页面格式。3.taglib指令(用于指定页面中使用的标签库及自定义标签的前缀):
<%@taglib prefix="fix" uri="tagUriordir"%>
1、prefix属性:用于设置加载自定标签的前缀
2、uri属性:用于指定自定义标签的描述符文件位置;
2、HTML语句;
3、注释;
1、HTML注释:
HTML注释会被翻译到JSP文件对应的Java类的jspService方法中,以out.write()输出到客户端,write方法自动识别标签,执行标签对应的功能,不会在浏览器的页面上输出注释。
格式:
2、JSP注释:
JSP注释中的内容不会在JSP文件翻译后的Java类中出现,即注释中的内无任何功能。
格式:<%-- JSP注释 --%>
3、动态注释:
由于HTML注释对JSP嵌入的代码不起作用HTML注释和JSP注释的组合构成动态的HTML注释文本。
示例:
4、代码注释:
Java注释要写在声明脚本和代码脚本中才被认为是Java注释,会被翻译到JSP文件对应的Java类的jspService方法中,在对应的Java类中也是注释。
格式:(1)//单行注释;(2)/*多行注释*/;
4、嵌入Java代码;
1、代码片段(脚本段/脚本代码):
JSP页面中嵌入的Java代码,在页面请求的处理期间被执行,可通过JSP内置对象在页面输出内容、访问session会话、编写流程控制语句等。
格式:<% Java代码 %>
作用:在JSP页面中可以编写需要的Java代码。
特点:
- 代码脚本翻译后都在_jspService方法中,故代码脚本可以直接使用此方法参数中的对象;
- 可以由多个代码脚本块组合完成一个完整的Java语句;
- 代码脚本可以和表达式脚本一起组合使用,在JSP页面上输出数据;
2、声明:
在JSP页面定义全局的(整个JSP页面按都需要引用的)成员变量或方法,可被整个JSP页面访问,服务器执行时会将JSP页面转换为Servlet类,在该类中会把JSP声明脚本定义的变量和方法定义为类的成员。
格式:<%! 声明Java代码 %>
作用:可以给JSP翻译出来的Java类定义属性、方法、静态代码块、内部类等。
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中。示例:
声明全局变量:<%! long startTime=System.nanoTime(); %>
声明全局方法:<%! int Max(int a,int b){return a>b?a:b;} %>
3、表达式:
JSP表达式直接将Java的表达式最终结果(被转换为字符串类型)输出到JSP页面中。
格式:<%= 表达式 %>
作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)
特点:
- 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以直接使用_jspService()方法参数中的对象;
- 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上;
- 表达式脚本中的表达式不能以分号结束JSP动作标签;
示例:<%= 2*Math.PI %> 会把2π直接输出在页面上,类型为字符串;
Request对象:
Request对象代表了客户端的请求信息,主要用于接收通过HTTP传送到服务器端的数据(头信息、系统信息、请求方式及参数等)(相当于把请求给JSP,让其处理该请求)。
1、获取请求参数值;
在一个请求中可通过"?"的方式传递参数,再通过request对象的getParameter()方法获取参数的值。
示例:
String id = request.getParameter("id");
当通过超链接的形式发送请求时,可以为该请求传递参数,这可以通过在超链接后面加上"?"来实现。在delete.jsp页面中,可以通过request对象的getParameter()方法获取传递的参数值。
示例:
删除 <% request.getParameter("id"); %>
# 如果需要指定多个参数,参数间使用"&"分隔即可;如果指定参数不存在,将返回null,如果指定了参数名,而参数值未指定,返回空的字符串""。
2、获取Form表单信息;
对于文本元素、单选按钮、单选下拉列表框而言可以使用getParameter()方法来获取其具体的值;对于复选框及多选列表框被选定的内容而言可以使用getParameterValues()方法来获取其具体的值。方法返回一个字符串数组,通过循环遍历此数组可以得到用户选定的所有内容。
格式:
request.getParameterValues(String parameter);
3、获取请求客户端信息;
示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
获取客户端信息 客户端提交信息的方式:<%=request.getMethod()%>
使用的协议:<%=request.getProtocol()%>
获取发出请求字符串的客户端地址:<%=request.getRequestURI()%>
获取发出请求字符串的客户端地址:<%=request.getRequestURL()%>
获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%>
获取服务器端口号:<%=request.getServerPort()%>
获取服务器名称:<%=request.getServerName()%>
获取客户端主机名:<%=request.getRemoteHost()%>
获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%>
获得Http协议定义的文件头信息Host的值:<%=request.getHeader("host")%>
获得Http协议定义的文件头信息User-Agent的值:<%=request.getHeader("user-agent")%>
获得Http协议定义的文件头信息accept-language的值:<%=request.getHeader("accept-language")%>
获得请求文件的绝对路径:<%=request.getRealPath("requestGetMethod.jsp")%>
结果:
客户端提交信息的方式:GET
使用的协议:HTTP/1.1
获取发出请求字符串的客户端地址:/6/requestGetMethod.jsp
获取发出请求字符串的客户端地址:http://localhost:8080/6/requestGetMethod.jsp
获取提交数据的客户端IP地址:0:0:0:0:0:0:0:1
获取服务器端口号:8080
获取服务器名称:localhost
获取客户端主机名:0:0:0:0:0:0:0:1
获取客户端所请求的脚本文件的文件路径:/6/requestGetMethod.jsp
获得Http协议定义的文件头信息Host的值:localhost:8080
获得Http协议定义的文件头信息User-Agent的值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
获得Http协议定义的文件头信息accept-language的值:zh-CN,zh;q=0.9
获得请求文件的绝对路径:D:\after\Java\spring\20190122\out\artifacts\20190122_war_exploded\requestGetMethod.jsp
4、在作用域中管理属性;
在进行请求转发时,需要把一些数据传递到转发后的页面进行处理,这时就需要request对象的setAttribute()方法将数据保存到request范围内的变量中。
格式:
request.setAttribute(String name, Object object);
- name:变量名,在转发后的页面取数据时,通过这个变量名来获取数据;
- object:用于指定需要在request范围内传递的数据,为Object对象;
在将数据保存到request范围内的变量后,可以通过request的getAttribute()方法获取该变量的值。
格式:
request.getAttribute(String name);
示例:
request.setAttribute("date",new Date()); //添加一个属性
- 获取date属性:<%=request.getAttribute("date")%>
5、cookie管理;
cookie:小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。
通过cookie的getCookies()方法可以获取到所有的cookie对象的集合,通过cookie对象的getName()方法可以获取到指定名称的cookie,通过getValue()方法可以获取到cookie的值,另外将一个cookie对象发送到客户端,使用response对象的addCookie()方法。
Response对象:
response对象用于响应客户请求,主要将JSP容器处理过的对象传回到客户端。只在JSP页面内有效。
1、重定向网页;
通过使用sendRedirect()方法,将响应发送到另一个指定位置进行处理,可将地址重新定向到不同主机,在客户端浏览器上得到跳转地址并重新发送请求连接。重定向操作后,request中属性全部失效并重新进入一个新的request对象作用域。
2、处理HTTP文件头;
示例:
设置网页每5s自动刷新一次:
response.setHeader("refresh","5");
设置2s后自动跳转至指定页面:
response.setHeader("refresh","2;URL=welcome.jsp");
设置响应类型:
response.setContentType("text/html");
3、设置输出缓冲;
通常情况下,服务器要输出到客户端的内容会先写到一个输出缓冲区,在以下3种情况下才会把缓冲区的内容写到客户端:
- JSP页面的输出信息以及全部写到了缓冲区;
- 缓冲区已满;
- 在JSP页面中调用了flushbuffer()方法或out对象的flush()方法;
示例:
设置缓冲区大小为0,即不缓冲:
response.setBufferSize(0);
session对象:
session对象是由服务器为每个客户自动创建的与客户请求相关的对象,用于保护该用户的信息、跟踪用户的操作状态,内部使用Map类保存数据。
session是与请求有关的会话对象,是java.servlet.http.HttpSession对象,用于保存和存储页面的请求信息。
1、创建及获取session信息:
session对象的setAttribute()方法可实现将信息保存在session范围内,而通过getAttribute()方法可以获取保存在session范围内的信息。
格式:
setAttribute(String key, Object obj); getAttribute(String key);
- key:保存在session范围内的关键字;
- obj:保存在session范围内的对象;
示例:
String sessionMessage = "session练习"; session.setAttribute("message",sessionMessage); String message = (String)session.getAttribute("message"); out.print("保存在session范围内的值为:"+message);
2、从会话中移除指定的绑定对象:
格式:
removeAttribute(String key); //key:保存在session范围内的关键字;
3、销毁session:
格式:
session.invalidate();
4、会话超时的管理:
在session对象中提供了设置会话生命周期的方法,分别介绍如下:
- getLastAccessedTime():返回客户端最后一次与会话相关联的请求时间;
- getMaxInactiveInterval():返回一个会话内两个请求的最大时间间隔;
- setMaxInactiveInterval(int interval): 设置session有效时间;
application对象:
application对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。
1、访问应用程序初始化参数:
application对象访问应用程序初始化参数的方法分别介绍如下:
- getInitParameter(String name):返回一个已命名的参数;
- getAttributeNames():返回所有已定义的应用程序初始化名称的枚举;
示例:
url jdbc:mysql://localhost:3306/db_database15 name root <% String url = application.getInitParameter("url"); String name = application.getInitParameter("name"); String password = application.getInitParameter("password"); out.println("URL: "+url+" password 111
"); out.println("name: "+name+"
"); out.println("password: "+password+"
"); %>2、管理应用程序环境属性:
与session对象相同,也可以在application对象中设置属性。与session对象不同的是,session只是在当前客户的会话范围内有效,当超过保存时间,session对象就被收回;而application对象在整个应用区域中都有效。application对象管理应用程序环境属性的方法分别介绍如下(下述对象均为application对象):
- getAttributeNames():获得所有对象使用的属性名;
- getAttribute(String name):从对象中获取指定对象名;
- setAttribute(String key,Object obj):使用指定名称和指定对象在对象中进行关联;
- removeAttribute(String name):从对象中去掉指定名称的属性;
JSP的四个作用域(从小到大)
- pageContext:作用范围是整个JSP页面(页面作用域);
- request:作用范围是整个请求链(请求作用域);
- session:作用范围是一次会话(会话作用域);
- application:作用范围是整个项目/Web应用(项目作用域);
# EL表达式查找作用域的值时,范围默认从小到大查找
示例1:在当前页中
pageContext.setAttribute("aa", "11");
request.setAttribute("bb", "22");
session.setAttribute("cc", "33");
application.setAttribute("dd", "44");
可以获取到值
${aa}
${bb}
${cc}
${dd}结论:在同一个页面中,所有的作用域的值都能获取
示例2:进行请求转发
pageContext作用域中的值获取不到,其它作用域仍然可以;
示例3:先访问scope.jsp,再次访问sc2.jsp,进行了两次请求。
pageContext和request中的数据都获取不到;
示例4:先访问scope.jsp,关闭浏览器,重新打开再次访问sc2.jsp
pageContext request session 都失效了;
示例5:先访问scope.jsp,关闭服务器,再次访问sc2.jsp
四个作用域都失效了;
session和cookie的区别:
- cookie可存储在浏览器/本地,session只存在于服务器;
- cookie只能存储String类对象,session可存储任意Java对象;
- cookie能通过拦截或本地文件找到后被攻击(有安全隐患),session更加安全;
- session占用服务器性能,session过多时会增加服务器压力;
- 单个cookie保存的数据不能超过4K,很多浏览器限制一个站点最多保存20个cookie,session没有大小限制和服务器要求;
如何运行JSP文件?
- 在Tomcat目录的bin下找到start.bat,运行Tomcat服务器并保持;
- 编写JSP代码文件并保存在Tomcat目录的Webapps中(新建一个目录如test);
- 在浏览器中输入http://127.0.0.1:8080/test/文件名.jsp即可运行;
# Tomcat的最大并发量为150。
JSP的优缺点:
优点:
- JSP代码跨平台(可移植);
- JSP组件跨平台(可重用);
- 支持多种网页格式;
- JSP标签有可扩充性;
- 健壮和安全;
缺点
- JSP技术增大了产品复杂性(部署难度高);;
- Java的高效执行占用大量内存和硬盘空间(硬件要求高);
- JSP程序调试困难(调试有难度);
JSP原理(步骤):
- 客户端发送请求;
- 服务器将执行结果发送至浏览器进行显示;
- 服务器执行此.class文件;
- JSP引擎将Servlet代码编译成.class文件;
- Web服务器的JSP引擎将JSP文件转换为Servlet文件(Java);
- 服务器加载对应JSP文件;
Servlet:
概念:Servlet是使用Java Servlet接口(API)运行在Web应用服务器上的Java程序。它可以通过HTTP通信协议,接受客户端发送过来的请求,并响应数据给客户端。
Servlet容器
Web容器,如Tomcat、Jboss、Resin、WebLogic等对Servlet进行控制。
Servlet技术特点(优点):
- 方便、实用的API方法;
- 高效的处理方式;
- 跨平台;
- 更加灵活、扩展;
- 安全性;
Servlet技术缺点:
- 每个Servlet都需要在web.xml中配置一次,如果Servlet较多时会导致web.xml配置过于繁多;’
- Servlet具有容器依赖性;
- 一个类只能写一个接口;
Servlet代码结构:
public void init() throws ServletException { }//初始化方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }//处理HTTP Get请求 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }//处理HTTP Post请求 public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }//处理HTTP Put请求 public void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }//处理HTTP Delete请求 public void destroy() { super.destroy(); }//销毁方法
Servlet API(生命周期)的四个阶段:
1、加载和实例化阶段:
通过调用构造方法,在第一次请求Servlet时创建Servlet的实例。
2、初始化阶段:
通过调用init()方法实现Servlet的初始化工作。在Servlet的整个生命周期内,它的init()方法只被调用一次。
3、运行阶段:
在Servlet的整个生命周期内,对于servlet的每一次访问请求,servlet容器都会调用一次servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象,也就是说,service()方法在Servlet的整个生命周期内会被调用多次。
4、销毁阶段:
当服务器关闭或Web应用被移出容器时,Servlet随着Web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期内,destroy()方法也只被调用一次。
Servlet与JSP的区别:
- Servlet承担客户请求与业务处理的中间角色,需要调用固定的方法,将动态内容混合到静态之中产生HTML;而在JSP页面中,可直接使用HTML标签进行输出,要比Servlet更具显示层的意义;
- Servlet中需要调用Servlet API接口处理HTTP请求,而在JSP页面中,则直接提供了内置对象进行处理;
- Servlet的使用需要进行一定的配置,而JSP文件通过“.jsp”扩展名部署在容器之中,容器对其自动识别,直接编译成Servlet进行处理;
Servlet配置:
1、声明Servlet对象:
格式:
SimpleServlet com.lyq.SimpleServlet
:指定Servlet的名称(可自定义) :指定Servlet对象的完整位置(包括包名与类名) 2、映射Servlet;
格式:
SimpleServlet /SimpleServlet
:指定Servlet的名称(与声明时的名称对应); :映射访问URL(可自定义); Servlet接口:
编写Servlet程序的步骤:
1、编写一个类实现servlet接口;
public class MyFirstServlrt implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("Servlet正在初始化"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //专门向客服端提供响应的方法 System.out.println("Servlet正在提供服务"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("Servlet正在销毁"); } }
2、实现service方法,处理请求,并响应数据;
3、在web.xml中去配置servlet程序的访问地址(见Servlet配置);
Servlet过滤器是客户端与目标资源间的中间层组件,用于拦截客户端的请求与响应信息。
ServletContext接口的三个主要作用:
- 获取Web应用程序的初始化参数;
- 实现多个Servlet对象共享数据;
- 读取Web应用下的资源文件;
Servlet规范(三个技术点):
- servlet技术;
- listener技术——监听器;
- filter技术——过滤器;
Servlet的系列接口及方法:
1、Servlet接口
(1)作用:Servlet容器,调用继承Servlet接口的对象进行处理,为此任意一个Servlet对象都要直接、间接实现javax.servlet.Servlet接口。
(2)方法(见上文)。
2、 ServletConfig接口
(1)作用:封装了Servlet的配置信息、在Servlet初始化期间被传递使用,每个Servlet有且仅有一个。
(2)方法:基本和Application一致(因为功能相似)
3、HttpServletRequest接口
作用:和Request对象一致。
4、HttpServletResponse接口
作用:和Response对象一致。
5、GenericServlet类
抽象类继承了实现了Servlet接口和ServletConfig接口,只需要完成service()方法
6、HttpServlet类
抽象类实现了service()方法,同时针对HTTP协议开放了doGet()方法、doPost()方法、doPut()方法、doDelete()方法、doHead()方法、doTrace()方法、doOptions()方法,并且简单完成了doTrace()、doOptions()方法,应对http不同请求,使用其他方法。
JDBC:
概念:JDBC(Java DataBase Connectivity)是一套面向对象的应用程序接口(API),制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。
通常情况下使用JDBC完成以下操作:
- 同数据库建立连接;
- 向数据库发送SQL语句;
- 处理从数据库返回的结果。
JDBC的优缺点:
1、优点:
- 便于软件开发人员理解;
- 使软件开发人员从复杂驱动编写工作中解脱,专注于业务逻辑开发;
- 支持多种关系型数据库,增加软件的可移植性;
- 其API面向对象,软件开发人员将常用方法二次封装,提高代码复用性;
2、缺点:
- 访问数据库时会影响速度;
- 访问数据库依然是面向关系的;
- 向不同厂家的产品提供支持对数据源带来
影响;Connection conn = DriverManager.getConnection(url, username, password);
JDBC的实现步骤:
1、加载并注册数据库驱动;
Class.forName("com.mysql.jdbc.Driver"); //方法1 Driver driver = new com.mysql.jdbc.Driver(); //方法2 DriverManager.registerDriver(driver); DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //方法3
2、通过DriverManager获取数据库连接;
Connection conn = DriverManager.getConnection(url, username, password);
3、通过Connection对象获取Statement对象;
Statement stmt = conn.createStatement(); PrepareStatement pstmt = conn.prepareStatement(sql);
# sql语句中用”?”传递参数,并用pstmt.setString(index, value)设置。
4、使用Statement执行SQL语句;
String sql = "……"; int count = stmt.executeUpdate(sql); //执行静态insert、update或delete语句并返回同步更新记录条数的int值
5、处理返回结果(见上文);
6、关闭连接,释放资源;
stmt.close(); conn.close(); //如果执行查询SQL语句,还需要创建ResultSet对象接收返回结果并处理: ResultSet rs = stmt.executeQuery(sql); …… while(rs.next()) { xxx xxx = rs.getXxx(columnIndex); …… }; …… rs.close(); stmt.close(); conn.close();
JDBC API主要功能:
通过以下的类/接口实现:
- DriverManager:管理JDBC驱动;
- Connection:连接(通过DriverManager产生);
- Statement(PreparedStatement):增、删、改、查(通过Connection产生);
- CallableStatement:调用数据库的存储过程/存储函数(通过Connection产生);
- Result:返回的结果集(Statement, PreparedStatement产生);
Spring MVC:
概念:Spring MVC是Spring提供的强大灵活的Web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:① 处理器映射:选择使用哪个控制器来处理请求;② 视图解析器:选择结果应该如何渲染。通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。
MVC设计模式(书上有)
Spring MVC的体系结构:
- HTTP请求:客户端请求提交到DispatcherServlet;
- HTTP响应:视图负责将结果显示到客户端;
- 将模型数据传给View显示;
- 处理视图映射:DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图;
- 得到处理结果:Controller返回结果为ModelAndView;
- 调用业务处理业务:Controller调用服务层方法处理业务逻辑;
- 调用处理器:DispatcherServlet将请求提交到Controller;
- 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller;
Spring MVC封装内容:
Spring封装的内容为Servlet。
SpringMVC配置(课本P161)
SSM:
相关概念:
1、Spring:
Spring是一个轻量级的开源Java 开发框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2、Spring MVC:
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3、MyBatis:
MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
4、SSM:
SSM是Spring、Spring MVC和MyBatis的整合,是标准的MVC模式。SSM框架使用Spring实现业务对象管理,使用Spring MVC负责请求转发和视图管理,使用MyBatis作为数据对象的持久化引擎。
SSM框架的作用:
SSM框架由Spring、Spring MVC和MyBatis组成:
- Spring框架的主要作用是创建和管理对象;
- SpringMVC主要解决了View-Controller交互的问题;
- 简化数据库编程,只要指定每项数据操作时的SQL语句及对应的抽象方法即可。
SSM框架的分层:
标准的SSM框架有四层,分别是DAO层,Service层,Controller层和View层。
1、持久层(DAO层[mapper]层):
作用:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。
流程:
- DAO层首先设计接口,然后在Spring的配置文件中定义接口的实现类;
- 之后在模块中进行接口的调用来进行数据业务的处理。(不在关心接口的实现类是哪个类);
- 数据源的配置以及有关数据库连接的参数都在Spring的配置文件中进行配置。
2、业务层(Service层):
作用:Service层主要负责业务模块的逻辑应用设计。
流程:
- 先设计接口然后再设计实类,然后在Spring的配置文件中配置其实现的关联。(业务逻辑层的实现具体要调用到自己已经定义好的DAO的接口上)这样就可以在应用中调用Service接口来进行业务处理;
- 建立好DAO之后再建立Service层,Service层又要在Controller层之下,因为既要调用DAO层的接口又要提供接口给Controller层。每个模型都有一个Service接口,每个接口分别封装各自的业务处理的方法。
3、控制层(Controller层[Handler层]):
作用:负责具体的业务模块流程的控制。
流程:
- 配置也同样是在Spring的配置文件里面进行,调用Service层提供的接口来控制业务流程;
- 业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块。
4、视图层(View层):
作用:主要和控制层紧密结合,主要负责前台JSP页面的表示。
四、名词解释:
Web概念:
Web在计算机网页开发设计中就是网页的意思。网页是网站中的一个页面,通常是HTML格式的。网页可以展示文字、图片、媒体等,需要通过浏览器阅读。
Web是分布在全世界的、基于HTTP通信协议的、存储在web服务器中的所有互相链接的超文本集。
C/S:
C/S即客户端/服务器结构,服务器常采用高性能的PC或工作站,并采用大型数据库系统(Oracle或SQL Server)。客户端需要安装专用的客户端软件。
B/S:
B/S即浏览器/服务器结构,客户端不需要开发任何用户界面,而统一采用浏览器,通过Web浏览器向Web服务器发送请求。由Web服务器进行处理,并将处理结果逐级传回客户端。这种结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,从而节约了开发成本,已经成为当今应用软件的全新的首选体系结构。
HTML:
HTML是一种超文本标记语言,在因特网上常见的网页制作标注性语言,HTML是通过浏览器翻译,将网页中的内容呈现给用户(HTML5是最新标准)。
CSS:
CSS(层叠样式表)样式是HTML的扩展,是为弥补HTML在显示属性设定上的不足而制定的一套扩展样式标准,可把页面显示样式与显示内容分开(CSS3是最新标准)。
JS:
JavaScript是一种基于对象和事件驱动并具有安全和性能的解释性脚本语言,在Web应用中得到了非常广泛的应用。它不需要进行编译,而是直接嵌入在HTTP页面中。JS常用来进行数据验证、控制浏览器以及生成时钟、日历和时间戳文档等。
HTTP:
HTTP是超文本传输协议,是专门为Web设计的一种网络通信协议。
DOM:
DOM是文档对象模型,是处理可扩展置标语言的标准编程接口。
MIME:
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
XML:
XML是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
Ajax:
Ajax(局部刷新)是异步(不确定执行时间与顺序)的JavaScript和XML,它是JS、XML、CSS、DOM等多种已有技术的组合,可以实现客户端的异步请求操作,进而不需要刷新页面的情况下与服务器进行通信,减少用户的等待时间,减轻服务器和带宽的负担,提供更好的服务响应。核心技术就是 XMLHttpRequest。
JSP:
JSP是由Sun公司倡导、许多公司参与而建立的动态网页技术标准。它在HTML代码中嵌入Java代码片段和JSP标签,构成了JSP网页。在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终页面效果。
Servlet:
Servlet是使用Java Servlet接口(API)运行在Web应用服务器上的Java程序。它可以通过HTTP通信协议,接受客户端发送过来的请求,并响应数据给客户端。
Tomcat:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
JDBC:
JDBC是一套面向对象的应用程序接口(API),制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。
JavaBean:
JavaBean是Java Web程序的重要组成部分,是一个可以重复使用的软件组件,是一个遵循特定写法的Java类,它封装了数据和业务逻辑,供JSP或Servlet调用,完成数据封装和数据处理功能。
Filter:
Filter是客户端目标资源间的中间层组件,用于拦截客户端的请求与响应信息。
MVC:
MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(Controller)的方法把业务逻辑、数据与界面显示分离,把众多的业务逻辑聚集到一个部件里面。
Spring MVC:
Spring MVC是Spring提供的强大灵活的Web框架,主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。它的两个核心是:① 处理器映射:选择使用哪个控制器来处理请求;② 视图解析器:选择结果应该如何渲染。通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。
SSM:
SSM是Spring、Spring MVC和MyBatis的整合,是标准的MVC模式。SSM框架使用Spring实现业务对象管理,使用Spring MVC负责请求转发和视图管理,使用MyBatis作为数据对象的持久化引擎。
DAO层(mapper)属于O/R Mapping技术的一种,主要是做数据持久层的工作,负责与数据库交互的一些任务都封装在此。
- DAO层的设计首先是设计DAO接口;
- 然后在Spring的配置文件中定义此接口的实现类;
- 然后就可以在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现是哪个类,显得结构非常清晰;
- DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置;
优点:
- 服务对象不再和特定的接口实现绑定在一起,使其易于测试;
- DAO层提供的是一种服务,在不需要连接数据库的条件下即可进行单元测试,极大地提高了开发效率;
- 通过使用持久化技术无关的方法访问数据库,在应用程序的设计和使用上都有很大的灵活性,在系统性能和应用方面也是一个飞跃。