Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servlet 的初始化,请求到达时运行其 service 方法,service 方法自动派遣,运行请求的 doXXX 方法(doGet、doPost),当服务器决定将实例销毁的时候调用其 Destroy 方法。与 CGI 的区别在于,Servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以运行多个请求,并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于 Servlet。
forward 是控制权的转向,是服务器请求资源,服务器直接请求目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器。浏览器不知道服务器发送的内容是哪儿来的,所以它的地址还是原来的地址。redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器去请求一个新的地址,浏览器地址栏上显示的是新的请求地址。forward 更高效。有些情况下,如果需要使用其它服务器上的资源,则必须使用 redirect
动态 include 用 jsp:include 动作实现:<jsp:include page="test.jsjp" flush="true"/>,它总是检查所包含文件中的变化,适用于包含动态页面,并且可以带参数;静态 include 用 include 伪代码实现,它不会检查所含文件的变化,适用于包含静态页面:<%@ include file="test.html" %>
request:同 Servlet 里的request
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的,供参考学习
原文:https://www.cnblogs.com/luobailin/p/9259687.html