不知不觉,Web就上完了,今天冯导给我们进行了全面的总结,不得不说冯导很强,他给我们总结的很全面,基本上按到他的思路就可以将所有知识融会贯通了。
因为冯导的很全面,这里我就借鉴冯导的基础下,在来总结,如下:
web核心--HTTP
1。处理--servlet(元素 组成 功能)
2。管理--作用域对象 监听器
3. 简化SERVLET开发--JSP/无脚本JSP
请求行
HTTP请求方式
GET:向服务器检索资源
POST:向服务器发送数据,并要求指定的URL处理
HEAD:与GET方法相同,服务器只返回状态行和头标,并不返回请求文档
PUT:请求服务器保存请求数据作业指定URL新内容
DELETE:请求服务器删除URL命名的资源
OPTIONS:请求关于服务器支持的请求方法信息
TRACE:请求WEB服务器反馈HTTP请求和其头标
CONNECT:已文档化但当前未实现的一个方法预留做隧道处理
请求的URL
HTTP版本
请求头
描述客户端的状态
空行
标识请求头结束
A. Serlvet
Java Servlet 是运行在WEB容器上的JAVA程序
B. Servlet规范的组成
a) WEB应用程序
b) Servlet和HTTP Servlet
c) 过滤器
d) 安全
e) 国际化
C. Servlet API
a) ServletConfig(接口)
1. getInitParameter(String);获得指定(init-param)param-name的param-value值
2. getServletContext;获得上下文对象(ServletContext)
b) Servlet(接口)
1. getServletConfig;
2. service(ServletRequest,ServletResponse);初始化方法
Servlet 对HTTP响应处理过程:
1 、WEV浏览器通过打开一个到WEB服务器的TCP Socket套接字初始化一个HTTP请求
2、对于每次Servlet的访问请求,WEB容器都会解析Servlet输入流中的HTTP请求流数据
3 、WEB容器调用所请求的Servlet对象的servlet( )方法,并将请求和响应对象作为参数传递给该方法
二、请求重定向处理过程
1 、WEB浏览器通过HTTP发送请求
2、服务器端相应的Servlet把真实连接URL和302响应码发送到客户端
3、响应结束浏览求断开当前连接,然后再根据Location响应头的URL地址,从新发出HTTP请求
HTTP 状态码:
100~199:表示信息性代码,标示客户端应该采取的其他动作,请求正在执行.
200~299:标示客户请求成功.
300~399:表示用于已经移走的资源文件,指示新的地址.
400~499:表示由客户端引发的错误.
处理请求
=================请求的提交方式==========================
除了表单以POST方式提交之外其他都是GET
GET和POST的区别:数据是否在URL中可见数据的长度限制数据类型的限制数据是否会被浏览器缓存
=========================请求内容=============================
请求行:获得请求提交的方式 URL等相关信息
常用方法:getRequestURL getRequestURI 注意URL和URI区别
请求头:获得客户端请求所提交的内容的相关信息如内容类型/长度/浏览器类型(对比响应头区别在于响应头是由服务器发给客户端可以由服务器重新设置更改的而请求头则是由客户端发给服务器由客户端提交的内容决定的不可更改)
常用方法 getHeader 和响应头的操作一样,为了使用方便,SUN也对一些常用的头的获取进行了封装例如getHeader(“Content-Type”) 简化成getContentType()
消息体 和响应的消息体一样也分为文本类型普通数据和特殊的2进制数据:
文本:getParameter最常用 由此衍生的2个方法 getParameterValues在name属性相同时使用 getParameterMap获得所有的查询字符串和消息体
2进制:getInputStream
Web 应用程序状态管理概述
表单隐藏字段 Cookie URL重写 Session会话跟踪 Cookies Cookies原理:Cookie是Web服务器发送到客户端浏览器并保存的简短文本信息 在Servlet中管理Cookies 将Cookie发送到客户端步骤:创建一个或多个Cookie,使用构造方法指定Cookie的名字和值使用setXXX方法为Cookie设置可选属性使用HttpServletResponse对象的addCookie()方法将Cookie插入到响应头中读取客户端传入的Cookie步骤:使用HttpServletRequest对象的getCookies方法返回一个Cookie对象数组 Servlet遍历该数组(调用getName()方法),直到找到与名称相匹配的Cookie值 Session Session原理:session对象就是服务器为客户端创建并维护的用于存放客户状态数据的对象会话跟踪机制:服务器可以为客户端创建并维护一个Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号。Session对象是某个Servlet调用HttpServletRequest.getSession()方法时才被创建 HttpSession接口:Session对象是保存在服务器端,浏览器关闭时并不意味着Session对象被删除会话超时管理:设置会话超时在Session对象上调用invalidate()方法 应用结束(崩溃或取消部署) Application与Session域范围的属性比较:绑定在Session范围内的对象仅仅在一个持续的会话期间被维护,而绑定在Application(应用上下文)中的对象,在整个Web应用程序运行过程中的都被维护 Session持久化管理 URL地址重写:在向客户返回第一个响应时,会同时尝试设置Cookie和URL重写两种做法
对象作用域与Servlet事件监听器
A. 对象作用域
作用域对象 |
属性操作方法 |
作用域范围说明 |
ServletContext (上下文) |
Void setAttribute(String,Object) Object getAttribute(String) Void removeAttribute(String) Enumeration getAttributeNames() |
整个WEB应用(相当于静态变量) |
HttpSession(会话) |
一个会话交互反对程(成员变量) |
|
ServletRequest(请求) |
一次请求过程(局部变量) |
监听器概述 :
应用程序事件监听器是实现一到多个Servlet事件监听器接口的类。他们在Web应用程序部署的时候,被Web容器初始化和注册
监听Web应用程序范围内的事件
ServletContextListener接口:
void contextInitialized(ServletContextEvent sce):通知正在接受的对象,应用程序已经被加载及初始化
void contextDestroyed(ServletContextEvent sce):通知正在接受的对象,应用程序已经被销毁
ServletContext getServletContext():取得ServletContext对象
ServletContextAttributeListener接口
void attributeAdded(ServletContextAttributeEvent svab):若有属性对象加入Application的范围,通知正在收听的对象
void attributeRemoved(ServletContextAttributeEvent svab):若有属性对象加入Application的范围移除,通知正在收听的对象
void attributeReplaced(ServletContextAttributeEvent svab):若在Application的范围中,有对象取代另一个对象是,通知正在收听的对象
ServletContextAttributeEvent
java.lang.String getName():回传属性的名称
java.lang.Object getValue():回传属性的值
监听会话范围内事件
HttpSessionBindingListener接口
void valueBound(HttpSessionBindingEven event):当对象正在绑定到Session中,Servlet容器调用该方法来通知该对象
void valueUnbound(HttpSessionBindingEven event):当从Session中删除对象时,Servlet容器调用该方法来通知该对象
HttpSessionBindingEven
public HttpSessionBindingEvent(HttpSession , String)
public HttpSessionBindingEvent(HttpSession,String,Object)
public String getName():返回绑定到Session中或从Session中删除的属性名字
public Object getValue:返回被添加、删除、替换的属性值
public HttpSession getSession:返回HttpSession对象
HttpSessionAttributeListener接口主要监听HttpSession中的属性的操作
当在Session中增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se)方法
当在Session中删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法
当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se)方法
HttpSessionListener接口
当创建一个Session时,激发sessionCreated(HttpSessionEvent se)方法
当销毁一个Session时,激发sessionCDestroyed(HttpSessionEvent se)方法
HttpSessionActivationListener接口
public void sessionDidActivate(HttpSessionEvent se):会话被激活
public void sessionWillPassivate(HttpSessionEvent se):会话被迁移
监听请求生命周期内事件
ServletRequestListener接口
public void requestDestroyed(ServletRequestEvent sre):当请求被销毁时被处理
public void requestInitialized(ServletRequestEvent sre):当请求被创建时被处理
ServletRequestAttributeListener接口
public void attributeAdded(ServletRequestAttributeListener arg0):当在请求作用域中添加一个属性的时候调用该方法
public void attributeRemoved(ServletRequestAttributeListener arg0):当在请求作用域中删除一个属性的时候调用该方法
public void attributeReplaced(ServletRequestAttributeListener arg0):当在请求作用域中替换一个属性值的时候调用该方法
过滤器
1.编写类实现Filter接口,重写init,doFilter,destroy
2.在doFilter方法里编写过滤相关业务代码
3.在web.xml里注册
1.编写类继承对应的包装器类
2.重写对应的方法替换相应的请求/响应信息
3.编写过滤器
4.在doFilter方法里创建自定义的包装器类的对象
5.当使用过滤器链的时候将替换了的包装器类的对象作为传输传递
代替原来的请求/响应对象
客户端-发请求--WEB服务器---web容器
--将请求封装成ServletRequest-----到了过滤器里MyFilter----
将ServletRequest用MyWrapper替换----用过滤器链传递替换之后的请求
---到servlet ViewAction--
调用getParameter----调用MyWrapper里重写的方法
JSP
1.当第1次请求到来的时候,所有*.jsp的请求都会交给
org.apache.jasper.servlet.JspServlet处理
容器处理后将*.jsp文件翻译成_*_jsp.java
2.编译它,将生成的class文件放在同级目录下
3.装载class,创建对应的servlet对象
4.调用init方法实际上调用HttpJspBase里的jspInit方法
5.每个请求开启一个线程调用service方法,实际上会调用
_*_jsp.java里的_jspservice方法
6.调用destroy实际上调用HttpJspBase里的jspDestroy销毁
1.容器启动的时候解析web.xml,创建所有注册的servlet对象
2.第1次请求到来调用init方法
3.每个请求开启一个线程调用service方法
4.调用destroy销毁
JSP网页中的EL和JSTL
JSTL 其完整名称为JSP Standard Tag Library.
包含几组标签库以及EL(expression_r_r_r Language)
但这仅仅是在 JSTL 1.0 中,在JSTL 1.1 中已经不再包含 EL。
EL 被包含在 JSP 2.0 规范中(这个比较爽,也就是说可以不加上 JSTL 支持也能用EL)。
JSTL 的主要标签库
core : 核心库,包含了逻辑操作、输出、迭代、URL操作等标签。
format : 格式化库,用于格式化数据。
sql : 数据库操作。
xml : 用于XML操作。
function : 一些常用的函数,该标签库仅存在于 JSTL 1.1 中。
EL 表达式
通过 EL 表达式,JSP 中可以几乎不存在 Java 代码,从而实现了代码和表现的分离。
EL 表达式可以说是超简单,其本质就是访问 request、page、session、application 中的Attribute,然后根据表达式其中的属性取出值。
一个简单的EL : ${requestScope.allUser[0].name}
翻译成 Scriptlet 就是 <%=request.getAttribute("allUser")[0].getName() %>
EL 表达式访问对象是存在查找范围的,从最低到最高。
如下一个表达式
${alluser[0].name}
EL 中的算术表达式和逻辑操作
EL 表达式支持一些基本的算术表达式和逻辑操作
包括 +,-,*,/(div),%(mod);==(eq),!=(ne),<(lt),>(gt),<=(le),>=(ge)