Servlet 是用java 编写的服务器端程序, 其主要功能在于交互式的浏览和修改数据 ,生成动态web 内容, 狭义的Servlet 是指java 语言实现的一个接口 , 广义的Servlet 是指任何实现了这个Servlet 接口的类,一般情况下 ,理解为后者。
Servlet 代码结构解析:
Servlet 在Web.xml 中的配置 :
Servlet 的继承关系
Servlet 接口概述
定义了所有Servlet 需要实现的方法。
Servlet接口常用方法:
Servlet 的生命周期:
请求方式
GET :
a、 目的: 向服务器发索取数据的一种请求
b、 传参方式: 以URL进行传参
c、 大小: 各个版本的浏览器对URL长度是有限制的, 这就决定参数长度也有限制, IE对URL长度的限
制是2083字节。
d、 安全性: 较POST而言更低。
POST:
a、 目的: Post是向服务器提交数据的一种请求
b、 传参方式: 将参数作为请求的正文部分
c、 大小: 跟服务器的处理程序的处理能力有关系, IIS6.0默认是100KB
d、 安全性: 较GET而言更高。
请求处理
HttpServletRequest与HttpServletResponse。
Servelt 工作流程;
HttpServletRequest常用方法:
HttpServletResponse常用方法
Javaweb 常用分包结构 :
总结:
一: Servlet 的应用
实现HttpServlet 接口 : 实现dopost()或doget()方法
Servlet配置: 编辑部署描述文件web.xml
启动Tomcat,访问Servlet
二 : Servlet 的生命周期
1 类加载 ; Servlet第一次被请求时,容器进行servlet类加载
2 实例化 : Servlet 容器创建Servlet
3 初始化 : 调用init ( ) 方法 ,进行初始化配置。
4 请求处理:通过service 传入参数 判断 执行doGet ( ) 或者( )doPost( ) 方法
5 服务终止 : 执行destory( )方法
Servlet 中的页面跳转
跳转方式 :
1 重定向 : response . sendRedirect( URL);
特点: a URL 会改变
b 两次请求
c 可以跳转到本工程页面,也可以跳转到其他web 工程页面
2 请求转发: request.getRuquestDispache( URL ) . forward( request , response)
特点: a URL不会改变
b 一次请求
c 只可以跳转到本工程的页面
三大作用域 :
一 : HttpServletRequest
1. 级别:请求级别(存活时间最短)
2. 创建:服务器接收到一个客户端请求时,服务器会为该请求创建一个HttpServletRequest对象
3. 获取:直接在service()、doGet()或doPost()等方法中使用
4. 死亡:该请求完成时
二 : HttpSession
1. 级别:会话级别
2. 创建:当客户端与服务器建立一个会话时,服务器会为该客户端创建一个HttpSession对象
3. 获取:request.getSession(true);--true表示如果当前会话没有HttpSession对象则自动创建
4. 死亡:
A. 超时:一般默认为30分钟(可以通过调用session的setMaxInactiveInterval(int time)方法设置,单位为秒)
B. 调用invalidate()方法。
三. ServletContext
1. 级别:应用级别(存活时间最长)
2. 创建:服务器服务器启动时,会为每个应用程序创建一个HttpServletContext对象
3. 获取:getServletContext()。
4. 死亡:服务器关闭时。
Sevlet中的三个作用域
Servlet中常用来存储数据的三大作用域:按照使用范围从小到大排列为: HttpServletRequest、HttpSession、ServletContext三个作用域,下边详细介绍这三个作用域。
1、HttpServletRequest作用域:
存入数据的方法request.setAttribute("User",user);(这里是把user放入到request作用域中,key是User,value是user),此作用域保存的数据只是针对一次请求。使用该对象保存数据,一次请求内数据有效。请求转发是属于一次请求的,所以放在此作用域中的数据,在一个页面转发多个页面数据都是有效的。
作用域创建时间:客户端向服务器发送一次请求时创建。
销毁时间:服务器为这次请求作出响应之后,销毁request.
2、HttpSession作用域:
针对一次会话,使用该对象保存数据,数据保存在服务器上,一次会话(多个请求)内数据有效,如果关闭一次浏览器,结束这次回话,再次打开的时候session就失效了。
创建时间:服务器第一次调用getSession()方法的时候,服务器创建session对象。
request.getSession(true);
销毁时间:销毁有三种情况
(1)服务器非正常关闭(正常关闭时:Session被序列化);
(2):Session过期,xml文件配置默认时间是30分钟。
(3):手动调用Session的invalidate的方法。
3、SevletContext作用域:application
针对一个web应用。一个web应用只有一个SevletContext对象,使用该对象保存的数据在整个web应用中都有效。
创建时间:服务器启动的时候。
销毁时间:服务器关闭的时候或者项目移除的时候。
总结:
如果数据保存在request对象中,一般使用请求转发,来获取。因为请求转发是只有一次请求的。但是如果是重定向,因为重定向是多次请求,所以不能使用request中的数据,可以使用session或context中的。
注意
如果能使用request作用域就使用request作用域,如果request作用域用不了,则使用session作用域。会话级别的数据要是用session作用域,比如说登录信息,银行账号,如果数据是系统级别的,那么使用application作用域
4、三个作用域通用API:
存放数据:setAttribute(name,value)
获取数据:getAttribute(name);
删除数据:removeAttribute(name);
常用方法: