Servlet:是用于 java 编写的服务器端程序,其使用 java servlet API,当客户机发送请求到服务器时,服务器可以将请求信息发送给 servlet,并让 servlet 建立起服务器返回给客户机的响应。当启动 web 服务器 or 客户机第一次请求服务时,可以自动装入 servlet,装入后,servlet 继续运行直到其他客户机发出请求。

Servlet 工作原理:客户端发起一个请求,servlet 调用 service()方法时请求进行响应,service 对请求的方式进行了匹配,选择调用 dopost 或者 doget 等这些方法,然后进入对应方法中调用逻辑层上的方法,实现对客户的响应。

Servlet 生命周期:

1)初始化阶段:调用 init()方法

在下列时刻 servlet 容器装载 servlet

1.servlet 容器启动时,自动装载某些 servlet

2. 在 servlet 容器启动后,客户首次向 servlet 发送请求

3.servlet 类文件被更新以后,重新装载 servlet。Servlet 被装载后,servlet容器创建一个 servlet 对象并调用 servlet 的 init 方法。在 servlet 生命周期内,init()方法只被调用过一次。

2)响应客户请求:调用 service()

响应客户请求:对于用户到达servlet 的请求,servlet 容器会创建特定于该请求的 servletRequest 和 servletResponse 对象, 然后调用 servlet 的 service 方法,service 方法从 servletRequest 对象中获得客户请求的信息, 处理该请求,并通过 servletResponse 对象向客户返回响应消息。

3)终止:调用 destory()

当 web 应用终止或者 Servlet 容器终止或 Servlet 容器重新装载 Servlet 新实例时,Servlet 容器会调用 Servlet 对象的destory 方法,在 destory 方法中可释放 Servlet 占用的资源。

Tomcat 就是Servlet 容器,Servlet 容器为Javaweb 应用提供运行时环境,它负责管理Servlet和Jsp的生命周期,以及管理他们的共享数据。

以下方法都由 servlet 容器调用:

1)构造函数:只有第一次请求 servlet 时,创建 servlet 实例,调用构造器,这说明 servlet 是单例的,所以有线程安全问题,只被调用一次

2)init:只被调用一次,在创建好实例后,立即被调用,用来初始化servlet。

3)service:被多次调用,每次请求都会调用 service,实际响应请求。

4)destory:只被调用一次,在当前 servlet 所在的 web 应用被卸载前调用,用于释放当前 servlet 所占用的资源。

JEE5.0中的Servlet相关的就下面这几个包:
javax.servlet
javax.servlet.jsp
java.servlet.jsp.el
java.servlet.jsp.tagext
而最用得多的就是
javax.servlet
javax.servlet.http
这两个包了.
forwared和direct区别:
文件名称:forward.jsp

1
2
3
4
5
6
<html>  
     <head><title> 跳转  </title> </head
     <body>  
         <jsp:forward page="index.htm"/>     
     </body>
 </html
redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去公安局办(index.html)临时身份证,这时你就会走出银行,自己前往公安局,地址栏变为index.html.
forward:请求转发:服务器行为,地址栏不变。举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp
 
forward,服务器获取跳转页面内容传给用户,用户地址栏不变
redirect,是服务器向用户发送转向的地址,redirect后地址栏变成新的地址

最新文章

  1. C# 发送邮件 附件名称为空
  2. matlab函数_连通区域
  3. QQ--模拟发表带图说说
  4. WebAPI2使用Autofac实现IOC属性注入完美解决方案
  5. VBA解密
  6. oracle 10G以上版本 树形查询新加的几个功能
  7. C#中判断子窗体是否存在
  8. 《Linux设备驱动程序》 笔记1
  9. linux第四周作业
  10. Vases and Flowers
  11. tomcat优化系列:修改运行内存
  12. java学习之数组排序一:选择排序
  13. 34 Search for a Range(目标数的范围Medium)
  14. 最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新
  15. 批量插入bulkcopy
  16. 《Linux内核设计与实现》第四章读书笔记
  17. HDU 6156 数位dp
  18. 【LOJ】#2079. 「JSOI2016」轻重路径
  19. cocos2dx学习之路
  20. [算法]最小的K个数和数据流中的中位数

热门文章

  1. 在Code::Blocks中编译和使用wxWidgets3.0.0教程
  2. MyBatis实例教程--以接口的方式编程
  3. 山科SDUST OJ Problem J :连分数
  4. PokeCats开发者日志(八)
  5. 使用window.getSelection()获取div中选中文字内容及位置
  6. 安装elasticsearch-1.7.1及中文IK和近义词配置
  7. 【bzoj4976】宝石镶嵌 乱搞+dp
  8. 【bzoj4817】[Sdoi2017]树点涂色 LCT+LCA+线段树
  9. AGC017C Snuke and Spells(巧妙的线段覆盖模型)
  10. xinetd不太详的详解