【非原创,内容来源于网络、书本,整合,系学习笔记】
概述
Ø静态Web与动态Web最本质区别主要就是静态Web是无法进行数据库操作的,而动态Web是 可以进行数据库操作的。
Ø动态Web最大特点就是具有交互性,也就是服务器端会根据用户不同请求返回不同的结果。实现一个动态Web的主要方式有:CGI(Common Gateway Interface,公共网关接口)、PHP、ASP、ASP.NET和JSP等。
JDBC
定义
JDBC:全称是Java Database Connectivity,是一个应用程序编成接口(API),包括了许多类和接口,程序员通过使用JDBC可以方便的将SQL语句传送给几乎任何一种数据库。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
JDBC主要完成三件事:
(1)与一个数据库建立连接;
(2)向数据库发送SQL语句;
(3)处理数据库返回的结果。
:arrow_up_small: 工作步骤
Ø向驱动程序管理器加载注册JDBC驱动程序
Ø获得特定数据库的连接
Ø得到SQL语句容器,并发送SQL语句
Ø如果有结果集返回的话,处理结果集
Ø关闭数据库连接
:zap: 包含角色
:Driver、DriverManager、Connection、Statement、ResultSet。数据库驱动Driver:JDBC的驱动程序,通过指定的URL创建数据库连接;
驱动程序管理器DriverManager:DriverManger可以注册和删除加载的驱动程序,可以根据给定的URL获取符合URL协议的驱动Driver或者是建立Conenction连接,进行数据库交互。
连接对象Connection:Driver 或者DriverManager根据连接的URL和参数信息创建Connection实例,用来维持和数据库的数据通信。
命令对象Statement:Connection创建Statement对象,表示需要执行的SQL语句或者存储过程;
结果对象ResultSet:表示Statement执行完SQL语句后返回的结果集。
链接数据库系统两个步骤
驱动程序类名:一个继承java.sql.Driver接口的类名,JDBC驱动程序管理器需要加载这个类来处理数据库驱动程序。
数据库URL:一个字符串,该字符串包含关于数据库连接的信息和其他配置属性。这个字符串有自己的格式,不同数据库之间存在不同。
eg
MySQL
驱动程序包:mysql-connector-java-5.1.18-bin.jar
驱动程序类名:com.mysql.jdbc.Driver
URL格式:
jdbc:mysql://servername:port/database
Class.forName( " com.mysql.jdbc.Driver " );
cn = DriverManager.getConnection(
"jdbc:mysql://MyDbComputerName Or IP:3306/myDatabaseName", sUsr, sPwd );
建立一个JDBC应用程序的步骤:
1.导入包 2. 注册JDBC驱动程序 3.打开连接 4.执行查询 5.从结果集中提取数据 6.清理数据【关闭】
JBoss
JBoss作为Java EE应用服务器,支持如数据库访问(JDBC)、交易(JTA/JTS)、消息机制(JTS)、命名机制(JNDI)和管理支持(JMX)。
JBoss是一种遵循从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。
Java servlet
定义
JavaServlet是位于Web服务器内部的、运行于服务器端的、独立于平台和协议的Java应用程序(以下简称Servlet),可以生成动态的Web。属于客户与服务器的中间层。jsp和servlet可以实现同样的页面效果,编写jsp的成本相对低一点。
Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
Servlet的运行需要在web.xml中进行描述和注册
Servlet响应客户请求的过程:
- 客户端发送请求至服务器。
- 服务器将请求信息发送至Servlet。
- Servlet生成相应内容并将其传给服务器。
- 服务器将响应返回给客户端。
servlet可以完成的任务
1.动态生成HTML文档。
2.把请求转发给同一个Web应用中的其他Servlet组件。
3.把请求转发给其他Web应用中的Servlet组件。
4.读取客户端的Cookie,以及向客户端写入Cookie。
5.访问其他服务器资源。
特点
1 .高效性
Servlet采用了多线程的处理机制,有效地节省了处理时间和资源分配,提高了处理效率。
2 .开发的方便性
Servlet提供了大量的实用工具例程,用户可以非常方便地学习并在此基础上开发出所需的应用程序。
3.强大的功能性
Servlet为用户提供了许多以往CGI很难实现的功能,这些强大的功能为用户的Web开发提供了很好的支持。
4.可移植性
Servlet的定义和开发具有完善的标准。因此,Servlet不需修改或只需简单调整即可移植到Apache、Microsoft IIS等支持Servlet的Web服务器上。几乎所有的主流服务器都直接或通过插件支持Servlet。
5.安全性
Servlet是由Java编写的,所以它可以使用Java的安全框架;ServletAPI被实现为类型安全的;容器也会对Servlet的安全进行管理。
集成性好:Servlet有Servlet容器管理, Servlet容器位于Servlet服务器中,Servlet和服务器紧密集成,使Servlet和服务器密切合作
内容和接口
https://blog.csdn.net/qq_34594236/article/details/78345478【接口总结】
Servlet架构由javax.servlet和javax.servlet.http两个Java包组成。在javax.servlet包中定义了所有的Servlet类都必须实行或扩展的通用接口和类。
在javax.servlet.http包中定义了采用http通信的HttpServlet类。
所有的Servlet 对象都要实现Servlet 接口。已经实现了Servlet 接口的javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 这两个抽象类的子类来间接实现Servlet 接口。[常用javax.servlet.http.HttpServlet ]
用户编写的Servlet程序都必须实现javax.servlet.Servlet接口,该接口是ServletAPI的核心,在这个接口中有5个方法必须实现。
(1)init()方法
在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。
缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它,典型的是管理服务器端资源。
(2)service()方法【之前老是用】
格式:public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException 说明:Servlet成功初始化后该方法会被调用,用于处理用户请求。该方法在Servlet生命周期中可执行很多次,每个用户的请求都会执行一次service()方法,完成与相应客户端的交互。
service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。
doGet() 方法
当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时,doGet() 方法被调用。与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet() 方法。
doPost() 方法
当一个客户通过 HTML 表单发出一个 HTTP POST 请求时,doPost() 方法被调用。与 POST 请求相关的参数作为一个单独的 HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost() 方法。
以上三种方法 ,均需要 “请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。
(3)destroy()方法
destroy() 方法仅执行一次,即在服务器停止且卸装 Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源
(4)getServletConfig()方法
返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息
(5)getServletInfo()方法
是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。
这个HelloWorld类,继承了HttpServlet接口。而HttpServlet是一个实现了Servlet接口的类,所以这个Servlet就间接地实现了Servlet的接口,从而可以使用接口提供的服务。
这个程序中的doGet()方法就是具体的功能处理方法,这个方法可以对以get方法发起的请求进行处理,在这里这个方法的功能就是输出一个HTML页面。
本例中并没有出现具体的init()方法和destroy()方法,而是由Servlet容器以默认的方式对这个Servlet进行初始化和销毁动作。
question:JavaServlet针对HTTP协议提供的专门类和接口有哪些。
HttpServlet是满足Servlet规范、基于Http作为传输协议而设计的一个接口。所以,它不仅满足Servlet规范,继承了Servlet中的所有功能(接口方法),并且,它还具有自己的一些特有的功能,而这些功能即是专门用来处理通过http所传输的信息的。这么说可能有点晦涩难懂,还是举几个例子吧: 例如HttpServlet中不仅仅有service方法,它还包含有doGet、doPost、doPut等一系列方法,如果你熟悉http协议,你应该清楚,http请求类型有post、get、put、delete等,而httpServlet中doGet、doPost方法就是专门用来处理相关的http请求类型. 再举个例子,如果你仔细看看HttpServletRequest接口,你就会发现,除了继承ServletRequest中的方法外,它还有getHeader、getMethod方法,而getHeader就是专门用来获得http的头(header)信息的,getMethod就是专门用来获得client基于http协议请求的方式的,如post、get等。
配置
Servlet编译完以后不能直接运行,还需要存放在指定位置,并在web.xml文件中进行配置。
在该配置文件中<servlet>和<servlet-mapping>标识用于对Servlet进行配置,这个配置信息可以分为两个部分,第一部分是配置Servlet的名称和对应的类,第二部分是配置Servlet的访问路径。有一个servlet配置一个
【web.xml 很多属性,具体见配置文件】
生命周期
每个Servlet都有一个生命周期,该生命周期由创建Servlet实例的Servlet容器进行控制。所谓Servlet生命周期就是指Servlet容器创建Servlet实例后响应客户请求直至销毁的全过程。
Servlet的生命周期可以分为四个阶段:类装载及实例创建阶段、实例初始化阶段、服务阶段以及实例销毁阶段。
- 客户端请求该 Servlet;
- 加载 Servlet 类到内存;
- 实例化并调用init()方法初始化该 Servlet;
- service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
- 加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet。
1.类装载及实例创建
默认情况下,Servlet实例是在接受第一次请求时进行创建,而且对以后的请求进行复用。
如果Servlet实例需要在初始化时完成一些复杂的工作,可以通过配置在服务器启动时就创建实例:声明servlet标签中添加<load- on-startup>1</load-on-startup>标签。
其中<load-on-startup>标记的值必须为数值类型,表示Servlet的装载顺序,取值及含义如下:� 正数或零:该Servlet必须在应用启动时装载,容器必须保证数值小的Servlet先装载
2.初始化Servlet 实例init()
一旦Servlet实例被创建,将会调用Servlet的init(ServletConfig config)方法。init()方法在整个Servlet生命周期中只会调用一次,如果初始化成功则进入可服务状态,准备处理用户的请求,否则卸载该servlet实例。
在init()方法中包含了一个参数config,主要用于传递Servlet的配置信息,比如初始化参数等,该对象由服务器进行创建。
3.服务 services()
一旦Servlet实例成功创建并且初始化,该Servlet实例就可以被服务器用来服务于客户端的请求并生成响应。在服务阶段,应用服务器会调用该实例的 service(ServletRequest request, ServletResponse response)方法,其中request对象和response对象由服务器创建并传给Servlet实例。request对象封装了客户端发往服务器端的信息,response对象封装了服务器发往客户端的信息。
4.销毁 destory()
当Servlet容器将决定结束某个Servlet时,将会调用destory()方法,在destory方法中进行资源释放。一旦destory()方法被调用,Servlet容器将不会再发送任何请求给这个实例。若Servlet容器需再次使用该Servlet,需重新实例化该Servlet实例。
工作模式
客户端发送请求至服务器
服务器启动并调用 Servlet,Servlet 根据客户端请求生成响应内容并将其传给服务器
服务器将响应返回客户端
JSP与servlet:JSP 中的 out 对象,一般可以使用 doXXX 方法中的 response 参数获得
web.xml
设置全局参数,该参数所有的 Servlet 都可以访问
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
设置局部参数,该参数只有相应的 Servlet 才能访问
<servlet>
<servlet-name>Servlet 名称</servlet-name>
<servlet-class>Servlet 类路径</servlet-class>
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
JSP
定义
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP本质上还是Servlet。当Java EE容器接收到对某个JSP的第一次请求时,就会对这个JSP文件进行分析,生成Servlet源文件,再编译成Class类文件,执行这个类文件,把执行结果作为应答发送给客户端;如果接收到的不是对这个JSP的第一次请求,直接执行对应的类文件,把执行结果作为应答发送给客户端。
执行过程
客户端请求URL即请求jsp容器(比如tomcat)中的JSP页面,第一个用户请求jsp文件的时候,把jsp文件转换成java文件(servlet类文件),然后再编译成class文件。最后以HTML格式返回到给客户端浏览器。客户端浏览器解释HTML标签呈现给用户。由于编译后的class文件常驻内存,如果再次有客户请求的时候,直接再开一个线程,无须重新编译,直接执行第一次已经编译好的class文件,这样速度要快一些。当然,如果jsp文件发生变化,那么就需要重新编译一次
内置对象
9个内置对象
out 对象:负责管理对客户端的输出 输出对象
request 对象:负责得到客户端的请求信息 请求对象
response 对象:负责向客户端发出响应 响应对象
session 对象:负责保存同一客户端一次会话过程中的一些信息 会话对象
application 对象:表示整个应用的环境的信息 应用application对象
应答与请求的page对象
获取web.xml配置信息的config对象
获取异常信息exception对象
页面上下文的pageContext对象
page:只在一个页面中保存属性,跳转之后无交效。
request:只有一次请求中保存,服务器跳转后依然有效。
sesscion:在一次会话范围中,无论何种跳转都可以使用,但是开浏览器无法使用。
application:在整个服务器上保存,所有用户都可以使用。
【摘自百度百科】
request
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
response
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。、、对象response是服务器端向客户端返回的数据,从这个对象中间可以取出一部分与服务器互动的数据和信息。只有接受这个对象的页面才可以访问这个对象。对象response用来对客户的请求做出动态的响应,向客户端发送数据。
session
对象session维护着客户端用户和服务器端的状态,从这个对象中间可以取出用户和服务器交互的过程中的数据和信息。这个对象在用户关闭浏览器离开Web 应用之前一直有效。
1.什么是session:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
2.session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。
3.session对象存在一定时间过期问题,所以存在session中的名值对会在一定时间后失去,可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。
application
1.什么是application:
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
2.application对象常用方法:
(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
(2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。
out
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
page
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
config
config 对象的主要作用是取得服务器的配置信息。通过 pageContext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
exception
java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
pageContext
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
jsp特点
JSP技术所开发的Web应用程序是基于Java的,它拥有Java语言跨平台的特性,以及业务代码分离、组件重用、基础Java Servlet功能和预编译等特征。
- 跨平台
既然JSP是基于Java语言的,那么它就可以使用Java API,所以它也是跨平台的,可以应用在不同的系统中,如Windows、Linux、Mac和Solaris等。这同时也拓宽了JSP可以使用的Web服务器的范围。另外,应用于不同操作系统的数据库也可以为JSP服务,JSP使用JDBC技术操作数据库,从而避免了代码移植导致更换数据库时的代码修改问题。
正是因为跨平台的特性,使得采用JSP技术开发的项目可以不加修改地应用到任何不同的平台上,这也应验了Java语言的"一次编写,到处运行"的特点。
- 业务代码分离
采用JSP技术开发的项目,通常使用HTML语言来设计和格式化静态页面的内容,而使用JSP标签和Java代码片段来实现动态部分。程序开发人员可以将业务处理代码全部放到JavaBean中,或者把业务处理代码交给Servlet、Struts等其他业务控制层来处理,从而实现业务代码从视图层分离。这样JSP页面只负责显示数据即可,当需要修改业务代码时,不会影响JSP页面的代码。
- 组件重用
JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面甚至整个项目中都可以重复使用这个JavaBean。JavaBean也可以应用到其他Java应用程序中,包括桌面应用程序。
- 继承Java Servlet功能
Servlet是JSP出现之前的主要Java Web处理技术。它接受用户请求,在Servlet类中编写所有Java和HTML代码,然后通过输出流把结果页面返回给浏览器。其缺点是:在类中编写HTML代码非常不便,也不利于阅读。使用JSP技术之后,开发Web应用便变得相对简单快捷多了,并且JSP最终要编译成Servlet才能处理用户请求,因此我们说JSP拥有Servlet的所有功能和特性。
- 预编译
预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大提升了客户端的访问速度。
缺点:
(1) 与ASP也一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。
(2) Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了
jsp指令与动作
JSP 包含三个指令:page、include 和 taglib。其中,使用最多的是 page 指令和 include 指令
JSP 动作指使用 XML 语法格式的标记来控制服务器的行为。其用法如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*,java.io.*"%>
jsp:include:当页面被请求时引入一个文件
<jsp:include page="文件名" />
jsp:forward:将请求转到另外一个页面
<jsp:forward page="文件名"/>
中文乱码问题
提交过程中显示乱码,有 3 种方法解决这个问题
将其转成 gb2312 格式
直接修改 request 的编码
利用过滤器
jsp与servlet区别、应用
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP与Servlet不同之处:
1、简单的来说JSP就是含有Java代码的html,而servlet是含有html的Java代码。
2、JSP最终也是被解释为servlet并编译再执行。
3、在MVC三层结构中,JSP负责V(视图),servlet负责C(控制),各有优势,各司其职。Servlet在功能实现上其实是一样的,可以说用JSP的能实现的,Servlet也可以实现,但是从应用的角度来讲,JSP更适合做表现层的事情因为他有标签支持,而Servlet适合做数据逻辑层的数据处理。
4、Servlet 就是一个Java类,Web中应用的应该是HttpServerlet,Serverlet类最大的好处就是能够提供request/response的服务器功能,当有请求提交到Serverlet 时,他执行它自身的service(request,response)方法。
EL & JSTL
EL定义
EL(Expression Language) 是为了使JSP写起来更加简单。 是JSP表达式语言,提供了JSP中简化表达式的方法。
为方便存取数据所自定义的语言,后来成了 JSP 标准的一部分,如今 EL 已经是一项成熟、标准的技术
EL 具有与表达式相同的输出的功能,另外其还具有简单的运算符、访问对象、简单的JavaBean 访问、简单的集合访问功能
EL使用
语法结构:${ }
${sessionScope.user.sex}
上述 EL 范例的意思是:从 session 的范围中,取得用户的性别。显然,使用了 EL,需要编写输出信息的代码时,代码量少了,工作的效率自然会提高。
- EL 提供了两种实现对相应数据存取的运算符:.(点操作)和[]操作
${sessionScope.user.sex}
等价于
String str = "sex"; ${sessionScope.user[str]}
- 使用 EL 表达式访问 JavaBean,基本语法如下
${bean.property}
JSTL 定义
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签 格式化标签 SQL 标签 XML 标签 JSTL 函数
JSTL 是标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML 文件剖析、数据库查询及国际化和文字格式标准化等应用
JSTL的使用
使用 JSTL 必须使用 taglib 指令,taglib 指令的作用是声明 JSP 文件使用的标签库,同时引入该标签库,并指定标签的前缀。以声明核心标签库 core 为例,其基本语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
必须notice各类标签库的使用。
过滤器filter
Filter概述:在web服务器中,当客户端发起URL请求时,web服务器收到客户端请求首先经过过滤器,如果过滤器允许则客户才可以到达最终的URL。过滤器就象一个链条。介于客户端与服务器端资源URL(如JSP,Servlet)之间。多个过滤器还可以组成一个过滤链。
Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response。也就是说Filter其实是一个”servlet chaining”(servlet 链).
一个Filter 包括:
在servlet被调用之前截获;
在servlet被调用之前检查servlet request;
根据需要修改request头和request数据;
根据需要修改response头和response数据;
javabean
定义
JavaBean是Java语言编写的类。实现业务层代码,它通常具有如下特点:
这个Java类必须具有一个无参的构造函数
属性必须私有化。
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范
JavaBean 有广义的和狭义的两种概念。广义的 JavaBean 是指普通的 Java 类;狭义的JavaBean 是指严格按照 JavaBean 规范编写的 Java 类
JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。
特殊 JavaBean 属性
给 boolean 类型设置属性,要将 getter 方法改为 is 方法
数组属性
jsp相关javabean标签
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
xml
定义
XML即可扩展的标记语言,可以定义语义标记,是元标记语言。XML与超文本标记语言HTML不同,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。本质上XML文件是一个纯文本文件。
它和json都是一种数据交换格式
作用
1、XML可用于存储数据
通过使用XML,纯文本文件可用于存储数据。也可使用XML将数据存储于文件或数据库之中。可以编写从数据仓库中存储信息的应用程序,而普通的应用程序就可被用来显示这些数据。XML使您的数据更有用通过使用XML,您的数据可供更多的用户使用。
2、XML用于交换数据
通过使用XML,可以在互不兼容的系统间交换数据。在现实世界中,计算机系统和数据库通过互不兼容的格式来容纳数据。对开发人员来说,其中一项最费时的挑战一直是在因特网上的系统之间交换数据。通过将数据转换为XML,可以极大地降低这种复杂性,并创建可被许多不同类型的应用程序读取的数据。
3、XML可被用来共享数据
通过使用XML,纯文本文件可用于共享数据。XML提供了独立于软硬件的数据共享解决方案。这使得不同的应用程序都可以更容易地创建数据。
合法
合法的XML文件:
1、文档必须包含一个或多个元素(不能为空)
2、每个XML文件有且仅有一个声明
<?xml version = "1.0" standalone = "no" encoding = "GB2312" ? >
3、每个xml文件有且仅有一个根节点。
4、每个XML标记严格区分大小写,开始标记与结束标记配对出现或空标记关闭。
5、标记可以嵌套但不可以交叉。
6、属性必须由名称与值构成,出现元素开始标记中。
DTD
通过制定DTD文档,XML的数据格式就会得到约束,从而使数据交换有一个依据,在数据发送和接收时据此进行合法性的验证。
当打开DTD关联XML文档时,就要使DTD在该XML文档中起作用,XML文档中如果出现违反DTD规则的定义之处,就会出错。
XML文档必须满足两个正确的标准:
一个就是格式要正确,要满足基本的XML语法规则;
一个是满足DTD中制定的关于XML文档元素的有关规则,即使DTD或XML有效。
DTD的声明方法是:
<!DOCTYPE 根元素名称 [定义的内容]>
其中,[定义的内容]用标签<!ELEMENT>来分别定义所包含的子元素名称以及每一个子元素的数据类型。
内部DTD 外部DTD
XML Schema
Schema是由一组元素构成的,其根元素是<Schema>。
<Schema>元素是XML Schema中第一个出现的元素,用来表明该XML文档是一个Schema文档,其结束标记对应地为</Schema>。
一个Schema文档的基本结构如下:
<Schema name=”Schema名字” xmlns=”命名空间”>
DOM & SAX
如果需要在不同的应用程序中存取XML文档中的数据,这样的分析器代码就要被重写多次。
很明显地,需要一个统一的XML接口,借助它可以对XML文档进行比较方便的存取操作。
有两种标准应用程序接口:DOM和SAX,它们是由W3C和XML_DEV分别提出的。
DOM
DOM的全称是Document Object Model,即文档对象模型。
在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合,也可以称之为DOM树。
应用程序通过对这个对象模型的操作,实现对XML文档的数据的操作。
通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据。
DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成一棵节点树。
不论XML文档中描述的是什么类型的数据信息,在DOM所生成的模型中都是节点树形式。
借助DOM接口可以对XML文档中任何部分进行随机访问。
当分析的文档比较大结构比较复杂时,XML文档经转换生成的DOM树也相应地大而繁杂。
SAX
SAX的全称是Simple APIs for XML,即XML简单应用程序接口。
与DOM不同,SAX的访问模式是一种顺序模式,当使用SAX进行文档解析时,会触发一系列事件,并激活相对应的时间处理方法(函数)。
应用程序通过这些事件处理方法实现对XML文档的访问,因此SAX接口被称之为事件驱动接口。
与DOM相比,SAX是一种轻量型的方法。
在处理DOM的时候,需要读入整个XML文档,在文档比较大的时候,处理时间和内存占用都很大。
与DOM不同,SAX是事件驱动的,就是说,它不需要读入整个文档,而是一边读入文档,一边进行解析。
解析开始之前,需要向XMLReader注册一个ContentHandler,就是一个事件监听器。
在ContentHandler中定义了若干方法,在解析文档的不同阶段被自动调用。
1.简述什么是XML?什么是DTD?什么是Schema?
2.什么是DOM?简述其作用。
3.什么是SAX?简述其作用。
4.实现一访问XML文档的DOM程序。
5.实现一访问XML文档的SAX程序。
Xml 和 Json
详细对比: https://www.cnblogs.com/SanMaoSpace/p/3139186.html
https://www.cnblogs.com/linjiyeah/p/4053289.html
·JSON
JSON(Javascript Object Notation,Javascript对象表示法)是一种轻量级的数据格式,而不是一种编程语言。它利用Javascript中某些模式来表示结构化数据,通过eval()方法,Javascript能够把这种数据格式转化为对应的js类型来使用。
.XML
XML(Extensible Markup Language,可扩展性标记语言)是一种用来交换数据的标记语言,而同样是标记语言的HTML(HyperText Markup Language,超文本标记语言)则是用来显示数据的标记语言。它允许用户自定义标签来标记数据和定义数据类型。
·联系
JSON和XML均是可跨平台使用的,且它们都是用于交换数据所用。后者相对而言更具有历史性,所以通用性也自然地比较抢,而且它衍生出很多其他的语言,譬如SVG(这个东西我正在缓慢研究)、RSS等等。
但由于JSON格式简单直白,且一般是压缩形式出现,所以请求文件的大小自然缩小。因此,前端工程师们应该都不会不爱它吧。
JQuery & Ajax
JQuery定义
JQuery是继prototype之后又一个优秀的Javascript框架,JQuery是一个快速的、简洁的JavaScript函数库,使用户能更方便地处理HTML文档、事件、实现动画效果,并且方便地为网站提供AJAX交互。JQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也描述得很详细,同时还有许多成熟的插件可供选择。
JQuery 特性
JQuery包含以下特性:HTML 元素选取、HTML 元素操作、CSS 操作、HTML 事件函数、JavaScript 特效和动画、HTML DOM 遍历和修改、AJAX。ØUtilities
JQuery用法
jQuery 元素选择器和属性选择器允许通过标签名、属性名或内容对 HTML 元素进行选择。
JQuery + ajax(Xml)
Ajax(Asynchronous JavaScript and XML)即异步JavaScript和XML技术。是结合了Java技术、XML以及JavaScript等编程技术。Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法。 【几种技术的结合】
异步这个词是指AJAX应用软件与主机服务器进行联系的方式。如果使用旧模式,每当用户执行某种操作、向服务器请求获得新数据,Web浏览器就会更新当前窗口。如果使用AJAX的异步模式,浏览器就不必等用户请求操作,也不必更新整个窗口就可以显示新获取的数据。只要来回传送采用XML格式的数据,在浏览器里面运行的JavaScript代码就可以与服务器进行联系。JavaScript代码还可以把样式表加到检索到的数据上,然后在现有网页的某个部分加以显示。Google和百度的搜索框中的智能感知等使用了Ajax技术。Web页面不用打断交互流程进行重新加裁,就可以动态地更新。
请求和响应过程
(1)网页调用JavaScript程序。
(2)JavaScript利用浏览器提供的XMLHTTP对象向Web服务器发送请求。
(3)请求的URL资源处理后返回结果给浏览器的XMLHTTP对象。
(4)XMLHTTP对象调用实现设置的处理方法。
(5)JavaScript方法解析返回的数据,利用返回的数据更新页面。
JQuery + json
json定义
JSON概念很简单,JSON 是一种轻量级的数据格式,JSON是 JavaScript语法的子集,即数组和对象表示。由于使用的是 JavaScript语法,因此JSON 定义可以包含在JavaScript文件中,对其的访问无需通过XML解析。
简单地说,JSON 可以将 JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户端传递给服务器端程序。
json 数据表示方式
1、JSON 表示名称/值对:
{ "StudentName": "zhangliuwen" }
2、包含多个名称--值对:
{ " StudentName ": "zhou", "email": "zhou@mycom.com" }
3、值的数组:
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。使用 JSON,就只需将多个带花括号的记录分组在一起:
{ "students": [
{ " StudentName ": "zhou", "email": "zhou@mycom.com"},
{ " StudentName ": "zhang", "email": "zhang@mycom.com" },
{ " StudentName ": "liu", "email": "liu@mycom.com"} ]}
Ajax 相关
Questions:
Ajax 技术的原理
能否在登录提交时,浏览器界面不刷新,提交改为在后台异步进行,当服务器端验证完毕,将结果在界面上原来登录表单所在的位置显示出来?
答案:使用Ajax
异步同步
异步(Asynchronous)的概念和同步(Synchronous)相对。当一个异步过程调用发出后,调用者不需要立刻得到结果,可以继续做自己的事情,等到过程调用完毕,再通过回调函数通知调用方。而同步情况下,调用方必须等待对方得到结果,才能继续运行
Ajax 包含内容
1.异步数据获取技术,使用 XMLHttpRequest
2.基于标准的表示技术,使用 XHTML 与 CSS
3.动态显示和交互技术,使用 Document Object Model(文档对象模型)
4.数据互换和操作技术,使用 XML 与 XSLT
5.Html/XHtml:实现页面内容的表示。
6.JavaScript,将以上技术融合在一起
Html/XHtml:实现页面内容的表示
CSS:格式化文本内容。
DOM:对页面内容进行动态更新。
XML:实现数据交换和格式转化。
XMLHttpRequest对象:实现与服务器异步通信。
JavaScript:实现以上所有技术的融合。
Ajax优点&缺点
优点:
1.减轻服务器负担,避免整个浏览器窗口刷新时造成的重复请求
2.带来更好的用户体验
3.进一步促进页面呈现和数据本身的分离等
缺点:
1.对浏览器具有一定的限制,对于不兼容的浏览器,可能无法使用。
2.Ajax 没有刷新页面,浏览器上的"后退"按钮是失效的,因此,客户经常无法回退到以前的操作
Ajax应用场合
1.数据验证(保证数据唯一性等) 2.按需取数据 3.自动更新页面(天气股市等实时更新)