一:应用开发框架
C/S:客户端/服务器端
优点:客户端分担服务器端的功能(QQ客户端的聊天记录)
安全性高
缺点:必须安装客户端
开发开销大
维护困难
不能无缝升级
B/S:浏览器/服务器端(主流的企业级开发模式,
只需要浏览器,网上银行)
优点:不需要安装客户端,浏览器就是客户端
开发的开销小
维护方便
实现无缝升级
缺点:安全性不高
服务器端硬件要求高
服务器端的操作将会是软件的核心--
--->压力(并发,效率,
网络传输)网上售票系统
二 Servlet
A:servlet是运行在服务器端的java类
B:ervlet每次都会启动一个线程来处理客户端发送的 request,然后给客户端返回处理之后的response,
即生成动态html网页,效率比较高。
C:Servlet的执行流程
A:浏览器发送一个Http 请求会自动加载web.xml文件
B:找对应的url-pattern标签---
>servlet-name标签(servlet-mapping)---
--->servlet-name标签(servlet标签中的)---
-->servlet-class标签找到对应的Servlet
C:调用Servlet的service方法来处理请求。包装成response返回客户端。
三,创建Servlet的步骤
A:继承HttpServlet
B:继承GenericServlet 获取传入数据参数
C:Servlet实现Servlet接口 了解Servlet其生命周期
四,跳转问题
A:内部跳转
特点:a)是同一个请求
b)能够获取请求的数据
c)浏览器的地址不会发生改变
d)不能够访问其他应用程序的资源
第一步:获取转发器RequestDispatcher
request.getRequestDispatcher(path);
第二步:进行跳转
a)forward:会清空前一个response输出流中的信息
b)include:不会清空前一个response输出流中的信息
B:重定向跳转:服务器外部跳转
response.sendRedirect(path)
path可以相当路径也可以是绝对路径。
特点:a)不是同一个请求,发送了两次请求
b)不能够获取请求的数据
c)浏览器的地址会发生改变
d)能够访问其他应用程序的资源。
五,Servlet的生命周期
第一个阶段:加载和实例化对象 只调用一次
默认情况下第一次访问该Servlet的时候,实例化对象
第二次访问该Servlet不会创建新的对象,
所以Servlet是单例模式。
加载方式:
a)延迟加载 默认
当第一次访问的时候加载该对象
b)预先加载
当tomcat启动的时候加载该对象
修改加载方式:web.xml指定Servlet的加载模式
在Servlet标签中添加:
<load-on-startup>num</load-on-startup>
num>=0预先加载
num越小越先加载
num<0延迟加载
num默认是-1
第二个阶段:初始化对象 只调用一次
加载和实例化对象之后就调用init()
初始化参数 init()
第三个阶段:处理请求:服务方法 调用多次
调用service()
每一个请求来了,启动线程调用该方法处理请求。
Servlet对象只有一个,属于单例模式。
Servlet线程不安全.
如何控制:
a)加锁synchronized (this) {}
效率低
b)把一些受影响的变量尽量定义成局部变量。
局部变量是多线程不共享的变量。
第四个阶段:销毁对象 只调用一次
调用destory()
当tomcat正常关闭或者
当web应用重新部署的时候会销毁对象。
六,过滤器
作用:在一个请求去访问某个资源的时候,filter可以在这个
请求访问到这个资源之前,把请求拦下,然后做出一系
列的处理或者判断(比如编码的转换,信息的过滤、权
限的判断、是否已经登录的验证等等),最后filter再
决定是否要让这个请求去访问那个资源
日志,事务,字符乱码,访问权限的过滤
创建:实现Filter接口
a)init:这个过滤器类被服务器创建对象的时候会调用到这个方法。
b)destroy:过滤器对象被销毁的时候会调用这个方法。
c)doFilter:当过滤器拦截到请求的时候,会调用这个doFilter.
d) 如果有多个过滤器按顺序执行
七,监听器
作用:监听web中的一些事件的发生,如果某些事件一旦发生了,
那么这个监听器就会调用指定方法进行处理.监听request对象的创建和销毁
创建:监听request相关的接口
ServletRequestListener接口
监听session相关的接口
HttpSessionListener接口
监听application相关的接口
ServletContextListener接口
八,Web应用的四大范围
pageContext:指的是一个页面的范围,
只在JSP中使用。
request:指的是一个请求的范围
可以包含多个页面
内部跳转
session:指的是一个会话的范围
可以包含多个request
ServletContext:指的是一个web应用的范围
可以包含多个session
jsp
1,jsp的九中内置对象
page:当前的jsp页面,指针this
pageContext:当前的jsp页面的上下文
request:封装请求的信息
response:封装响应
session:会话
application:指web应用,
就是SerlvetContext
out:输出流
config:配置信息
exception:异常信息
当isErrorPage=true时,才可以使用该对象
2,jsp 的生命周期
1) 翻译阶段 jsp--->.java
当容器接受到客户端第一次对jsp的请求后,
先判断被请求的jsp是否存在,
若不存在返回404错误,若存在,
将该jsp先翻译成一个Servlet。
处理请求的方法:_jspService()
2) 编译阶段 .java---->.class
将翻译后的Servlet的源文件编译成一个字节码文件,
然后由容器将其装载进虚拟机并实例化(单例)
3) 执行阶段
调用翻译后的Servlet的对应的init()、
service方法、destroy()。
补充:
1) 如果被请求的jsp源文件内容发生变化,
那么要重新将jsp翻译成Servlet,再编译、
装载和实例化,最后运行Servlet。
2) 如果第二次请求jsp时,
此时若被请求的jsp已经有对应的Servlet实例,
那么就直接运行该Servlet。
3,jsp和servlet的相同点和不同
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
4,JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。