web开发相关基础知识复习


2. servlet的生命周期
(1)什么是servlet的生命周期?
容器如何创建servlet对象,如何对其进行初始
化处理,如何调用其方法来处理请求以及销毁
该对象的整个过程。
(2)生命周期分成哪几个阶段?
1)实例化
a.什么是实例化?
容器创建servlet对象。
b.什么时候进行实例化?
情形1:容器收到请求之后。
情形2:容器启动之后。
需要配置<load-on-startup>参数,
该参数数是一个大于等于零的整数,
越小,优先级越高。
注意:
容器在默认情况下,对于某个类型的
servlet,只会创建一个实例。
2)初始化
a.什么是初始化?
容器调用servlet对象的init(ServletConfig config)方法。
b.init方法只会调用一次。
c.GenericServlet已经提供了init方法的实现,
如果要扩展,建议override init()方法。
d.初始化参数
step1,配置初始化参数
<init-param>
<param-name>company</param-name>
<param-value>大鹏证券</param-value>
</init-param>
step2,使用ServletConfig提供的
getInitParameter方法来访问初始化
参数。
3)就绪(调用)
a.什么是就绪?
容器收到请求之后,会调用servlet对象的
service方法。
b.可以override HttpServlet的service方法
或者override HttpServlet的doGet/doPost
方法来处理请求。
4)销毁
a.什么是销毁?
容器在删除servlet对象之前,会调用该对象
的destroy()方法。
b.该方法只会执行一次。
(3)相关的接口与类
1)Servlet接口
a.init(ServletConfig config)
b.service(ServletRequest req,ServletResponse res)
c.destroy()
2)GenericServlet抽象类
实现了Servlet接口中的部分方法(init,destroy)。
init方法实现:
将容器传递过来的ServletConfig对象保存
下来,并且提供了一个getServletConfig()
方法。
3)HttpServlet抽象类
继承了GenericServlet,实现了service方法。
service方法实现:
依据请求方式(get/post)调用对应的
doXXX方法(doGet/doPost)。
doGet/doPost方法需要子类去override。

3.容器如何处理请求资源路径?
比如,在浏览器地址栏输入
http://ip:port/web04_3/abc.html
浏览器会将"/web04_3/abc.html"作为请求资源路径,
放到请求行里面,发送给容器。
step1,容器依据应用名找到应用所在的文件夹。
step2,容器默认认为访问的是一个servlet,接下来,
去web.xml当中去查找(匹配<url-pattern>)对应的servlet。
(1)精确匹配
<url-pattern>/abc.html</url-pattern>
(2)通配符匹配
使用"*"来匹配零个或者多个字符,比如
<url-pattern>/*</url-pattern>
(3)后缀匹配
使用"*."开头,后接任意的多个字符,比如
<url-pattern>*.do</url-pattern>
会匹配所有以.do结尾的请求。
step3,如何找不到匹配的servlet,则容器会查找相应
的文件。

 

 

1.线程安全问题
(1)为什么说servlet会有线程安全问题?
a.容器在默认情况下,对于某个类型的servlet,只会创建一个实例。
b.容器收到一个请求,就会启动一个线程来处理该请求。如果有多个请求要访问某个类型的servlet,就有可能有多个线程同时调用某个servlet实例,就有能产生线程安全问题(比如,这些线程要修改该servlet的某个属性)。


(2)如何解决?
a.加锁
使用synchronzied对有线程安全问题的代码加锁。
b.让servlet实现SingleThreadModel接口(不建议使用)  容器会为实现了该接口的servlet创建多个实例(一个线程对应一个)。

 

2.jsp标签和el表达式
(1)jsp标签是什么?
jsp标签用来替换jsp中的java代码,容器遇到jsp标签之后,会依据标签找到对应的标签类然后执行。

注:
因为jsp当中包含了java代码,美工修改很不方便,所以,sun才制订了jsp标签技术规范。jsp标签类似于html标签(有开始标记,结束标记,有属性)。使用jsp标签,一方面方便页面的维护,另外,也可以方便代码的复用。


(2)el表达式是什么?
是一套简单的计算规则,计算的结果可以用来给jsp标签的属性赋值,也可以直接输出。

(3)el表达式的使用
1)访问bean的属性 (a5.jsp)
a.方式一 ${user.name}
a1.执行过程: 容器依次从pageContext,request,session,application查找绑订名为"user"(getAttribute)的对象,找到之后,调用该对象的getName方法并输出。
a2.优点:
将null转换成""输出。
找不到对象,会输出""。
a3.指定查找范围:
可以使用pageScope,requestScope,sessionScope,applicationScope来指定查找范围,比如${sessionScope.user.name}
b.方式二
${user["name"]}
b1. 允许[]里面出现一个绑订名。
b2.允许[]里面出现从0开始的下标,
用来访问数组中的指定下标的元素。
2)进行一些简单的计算 (a6.jsp)
a. 算术运算 "+","-","*","/","%" 注意,"+"只能求
和。
b.关系运算 ">",">=","<","<=","==","!="
c.逻辑运算 "&&","||","!"
d.empty运算 判断是不是一个空字符串或者是否
是一个空的集合。
3)读取请求参数值 (a7.jsp)
a.${param.username}
等价于
request.getParameter("username");
b. ${paramValues.city}
等价于
request.getParameterValues("city");
(4)jstl (java standard taglib) java标准标签库
1)jstl是什么?
apache开发的一套jsp标签,后来捐献给了sun,
sun将其命名为jstl。
2)如何使用?
step1,将jstl相关的jar文件拷贝到WEB-INF\lib下。
注:如果使用的是javaee5.0,不需要拷贝了,
因为javaee5.0已经包含了jstl相关的jar文件。
step2,使用taglib指令引入要使用的标签。
<%@taglib uri="" prefix=""%>
uri: 指定要引入的标签的命名空间(可参考
.tld文件的描述)。
prefix:命名空间的前缀(别名)
注:
命名空间(namespace): 为了区分同名的元素
而添加的一个前缀。
标签的执行过程:
容器依据标签名称找到标签类(在.tld文件当中
有描述),然后将该标签类实例化,最后调用该
实例的相应方法。
3)jstl核心标签 (a8.jsp)
a. if标签
<c:if test="" var="" scope="">
标签体
</c:if>
a1. 当test属性值为true时,容器会执行
标签体的内容。test属性可以使用el
表达式来赋值。
a2.var属性 指定一个绑订名称。
a3. scope属性 指定绑订范围(page,request,
session,application),绑订值是test
属性值。
b. choose标签 (a9.jsp)
<c:choose>
<c:when test="">
</c:when>
<c:otherwise>
</otherwise>
</c:choose>
b1: when可以出现1次或者多次,表示一个
分支。otherwise可以出现0次或者1次。
b2: 当test属性值为true,会执行该分支的内容。
该属性可以使用el表达式来赋值。
c.forEach标签 (a10.jsp)
<c:forEach items="" var="" varStatus="">
</c:forEach>
c1: 该标签用来遍历集合或者数组。
c2. items属性 指定要遍历的集合或者数组,
可以使用el表达式来赋值。
c3. var属性 指定一个绑订名称,绑订范围
固定是pageContext。
forEach标签执行过程:每次从集合或者
数组当中取一个元素,并且绑订到
pageContext上。
c4. varStatus属性 指定一个绑订名称,绑订
值是一个封装了当前遍历状态的对象,该
对象提供了一些方法,比如
getIndex(): 返回当前正在被访问的
元素的下标(从0开始)。
getCount():返回是第几次访问(从1
开始)。

 

3. jQuery对ajax编程的支持。
(1)load() order.jsp
1)作用:异步地向服务器发送请求,并将服务器
返回的数据直接添加到符合要求的节点之上。
2)用法:
$obj.load(url,[data]);
url:请求地址。
data:请求参数,可以有两种形式:
请求字符串形式,比如 name=tom&age=22
对象形式,比如{'name':'tom','age':22}
注:
如果请求参数采取第二种形式发送,则
load方法会发送post请求,否则,会发送
get请求。
(2)$.get()和$.post()
1)作用:异步地向服务器发送请求(get请求或者post请求),并
且可以处理服务器返回的数据。
2)用法:
$.get(url,[data],[callback],[type])
url:请求地址。
data:请求参数。
callback: 回调函数,用来处理服务器返回的
数据,格式如下:
function(data,statusText),其中
data是服务器返回的数据,statusText
是一个描述服务器状态的字符串。
type:服务器返回的数据类型,可以是
text 文本
html html内容
json json字符串
xml xml文档
script javascript脚本
(3)$.ajax(options):options是一个形如
{key1:value1,key2,value2...}的js对象,
用于指定发送请求的选项。
选项参数如下:
url(string):请求地址
type(string):get/post
data(object/string):发送到服务器的参数
dataType(string) :预期服务器返回的数据类型,
success(function):请求成功后调用的回调函数,有两个参数:
function(data,StatusText),其中,
data是服务器返回的数据,
StatusText 描述状态的字符串。
error(function):请求失败时调用的函数。
async: true(缺省)/false ,当值是false时,同步
地发送请求。

4.缓存问题
(1)什么是缓存问题
ie浏览器提供的ajax对象,在发送get请求时,
会检查请求地址是否访问过,如果访问过,则
不再发送请求,而是显示之前访问过的结果。
(2)解决方式
方式一:
在请求地址后面加上随机数。
比如
'getNumber.do?' + Math.random();
方式二:
发送post请求。

 

posted @ 2016-02-26 16:04  张-晓  阅读(215)  评论(0编辑  收藏  举报