2019/11/2 周六
内容:Servlet、JSP、Cookie、Session、MVC架构模式、DAO、JDBC、AJAX、JSON、forward和redirect、GET和POST
详细笔记链接
Servlet由Server和let的组成,let在英文的构词中,一般充当词尾,表示“小部件”的意思,因此Servlet表达的是服务器端的小应用程序的意思。
Servlet就是 运行在Web服务器端的Java程序,处理客户浏览器发送来的请求 。一般来说,Servlet主要用来处理HTTP的请求,但是Servlet本身不局限于用来开发基于HTTP协议的应用,也可以开发其他协议的应用。
Servlet从设计上来讲,主要应用了设计模式中的模板模式,定义几个接口和抽象类,如果你需要编写Servlet程序,只要继承或者实现特定的抽象类、接口,实现抽象方法。而被重写的方法中应包含能处理用户发来的特定请求的代码。
Servlet能够编写很多基于服务器端的应用,例如:
(1)动态处理用户提交上来的HTML表单。
(2)提供动态的内容给浏览器进行显示,例如,动态从数据库获取的查询数据。
(3)在HTTP客户请求维护用户的状态信息,例如,利用Servlet技术实现虚拟购物车功能,利用虚拟的购物车保持用户在不同购物页面购买的商品信息。
(1)实例化
当Servlet部署到Web容器中以后,客户机发送调用这个Servlet的请求到达Web容器,Web容器会先判断所调用的Servlet的实例是否存在。如果存在,新创建一个线程,并在新建线程中调用这个实例的service()方法。如果不存在,装载当前所调用的Servlet的类,调用构造方法生成这个Servlet的实例。
(2)初始化
然后立即调用这个实例的init()方法进行初始化,特别强调init()这个方法只会在Servlet初始化的时候调用一次,创建后的servlet对象会一直驻留在服务器内部,为后续的请问提供服务,除非这个Servlet被重新部署。
(3)处理请求服务
只要有请求访问servlet,服务就会在新建的线程中调用这个Servlet实例的service()方法,处理用户的请求,回应给用户相应的内容。
(4)对象销毁
当Servlet不再需要使用的时候,比如其所在的Web应用被卸载或Web服务器关闭时,它会被卸载掉,卸载前调用destroy()方法,完成所有相关资源的释放。
详细笔记链接
JSP(Java Server Pages)就是 运行在服务器端的Java页面 ,是Servlet更高级别的扩展,通过JSP可以让开发人员 把普通的Java代码镶嵌到HTML页面中 ,最终JSP文件会通过Web服务器的Web容器编译成一个Servlet,用来处理各种请求。
Servlet与JSP可以认为是Java实现Web编程的第一代和第二代技术。就是由于Servlet不便于快速开发包括大量HTML代码的动态网页,于是Sun公司推出了JSP技术用来快速开发动态的Web页面。
Servlet和JSP是实现同一种编程效果的不同的两种实现方式。JSP更擅长表现于页面显示,servlet更擅长于逻辑控制。
从根本上来说JSP就是Servlet。因为JVM虚拟机只能识别Java的类,不能识别JSP的代码,因此JSP在web服务器中运行时,就是先转化成Servlet,Servlet则是个完整的Java类,JVM能够识别,然后再调用转化后Servlet的方法,把输出的动态HTML内容返回给客户的浏览器。
(1) request对象 ,javax.servlet.httpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
(2) response对象 ,代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
(3) session对象 ,由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
(4) application对象 ,可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
(5) out对象 ,用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
(6) pageContext对象 ,作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。
(7) config对象 ,主要作用是取得服务器的配置信息。通过pageConext对象的getServletConfig()方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
(8) page 对象 ,代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,类似于Java编程中的this指针。
(9) exception 对象 ,作用是显示异常信息,只有在包含isErrorPage="true"的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况;如果在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。
详细笔记链接
Cookie是 Web服务器通过浏览器保存在用户计算机上的一个文本文件 ,这个文本文件中包含了小段的文本信息,可以记录每个用户独特的个人信息,这些文本信息的内容以键值对的形式进行储存,并且可以让Web开发者通过程序代码读写这个文本文件的内容。
简单来说,客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再次请求该网站时,浏览器就会把请求地址和Cookie一同给服务器。服务器检查该Cookie,从而判断用户的状态。服务器还可以根据需要修改Cookie的内容。
Session是另一种记录客户状态的机制。客户端浏览器访问服务器的时候, 服务器把客户端信息以某种形式记录在服务器上 ,这就是session,客户端浏览器再次访问时,只需要从该session中查找该客户的状态就可以了。
会话所描述的是客户端和服务器端一系列连续交互的过程,在一次会话期间(从会话建立到结束/失效)通常会发生多次请求/响应操作(跨多个页面),而会话机制允许在此期间连续地记录用户的状态信息。
(1)Cookie是保存在客户端的,因此不能在Cookie中存诸如密码之类的敏感信息,不安全;而Session是保存在Web服务器端的,但也因此会占用一定的服务器性能。
(2)Cookie能保存的信息只能是有限(4K)的文本信息,且很多浏览器都限制一个站点最多存放20个Cookie;而Session能保存对象,并且保存对象的数量和大小没有限制。
详细笔记链接
MVC架构模式是模型(Model)、视图(View)和控制器(Controller)三个英文单词的首字母组合,综合运用了多种设计模式,包括观察者(Observer)、策略(Strategy)和合成(Composite)等模式,现如今MVC已经成为Web开发中最常使用的架构模式。
(1) 模型(Model) 部分代表了 运算数据和商业逻辑 ,在实际开发中,模型部分一般通过JavaBeans和EJB(企业级JavaBean)来实现。
(2) 视图(view) 部分代表了用户交互界面,是应用的 显示模块 ,对于JavaWeb应用来说,这部分由JSP和定制标记库组成。JSP通过定制标记库来读取模型对象中的数据,模型和控制器部分负责在JSP页面中所显示的数据的更新。
(3) 控制器(Controller) 调用模型和视图部分,相当于MVC模式中的中枢神经,接收到用户不同的请求, 根据请求的内容,调用不同的模型进行处理 ,处理完成以后再通过视图部分显示最终的处理结果。控制器一般会使用Servlet技术来实现。
优点:
(1)有利于开发中的 分工
在MVC模式中,用不同模块把系统分成不同部分,能更好地实现开发中的分工。美工和网页设计人员进行视图部分的开发,Java程序员进行模型和控制器部分的开发。
(2)各司其职,互不干涉
在MVC模式中,三个部分各司其职,所以如果 哪一部分的需求发生了变化,就只需要更改相应部分的代码就可以,而不会影响到其他层中的代码 。
(3)有利于 组件的重用
分层后更有利于组件的重用。例如,控制器部分可独立成一个能用的组件,视图也可做成通用的界面。
缺点:
使用MVC以后, 系统变得复杂 了,对开发人员的技术水平要求比较高了,同时模型和视图的分离也使得调试代码变得更困难一些。
详细笔记链接
DAO(Database Access Object),顾名思义就是 数据库访问对象 ,也就是和数据库打交道的对象。而这些对象执行的操作往往可以 从系统的业务逻辑中独立出来 ,从而使系统中的数据库操作变得统一和简单化,而且也可以使得系统在和数据库交互出错时,更快地定位问题。
DAO设计模式的主要作用是对数据访问进行抽象,使得控制层的代码通过DAO对象就可以完成对数据库表中数据的添加、读取、更新与删除(Create、Retrieve、Update和Delete,CRUD)操作。应用DAO模式,需要先定义所操作的数据对应的POJO类(普通JavaBeans,与EJB相对),然后再定义DAO接口和编写实现DAO接口的实现类。
详细笔记链接
JDBC(Java Database Connectivity) Java数据库连接 ,是一种 可用于执行SQL语句的JavaAPI ,它是一些Java的类和接口组成的。JDBC给数据库应用开发人员提供标准的应用程序设计接口,同时也鼓励各家数据库厂商编写实现JDBC设计接口的驱动程序。在JDBC这种方式下,接口和实现相分离,Java程序设计人员利用JDBC的接口进行数据库访问操作,而实际上对数据库的操作由JDBC驱动程序中的接口实现类完成。
通过使用JDBC,程序开发人员可以很方便地将SQL语句传送给具有JDBC驱动程序的任何一种数据库。
(1)导入jar包:mysql-connector-java-5.1.37-bin。
(2)建立数据库连接
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 根据 url(其中xxx为自己建的数据库名)、user和password,通过DriverManager类获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx","root","1234");
(3)向数据库中提交SQL
// 定义sql语句
String sql = "xxx";
// 获得执行sql语句对象Statement
Statement st = conn.createStatement();
// 或使用PreparedStatement预编译,参数可以使用“?”占位符,使sql语句的执行更具有柔韧性、更高效
PreparedStatement st = conn.perpareStatement(sql);
st.setXXX(1,1234); // 依次放入参数,XXX为参数类型
// 执行sql语句
int line = st.executeUpdate(sql); // 用来执行create、drop、alter、insert、delete和update等能够改变数据厍内容的SQL语句,返回值为对数据影响的条数
ResultSet rs = st.executeQuery(sql); // 用于select等查询数据库的SQL语句,返回值为相应类型的结果集
(4)处理数据库返回的结果
// 处理增、删、改操作的结果,如打印受影响行数
System.out.println(line);
// 处理查询操作的结果,如打印所有查询到的id和name
while(rs.next()){
System.out.println(rs.getInt("id") + "\t" + rs.getString("name");
}
(5)释放数据库连接
st.close();
conn.close();
详细笔记链接
AJAX(Asvnchronout JavaScript and XML)即异步JavaScript和XML。通过使用AJAX,可以让应用 在无刷新的情况下,在客户端和服务器传递数据 ,极大地提高用户的体验度。
AJAX不是一个单一的技术,而是几个技术的组合:JavaScript、XML和JavaScript的异步调用。
(1)JavaScript用来发起对Web服务器的调用,当服务器处理完请求后,JavaScript再用来更新当前的页面。
(2)服务器端和客户端之间传递的数据格式一般采用XML。因为JavaScript中有专门用来处理XML数据的API,所以在AJAX中使用XML这种数据格式是最恰当的。
(3)浏览器和Web服务器之间的 异步调用 ,通过JavaScript中的 XMLHttpRequest对象来实现 。XMLHttpRequest对象向Web服务器发出请求,这个请求是异步的,所以这个请求不需要等待用户的反应。
详细笔记链接,滑倒最后
JSON(JavaScript Object Notation) 是一种 轻量级的数据交换格式 ,使用 Javascript语法 来描述数据对象。JSON解析器和JSON库 支持许多不同的编程语言 ,目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。JSON 具有自我描述性、更易理解的特点。
JSON 数据的书写格式是:名称:值对,包括字段名称(在双引号中),后面写一个冒号,然后是值,如:
var json = {“name”:“张三” , “age”:18 };
AJAX与后台进行异步交互的数据有多种形式,比如HTML、XML、JSON等,大多数情况下还是JSON,具体步骤为:
(1)前端发送请求,即JSP页面向服务器发起AJAX请求。
(2)后台接收请求,从数据库获取数据,一般是 Java对象 或者对象的集合,需要转换成 JSON对象 ,再以 JSON字符串 的形式返回给前端。
(3)前端的请求成功后执行回调函数,获取后台返回的数据,即获得JSON格式的字符串,并将它转化为JS能操作的 JSON对象 。
(4)然后访问这个对象的键/值,从而进行页面数据渲染,通常是通过遍历输出到页面。