Java-Servlet的学习和使用

目录

Servlet
概念
API
原理
生命周期
工作原理

Servlet 概念

它是一个在 Web 服务器上的 JVM 内运行的 java 程序。它用于开发动态 Web 应用。
CGI 是进程模型 ,Servlet 线程模型 更轻量

Servlet API

java.lang.Object
    |_extended byjavax.servlet.GenericServlet
            |_extended byjavax.servlet.http.HttpServlet

有 3 种方法来创建一个 servlet:
1)通过扩展HttpServlet
2)通过扩展GenericServlet
3)通过实现Servlet接口

javax.servlet 中的API

javax.servlet
接口
实现类
Servlet
ServletRequest
ServletResponse
ServletConfig
ServletContext
SingleThreadModel
RequestDispatcher
ServletRequestListener
ServletRequestAttributeListener
ServletContextListener
ServletContextAttributeListener
Filter
FilterConfig
FilterChain
GenericServlet
ServletInputStream
ServletOutputStream
ServletException
ServletRequestWrapper
ServletRequestEvent
ServletResponseWrapper
ServletContextEvent
ServletRequestAttributeEvent
ServletContextAttributeEvent
UnavailableException
javax.servlet.http
接口
实现类
HttpSession
HttpServletRequest
HttpServletResponse
HttpSessionAttributeListener
HttpSessionListener
HttpSessionBindingListener
HttpSessionActivationListener
HttpSessionContext
HttpServlet
Cookie
HttpSessionEvent
HttpSessionBindingEvent
HttpServletRequestWrapper
HttpServletResponseWrapper
HttpUtils

原理

生命周期

Servlet 生命周期包含五个步骤:1)加载 Servlet,2)创建 Servlet 实例,3)调用init()一次,4)为每个客户端请求重复调用service(),5)调用destroy()

步骤 1:加载 Servlet
当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。

步骤 2:创建 Servlet 实例
一旦加载了所有 Servlet 类,servlet 容器就会创建每个 servlet 类的实例。 Servlet 容器每个 servlet 类只创建一个实例,并且对 servlet 的所有请求都在同一个 servlet 实例上执行。

步骤 3:调用init()方法
一旦实例化了所有 servlet 类,就会为每个实例化的 servlet 调用init()方法。此方法初始化 servlet。您可以在部署描述符(web.xml)文件中指定某些init参数。例如,如果 servlet 的值>= 0,则在 Web 容器启动期间立即调用其init()方法。
您可以在web.xml文件中指定元素,如下所示:

<servlet>
 <servlet-name>MyServlet</servlet-name>
 <servlet-class>com.beginnersbook.MyServletDemo</servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>

现在,在 Web 容器启动期间将调用相应 servlet 类com.beginnersbook.MyServletDemoinit()方法。

注意:init()方法在 servlet 的生命周期中只调用一次。

步骤 4:调用service()方法
每次 Web 服务器收到 servlet 请求时,它都会产生一个调用service()方法的新线程。如果 servlet 是GenericServlet,那么请求由service()方法本身提供,如果 servlet 是HttpServlet,则service()方法接收请求并根据请求的类型将其分派给正确的处理程序方法。

例如,如果它是Get请求,则service()方法会通过使用请求参数调用doGet()方法将请求分派给doGet()方法。类似地,诸如PostHeadPut等的请求被 servlet 的service()方法分派给相应的处理程序doPost()doHead()doPut()等。

Service
'doGet'
service
'doPost'
'doHead'
'doOptions'
'doTrace'
'doPut'
'doDelete'
Initialization
Request
Response
Destruction

注意:与只调用一次的init()destroy()不同,在 servlet 生命周期中可以多次调用service()方法。只要不销毁 servlet,就会为每个客户端请求调用service()方法。
在生命周期的所有 5 个步骤中,这是多次执行的唯一步骤。

步骤 5:调用destroy()方法
当 servlet 容器关闭时(这通常在我们停止 Web 服务器时发生),它卸载所有 servlet 并为每个初始化的 servlet 调用destroy()方法。

工作原理

1)当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。在此步骤中,Servlet 容器创建ServletContext对象。ServletContex是一个接口,它定义了可以用来与 servlet 容器通信的方法集。

每个 webapp 只有一个ServletContext,这对所有 servlet 都是通用的。ServletContext有几个有用的方法,如addListener()addFilter()等。现在我不解释它们,因为我将在一个关于ServletContext的单独文本中介绍它们。

2)一旦加载了 servlet,servlet 容器就会创建 servlet 类的实例。对于每个实例化的 servlet,调用其init()方法。

3)客户端(用户浏览器)向某个端口上的 Web 服务器发送 Http 请求。每次 Web 服务器收到请求时,servlet 容器都会创建HttpServletRequestHttpServletResponse对象。HttpServletRequest对象提供对请求信息的访问,HttpServletResponse对象允许我们在将 http 响应发送到客户端之前对其进行格式化和更改。

servlet 容器生成一个新线程,该线程为每个客户端请求调用service()方法。service()方法根据请求类型将请求调度到正确的处理程序方法。

例如,如果服务器收到Get请求,则service()方法会通过使用请求参数调用doGet()方法将请求分派给doGet()方法。类似地,诸如PostHeadPut等的请求被 servlet 的service()方法分派给相应的处理程序doPost()doHead()doPut()等。

HttpServlet
'doGet'
service
'doPost'
Client
Server

4)当 servlet 容器关闭时,它会卸载所有 servlet 并为每个初始化的 servlet 调用destroy()方法

配置

# Java EE: XML Schemas for Java EE Deployment Descriptors


## welcome-file-list 
	自定义的欢迎页面文件, 默认index.html(htm 、jsp)
## load-on-startup 
	启动时是否加载  >=0 的会在启动时加载, 默认懒加载(请求过来时再加载) 
## ServletRequest 接口

## RequestDispatcher 方法
	forword():  对客户的最终回复在下一页 
	include(): 对客户的最终回复还在当前页
	
## ServletConfig 接口 
	每个Servlet一个  对应<init-param>
## ServletContext 接口
	全局容器创建一个  对应<context-param> 
## ServletResponse 接口 

## HttpSession 

## Cookie 

## HttpServletMapping 

## Servlet 分页 

## Servlet Weld 
带有Weld 的 依赖注入

## Servlet 上传文件
	multipart/form-data
## 服务 XML 

## foreach 标签

## jsGrid 组件 
	json
## Servlet JSON 使用

## Servlet Http 标头

## Servlet 复选框 

## Servlet 发送图像 
	
## Servlet JQuery 列表 

## Servlet FreeMarker JdbcTemplate 

## JQuery 自动补全 

## Servlet PDF 
	itext
## Servlet WAR 内读取CSV文件
	opencsv
## EasyUI  datagrid 
	easy-ui
## Servlet Restful 客户端 

## Servlet Log4j

## Servlet 图表
	jfreechart 
## Servlet 读取网页 
	commons-validator

## 嵌入式Tomcat 

参考资料

Servlet 教程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值