JAVA WEB Servlet

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常用来存储数据的三大作用域:按照使用范围从小到大排列为: HttpServletRequestHttpSessionServletContext三个作用域,下边详细介绍这三个作用域。

1HttpServletRequest作用域:

       存入数据的方法request.setAttribute("User",user);(这里是把user放入到request作用域中,keyUser,valueuser),此作用域保存的数据只是针对一次请求。使用该对象保存数据,一次请求内数据有效。请求转发是属于一次请求的,所以放在此作用域中的数据,在一个页面转发多个页面数据都是有效的。
     作用域创建时间:客户端向服务器发送一次请求时创建。
      销毁时间:服务器为这次请求作出响应之后,销毁request.

2HttpSession作用域:

        针对一次会话,使用该对象保存数据,数据保存在服务器上,一次会话(多个请求)内数据有效,如果关闭一次浏览器,结束这次回话,再次打开的时候session就失效了。
       创建时间:服务器第一次调用getSession()方法的时候,服务器创建session对象。
    request.getSession(true);
销毁时间:销毁有三种情况
    1)服务器非正常关闭(正常关闭时:Session被序列化);
    2):Session过期,xml文件配置默认时间是30分钟。
    3):手动调用Sessioninvalidate的方法。

3SevletContext作用域:application

针对一个web应用。一个web应用只有一个SevletContext对象,使用该对象保存的数据在整个web应用中都有效。
 创建时间:服务器启动的时候。
销毁时间:服务器关闭的时候或者项目移除的时候。
总结:
如果数据保存在request对象中,一般使用请求转发,来获取。因为请求转发是只有一次请求的。但是如果是重定向,因为重定向是多次请求,所以不能使用request中的数据,可以使用sessioncontext中的。
注意 
如果能使用request作用域就使用request作用域,如果request作用域用不了,则使用session作用域。会话级别的数据要是用session作用域,比如说登录信息,银行账号,如果数据是系统级别的,那么使用application作用域

4、三个作用域通用API

存放数据:setAttribute(name,value)
获取数据:getAttribute(name);
   删除数据:removeAttribute(name);
 
常用方法: 
 
 
原文地址:https://www.cnblogs.com/thelovelybugfly/p/10821914.html