Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servlet 的初始化,请求到达时运行其 service 方法,service 方法自动派遣,运行请求的 doXXX 方法(doGet、doPost),当服务器决定将实例销毁的时候调用其 Destroy 方法。与 CGI 的区别在于,Servlet 处于服务器进程中,它经过多线程方式运行其 service 方法,一个实例能够运行多个请求,而且其实例通常不会销毁,而 CGI 对每一个请求都产生新的进程,服务完成后就销毁,因此效率上低于 Servlet。html
forward 是控制权的转向,是服务器请求资源,服务器直接请求目标地址的 URL,把那个 URL 的响应内容读取过来,而后把这些内容再发给浏览器。浏览器不知道服务器发送的内容是哪儿来的,因此它的地址仍是原来的地址。redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器去请求一个新的地址,浏览器地址栏上显示的是新的请求地址。forward 更高效。有些状况下,若是须要使用其它服务器上的资源,则必须使用 redirectjava
动态 include 用 jsp:include 动做实现:<jsp:include page="test.jsjp" flush="true"/>,它老是检查所包含文件中的变化,适用于包含动态页面,而且能够带参数;静态 include 用 include 伪代码实现,它不会检查所含文件的变化,适用于包含静态页面:<%@ include file="test.html" %>web
request:同 Servlet 里的requestsql
response:同 Servlet 里的response数据库
session:同 request.getSession()编程
application:同 request.getServletContext后端
out:同 response.getWriter()设计模式
config:同 Servelt 的 init 方法里的 ServletConfig 参数浏览器
page:表示该页面产生的一个 Servlet 实例缓存
exception:针对错误网页,未捕捉的除外
<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>
<%@ include file="test.html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
JSP 共有如下 6 种动做
jsp:include 在页面被请求时引用一个文件
jsp:useBean 寻找或实例化一个 JavaBean
jsp:setProperty 设置 JavaBean 的属性
jsjp:getProperty 输出某个 JavaBean 的属性
jsp:forward 转发
jsp:plugin 根据浏览器类型为 Java 插件生成 object 标记
form 中的 get 和 post 方法,在数据传输过程当中分别对应了 http 协议中的 GET 与 POST 方法。
GET 是用来从服务器上获取数据,而 POST 是用来向服务器上传数据
GET 将表单中数据按 variable=value 的形式,添加到 action 所指向的 URL 后面,二者使用“?”链接,而多个变量之间使用“&”链接;POST 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向的 URL
GET 是不安全的,由于在传输过程,数据被放在请求的 URL 中;POST 的全部操做对用户来讲是不可见的
GET传输的数据量小,这主要是由于受 URL 长度限制;POST 能够传输大量的数据,因此上传文件只能使用 POST
GET 限制 form 表单的数据集必须为 ASCII 字符,而 POST 支持整个 ISO10646 字符集
GET 是 form 的默认方法
最经常使用的容器:tomcat、weblogic
开发工具:eclipse、jbuilder、ItelliJ IDEA
webapps
application
jsp 页面
WEB-INF
classes
lib
web.xml
jsp 页面
META-INF
JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的视图表达。JSP 编译后是“Servlet 类”。Servlet 和 JSP 最主要的不一样点在于,Servlet 的应用逻辑是在 Java 文件中,而且彻底从表示层中的 HTML 里分离开来。而 JSP 的状况是 Java 和 HTML 能够组合成一个扩展名为 .jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑
pageContext 是表明与一个页面相关的对象和属性。一个页面由一个编译好的 Servlet 类(能够带有任何的 include 指令,没有 include 动做)表示。这既包括 Servlet 又包括被编译成 Servlet 的 JSP 页面
Request 是代码 web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 web 组件(因为 forward 指令和 include 动做的关系)
Session 是表明与用于某个 web 客户机的一个用户体验相关的对象和属性。一个 web 会话能够也常常或跨越多个客户机请求
Application 是表明与整个 web 应用程序相关的对象和属性。这实质上是跨越整个 web 应用程序,包括多个页面、请求和会话的一个全局做用域
基于 Java 的 Web 应用系统采用 MVC 架构模式,即 model(模型)、view(视图)、control(控制器)分离设计;这是目前 Web 应用服务系统的主流设计方向
MVC 设计模式:应用观察者模式的框架模式
model:处理业务逻辑的模块,每一种处理一个模块(模型,操做数据的业务处理层,并独立于表现层)
view:负责页面显示,显示 model 处理结果给用户,主要实现数据到页面转换过程(视图,经过客户端数据类型显示数据,并回显模型层的执行结果)
control:负责请求分发,把 form 数据传递给 model 处理,把处理结果的数据传递给 view 显示(控制器,视图层和模型层的桥梁,控制数据的流向,接受视图发出的事件,并重绘视图)
JSP + Servlet + JavaBean,以控制器为核心,JSP 只负责显示和收集数据,Servlet,链接视图和模型,将视图层数据发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式
Cookie、URL 重写、设置表单隐藏域
验证客户是否来自可信网络
对客户提交的数据进行从新编码
过滤掉客户的某些不该该出现的词汇
验证用户是否能够登陆
验证客户的浏览器是否支持当前的应用
记录系统日志
用户配置 web 应用的信息,如 listener、filter、Servlet
<c:if>
<c:choose>、<c:when>、<c:otherwise>
<c:forEach>
<c:set>
中间件就是程序中可植入的,可重用的,与业务逻辑无关的各类组件
中间件是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操做系统软件与用户的应用软件的中间。中间件在操做系统、网络和数据库之上,应用软件的下层,总的做用是为处于本身上层的应用软件提供运行与开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不一样的技术之间共享资源,中间件位于客户机服务器的操做系统之上,管理计算资源和网络通讯。
举例:
RMI(Remote Method Invocation)远程调用
Load Balancing 负载均衡,将访问符合分散到各个服务器中
Treasparent Fail-over 透明的故障切换
Clustering 集群,用多个小的服务器代替大型机
Back-end-Integration 后端集成,用现有的、新开发的系统如何去集成遗留的系统
Transaction 事务(全局事务:分布式事务)(局部事务:在同一数据库链接内的事务)
Dynamic Redeployment 动态从新部署,在不中止原系统的状况下,部署新的系统
System Managerment 系统管理
Threading 多线程处理
Message-oriented Middleware 面向消息的中间件(异步的调用编程)
Component Life Cycle 组件的生命周期管理
Resource pooling 资源池
Security 安全
Caching 缓存
String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");
J2EE 自己是一个标准,一个为企业分布式应用开发提供的标准平台
J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术
对象关系映射(Object-Relational Mapping)是一种为了解决面向对象与面向关系数据库存在的互不匹配的技术,简单说,ORM 是经过使用描述对象和数据库之间映射的元数据,将 Java 程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另外一种形式
Configuration:配置 Hibernate,根据其启动 Hibernate,建立 SessionFactory 对象
SessionFactory:初始化 Hibernate,充当数据存储源的代理,建立 session 对象,SessionFactory 是线程安全的,意味着它的同一个实例能够被应用的多个线程共享,是重量级、二级缓存
Session:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享一个 session,是轻量级、一级缓存
Query 和 Criteria:执行数据库的查询
Hibernate 的事务其实是底层的 JDBC Transaction 的封装或者是 JTA Transaction 的封装,默认状况下使用 JDBC Transaction
setAutoCommit(boolean autoCommint):设置是否自动提交事务,默认为自动提交
commint():提交事务
rollback():回滚事务
Java 中访问数据库的步骤以下
1)注册驱动
2)创建链接
3)建立 Statement
4)执行 sql 语句
5)处理结果集(若 sql 语句为查询语句)
6)关闭链接
Statement、PreparedStatement 区别
1) 建立时的区别:
Statement stm = con.createStatement();
PreparedStatement pstm = con.prepareStatement(sql);
执行的时候:
stm.execute(sql);
pstm.execute();
2) PreparedStatement 一旦绑定了 SQL,此 pstm 就不能执行其它的 SQL,即只能执行一条 SQL 命令;Statement 能够执行多条 SQL 命令。
3) 对于执行同构的 SQL(只有参数值不一样,其它SQL 结构都相同),用 PreparedStatement 的执行效率比较高,支持预编译,能够执行批量处理任务;对于异构的SQL 语句,Statement 的执行效率较高。
4) 代码的可读性和可维护性;(例如一个insert 的 SQL 语句,stm 在 SQL 中须要用字符形式写入传递的参数,pstm 提供方法传递参数,而且过滤掉SQL 中的特俗字符“ ’”,“-”)。
5) PreparedStatement 提升了安全性,防止了SQL 注入,但 Statement 不能实现,只能作判断和过滤。
1)临时状态(transient)
特征:
不处于 Session 缓存中
数据库中没有对象记录
Java 对象若是进入临时状态:
经过 new 语句建立一个对象时
当调用 session 的 delete() 方法,从 session 缓存删除一个对象时
2)持久化状态(persisted)
特征:
处于 session 缓存中
数据库中有对象记录
session 在特定时刻会保持两者同步
Java 对象如何进入持久化状态
session 的 save() 从临时状态到持久化状态
session 的 load(), get() 方法返回的对象
session 的 find() 返回的 list 集合中存放的对象
session 的 update(), saveOrUpdate() 使游离态到持久化状态
3)游离状态(detached)
特征:
再也不位于 session 缓存中
游离对象由持久化状态转变而来,数据库中可能还有对应记录
Java 对象如何从持久化状态到游离状态
session 的 close() 方法
session 的 evict() 方法,从缓存中删除一个对象。 提升性能,少用。
JDBC 效率高、直接操做数据库比较灵活
当 Hibernate 在查询数据的时候,数据并无存在内存中,当程序真正对数据进行操做时,对象才存在内存中,就实现了延时加载。节省了服务器的内存开销,从而提升了服务器的性能
均可以根据指定的实体类和 id 从数据库读取记录,并返回与之对应的实体对象
若是没有发现符合条件的记录,get 方法返回 null,而 load 方法会抛出一个 ObjectNotFundException
cookie 机制采用的是在客户端保持状态的方案,而 session 机制采用的是在服务器端保持状态的方案。因为服务器端保持状态的方案也须要在客户端保存一个标识,全部,session 机制可能须要借助于 cookie 机制来达到保存标识的目的
转发495303098的,供参考学习