Servlet

Servlet简介

  • Servlet是一个符合特定规范的Java程序,基于Java技术的Web组件,Servlet运行在服务器端,由Servlet容器所管理,用于处理客户请求并做出响应
  • 说明:Servlet容器也叫Servlet引擎,是Web服务器或应用程序服务器的一部分,
  • 用于在发送和请求之上提供网络服务,
  • 管理和运行Servlet/JSP的容器也称为Web容器
  • Servlet主要用于生成动态的内容。他可以接受和处理请求,并动态生成HTML内容对客户端进行响应
Servlet与JSP的关系
- 服务器在运行JSP时,将JSP转化为Java类并编译执行,动态获取数据生成HTML,最终显示在客户端浏览器上。 - JSP在运行时会被Web容器翻译为一个Servlet,动态响应内容是通过这个Servlet类产生的。Servlet是Java web 动态交互技术的重要组件,也是JSP技术基础,容器运行JSP时,需要现将其内容翻译成Servlet的语法,再按照Servlet的方式运行。
Servlet API(开发Servlet需要用到的主要接口和类)
Servlet接口
方法名称功能描述
void init(ServletConfig config)由servlet容器调用,用于完成Servlet对象在处理客户端请求前的初始化工作
void service(ServletRequest req,ServletResponse res)由servlet容器调用,用于处理客户端的请求
void destroy()由servlet容器调用,释放Servlet对象所使用的资源,销毁实例
ServletConfig getServletConfig()返回ServletConfig对象,该对象包含此Servlet的初始化和启动参数。返回的ServletConfig对象是传递给init()方法的对象
String getServletInfo()返回有关Servlet的信息,如作者,版本和版权。返回的是字符串的纯文本,而不是任何种类的标记(如HTML,XML等)
GenericServlet抽象类
- 实现了Servlet接口和ServletConfig接口,给出了除了service()方法之外的其他方法的简单实现。定义了通用的,不依赖于协议的Servlet.
方法名称功能描述
void init(ServletConfig config)对Servlet接口中init(ServletConfig config)方法的实现,并将ServletConfig实例进行保存以备用。此方法还有一个无参的重载方法init(),可用于子类中重写,以实现用户定制的初始化工作
String getInitParameter(String name)通过调用ServletConfig的getInitParameter(String name)方法获取web.xml中设置的以name命名的初始化参数
ServletContext getServletContext()返回ServletContext对象的引用
HttpServlet抽象类
- 抽象类HttpServlet 继承自GenericServlet类,具有与GenericServlet类似的方法,并且提供了与Http相关的实现,支持对HTTP的post和get等请求方式进行差异化处理。 - 在开发中如果需要编写Servlet,主要就是继承HttPServlet类
方法名称功能描述
public void service(ServletRequest req,ServletResponse res)GenericServlet类中service()方法的实现,将请求分发给protected void service(ServletRequest req,ServletResponse res)方法
protected void service(ServletRequest req,ServletResponse res)接收到HTTP请求,并将它们分发给次类中定义的doXXX()方法
protected void doXXX(ServletRequest req,ServletResponse res)根据请求方式的不同分别定义的处理方法,如doGet(),doPost()等
ServletConfig接口
- Servlet容器使用ServletConfig接口的实例在Servlet初始化期间向其传递配置信息
方法名称功能描述
String getInitParameter(String name)获取web.xml中设置的以name命名的初始化参数值
ServletContext getServletContext()返回Servlet的上下文对象引用
ServletContext接口
- ServletContext接口表示 一个web应用的上下文,Servlet接口使用ServletConfig接口定义的方法与它的Servlet容器进行通信 - JSP内置对象application就是ServletContext的实例 - Servlet容器厂商负责提供ServletContext接口的实现, 容器在应用程序加载时创建ServletContext对象, ServletContext对象被Servlet容器的所有Servlet共享。
方法名称功能描述
String getInitParameter(String name)获取web.xml中设置的以name命名的初始化参数值,可以再部署中使用元素定义
void setAttribute(String name,Object obj)设置名称为name的属性
Object getAttribute(String name)获取名称为name的属性
String getRealPath(String path)返回参数所代表的目录的真实路径
void log(String message)记录一般日志信息
ServletRequest接口和HttpServletRequest接口
ServletRequest接口
- 当客户请求时,由Servlet容器创建ServletRequest对象用于封装客户的请求信息,这个对象将被容器作为serevice()方法的参数之一传递给Servlet,Servlet对象能够利用ServletRequest对象获取客户端的请求数据
方法名称功能描述
Object getAttribute(String name)获取名称为name的属性值
void setAttribute(String name,Object obj)在请求中保存名称为name的属性
void removeAttribute(String name)清除请求中名称为name的属性
String getCharacterEncoding()返回请求体所使用的字符编码
void setCharacterEncoding(String charset)设置请求体的字符编码
String getParameter(String name)返回指定请求参数的值
String[] getParameterValues(String name)返回指定请求参数的全部值
ReqeustDisPatcher(String path)返回指定路径的请求分发对象
HttpServletRequest接口
- 位于javax.servlet.http包中,继承ServletRequest接口 - 除了继承ServletRequest接口中的方法,还增加了读取请求信息的方法
方法名称功能描述
String getContextPath()返回URI中表示请求上下文的路径,上下文路径是请求URI的开始部分
Cookie[] getCookies()返回客户端在此请求中发送的所有cookie对象
HttPSession getSession()返回和此请求相关的session,如果没有给客户端分配session,则创建一个新的session
String getMethod()返回此次请求所使用的HTTP方法的名字,如get,post
String getHeader(String name)获取指定的请求头信息
ServletResponse接口和HttpServletResponse接口
ServletResponse接口
- 用于封装响应的数据,并且同时将这两个对象一并作为参数传递给Servlet。 - Servlet 利用ServletRequest对象获取客户端的请求数据,经过处理后由ServletResponse对象响应数据
方法名称功能描述
PrintWriter getWriter返回PrintWriter对象,用于向客户端发送文本
String getCharacterEncoding()返回在响应中发送的正文所使用的字符编码
void setCharacterEncoding(String charset)设置发送到客户端的响应的字符编码
void setContentType(String type)设置发送到客户端响应的内容类型,此时响应的内容尚未提交
HttpServletResponse接口
- 继承自ServletResponse接口,用于对客户端的请求执行响应 - 除了具有ServletResponse接口的方法外,还增加了新的方法
方法名称功能描述
void addCookie(Cookie cookie)增加一个cookie到响应中,这个方法可以多次调用,设置多个cookie
String addHeader(String name,String value)将一个名称为name,值为value的响应报头添加到响应中
void sendRedirect(String location)发送一个临时的重定向响应到客户端,以便客户端访问新的URL
void encodeURL(String url)使用session ID对用于重定向的URL进行编码
web.xml中常用的设置方法
- /xxx,精确匹配 - /xxx/*,路径匹配,如果没有精确匹配,对/xxx/路径的所有请求将有该Servlet进行处理 - *.xxx,如果没有精确匹配和路径匹配,则所有针对.xxx扩展名的请求将由该Servlet处理。

扩展:如果需要指定启动时Servlet的加载次序,可以在元素中增加元素,该元素的值必须是整数,如果为负数或没有指定这个元素,容器将在客户端首次访问时进行加载;如果为正数或0,容器加载启动时根据值得顺序加载Servlet,且值越小加载优先级越高

Servlet实现控制器

Servlet与JSP的区别

- 本质:服务器端运行的Java应用程序 - jsp文件在用户第一次请求时会编译成Servlet,然后有这个Servlet处理客户的请求,所以JSP也可以看成是运行时的Servlet。 - JSP页面在HTML元素中嵌入Java脚本和JSP标记,比使用传统的Servlet技术开发表示层更加容易。JSP的部署也更加简单,JSP容器(Servlet容器)会对扩展名.jsp的URL统一配置,将其转换为Servlet为客户端服务,无需为每一个JSP文件进行配置URL映射 - JSP页面HTML元素与Java脚本混合的语法,对于处理过程中编写流程控制代码,数据访问代码等却是不利的,难以模块化开发及重用,此时更适合采用传统Java类的形式进行开发。故而使用Servlet在服务器上解释和执行浏览器的请求,充当客户端和其他层之间的中间层角色更加合适。 - jsp可以方便的开发表示层组件,而Servlet适合编写流程控制代码

实现Servlet控制器

- Servlet充当控制器的角色,他接受请求,负责数理化JavaBean对象业务逻辑进行处理,并为JSP页面准备封装数据的JavaBean对象,接着将请求分发给适当的JSP页面来产生响应

实现Servlet的生命周期

- 通过Servlet接口中的init(),service()和destroy()方法来表示的,即Servlet从创建到销毁的过程,包括如何加载和实例化,初始化,处理请求,以及如何被销毁
加载和实例化
- Servlet不能单独运行,必须部署在Servlet容器(web服务器)中有容器实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内管理Servlet。当Servlet容启动或者当客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet的实例,如果不存在,就创建一个Servlet。如果存在该Servlet实例,就直接从内存中取出该实例响应请求。
初始化
- 在Servlet完成Servlet实例化后,Servlet容器将调用Servlet的init()方法进行初始化,初始化的目的是让Servlet对象在处理客户端请求前完成一些准备或资源加载工作,如:设置数据库连接参数,建立jdbc连接,或者建立对其他资源的引用。 - 注意:对于每一个Servlet实例,init()方法只被调用一次。
服务
- Servlet被初始化后就处于能被响应的就绪状态。当Servlet容器接收客户端请求时,调用Servlet的service()方法处理客户端请求,HttpServlet的service()方法会根据get或post请求转调doGet()或doPost()方法,Servlet实例通过ServletRequest对象获得客户端的请求,通过调用ServletResponse对象的方法设置响应信息
销毁
- Servlet的实例由Servlet容器所创建,所以实例的销毁也是有容器来完成的,Servlet容器判断一个Servlet是否应当被释放时(容器关闭或需要回收资源),容器就会调用Servlet的destroy()方法,该方法指明那些资源可以被系统回收,而不是由destroy()方法直接回收Servlet实例。
Servlet生命周期演示
graph LR
实例化-->Servlet容器创建Servlet的实例
初始化-->该容器调用init方法
服务-->如果请求Servlet,则容器调用service方法
销毁-->销毁实例之前调用destroy方法

初始化参数及访问应用上下文

获得Servlet初始化参数
  • 通过初始化参数可以更灵活的控制Servlet的运行时的行为

  • 设置初始化参数需修改web.xml文件,在元素中增加元素

    示例:

    //部署Servlet

    helloServlet
    cn.bdqn.test.HelloServlet
    //设置初始化参数

    innitParam
    Hello Servlet



    HelloServlet
    /HelloServlet


    说明:定义Servlet的初始化参数时使用元素。
    元素是元素的子元素,使用 元素必须包括元素和元素
    元素定义初始化参数的名字,元素指定初始化参数的值。
    调用:通过ServletConfig实例的getInitParameter(String name)方法进行访问。例如:String innitParam=getInitParameter(“innitParam”)

获得上下文参数
- 可以被更多的web应用组件访问
<web-app>
  <context-param>
  	<param-name>contextParam</param-name>
  	<param-value>ContextParamValue</param-value>
  </context-param>
</web-app>
说明: 使用 元素声明web应用的全局范围参数, 元素包括 (指定参数的名字)元素和(指定参数的值)元素

调用:String contextParm=this.getServletContext().getInitParameter(“contextParam”)## Servlet简介

  • Servlet是一个符合特定规范的Java程序,基于Java技术的Web组件,Servlet运行在服务器端,由Servlet容器所管理,用于处理客户请求并做出响应
  • 说明:Servlet容器也叫Servlet引擎,是Web服务器或应用程序服务器的一部分,
  • 用于在发送和请求之上提供网络服务,
  • 管理和运行Servlet/JSP的容器也称为Web容器
  • Servlet主要用于生成动态的内容。他可以接受和处理请求,并动态生成HTML内容对客户端进行响应
Servlet与JSP的关系
- 服务器在运行JSP时,将JSP转化为Java类并编译执行,动态获取数据生成HTML,最终显示在客户端浏览器上。 - JSP在运行时会被Web容器翻译为一个Servlet,动态响应内容是通过这个Servlet类产生的。Servlet是Java web 动态交互技术的重要组件,也是JSP技术基础,容器运行JSP时,需要现将其内容翻译成Servlet的语法,再按照Servlet的方式运行。
Servlet API(开发Servlet需要用到的主要接口和类)
Servlet接口
方法名称功能描述
void init(ServletConfig config)由servlet容器调用,用于完成Servlet对象在处理客户端请求前的初始化工作
void service(ServletRequest req,ServletResponse res)由servlet容器调用,用于处理客户端的请求
void destroy()由servlet容器调用,释放Servlet对象所使用的资源,销毁实例
ServletConfig getServletConfig()返回ServletConfig对象,该对象包含此Servlet的初始化和启动参数。返回的ServletConfig对象是传递给init()方法的对象
String getServletInfo()返回有关Servlet的信息,如作者,版本和版权。返回的是字符串的纯文本,而不是任何种类的标记(如HTML,XML等)
GenericServlet抽象类
- 实现了Servlet接口和ServletConfig接口,给出了除了service()方法之外的其他方法的简单实现。定义了通用的,不依赖于协议的Servlet.
方法名称功能描述
void init(ServletConfig config)对Servlet接口中init(ServletConfig config)方法的实现,并将ServletConfig实例进行保存以备用。此方法还有一个无参的重载方法init(),可用于子类中重写,以实现用户定制的初始化工作
String getInitParameter(String name)通过调用ServletConfig的getInitParameter(String name)方法获取web.xml中设置的以name命名的初始化参数
ServletContext getServletContext()返回ServletContext对象的引用
HttpServlet抽象类
- 抽象类HttpServlet 继承自GenericServlet类,具有与GenericServlet类似的方法,并且提供了与Http相关的实现,支持对HTTP的post和get等请求方式进行差异化处理。 - 在开发中如果需要编写Servlet,主要就是继承HttPServlet类
方法名称功能描述
public void service(ServletRequest req,ServletResponse res)GenericServlet类中service()方法的实现,将请求分发给protected void service(ServletRequest req,ServletResponse res)方法
protected void service(ServletRequest req,ServletResponse res)接收到HTTP请求,并将它们分发给次类中定义的doXXX()方法
protected void doXXX(ServletRequest req,ServletResponse res)根据请求方式的不同分别定义的处理方法,如doGet(),doPost()等
ServletConfig接口
- Servlet容器使用ServletConfig接口的实例在Servlet初始化期间向其传递配置信息
方法名称功能描述
String getInitParameter(String name)获取web.xml中设置的以name命名的初始化参数值
ServletContext getServletContext()返回Servlet的上下文对象引用
ServletContext接口
- ServletContext接口表示 一个web应用的上下文,Servlet接口使用ServletConfig接口定义的方法与它的Servlet容器进行通信 - JSP内置对象application就是ServletContext的实例 - Servlet容器厂商负责提供ServletContext接口的实现, 容器在应用程序加载时创建ServletContext对象, ServletContext对象被Servlet容器的所有Servlet共享。
方法名称功能描述
String getInitParameter(String name)获取web.xml中设置的以name命名的初始化参数值,可以再部署中使用元素定义
void setAttribute(String name,Object obj)设置名称为name的属性
Object getAttribute(String name)获取名称为name的属性
String getRealPath(String path)返回参数所代表的目录的真实路径
void log(String message)记录一般日志信息
ServletRequest接口和HttpServletRequest接口
ServletRequest接口
- 当客户请求时,由Servlet容器创建ServletRequest对象用于封装客户的请求信息,这个对象将被容器作为serevice()方法的参数之一传递给Servlet,Servlet对象能够利用ServletRequest对象获取客户端的请求数据
方法名称功能描述
Object getAttribute(String name)获取名称为name的属性值
void setAttribute(String name,Object obj)在请求中保存名称为name的属性
void removeAttribute(String name)清除请求中名称为name的属性
String getCharacterEncoding()返回请求体所使用的字符编码
void setCharacterEncoding(String charset)设置请求体的字符编码
String getParameter(String name)返回指定请求参数的值
String[] getParameterValues(String name)返回指定请求参数的全部值
ReqeustDisPatcher(String path)返回指定路径的请求分发对象
HttpServletRequest接口
- 位于javax.servlet.http包中,继承ServletRequest接口 - 除了继承ServletRequest接口中的方法,还增加了读取请求信息的方法
方法名称功能描述
String getContextPath()返回URI中表示请求上下文的路径,上下文路径是请求URI的开始部分
Cookie[] getCookies()返回客户端在此请求中发送的所有cookie对象
HttPSession getSession()返回和此请求相关的session,如果没有给客户端分配session,则创建一个新的session
String getMethod()返回此次请求所使用的HTTP方法的名字,如get,post
String getHeader(String name)获取指定的请求头信息
ServletResponse接口和HttpServletResponse接口
ServletResponse接口
- 用于封装响应的数据,并且同时将这两个对象一并作为参数传递给Servlet。 - Servlet 利用ServletRequest对象获取客户端的请求数据,经过处理后由ServletResponse对象响应数据
方法名称功能描述
PrintWriter getWriter返回PrintWriter对象,用于向客户端发送文本
String getCharacterEncoding()返回在响应中发送的正文所使用的字符编码
void setCharacterEncoding(String charset)设置发送到客户端的响应的字符编码
void setContentType(String type)设置发送到客户端响应的内容类型,此时响应的内容尚未提交
HttpServletResponse接口
- 继承自ServletResponse接口,用于对客户端的请求执行响应 - 除了具有ServletResponse接口的方法外,还增加了新的方法
方法名称功能描述
void addCookie(Cookie cookie)增加一个cookie到响应中,这个方法可以多次调用,设置多个cookie
String addHeader(String name,String value)将一个名称为name,值为value的响应报头添加到响应中
void sendRedirect(String location)发送一个临时的重定向响应到客户端,以便客户端访问新的URL
void encodeURL(String url)使用session ID对用于重定向的URL进行编码
web.xml中常用的设置方法
- /xxx,精确匹配 - /xxx/*,路径匹配,如果没有精确匹配,对/xxx/路径的所有请求将有该Servlet进行处理 - *.xxx,如果没有精确匹配和路径匹配,则所有针对.xxx扩展名的请求将由该Servlet处理。

扩展:如果需要指定启动时Servlet的加载次序,可以在元素中增加元素,该元素的值必须是整数,如果为负数或没有指定这个元素,容器将在客户端首次访问时进行加载;如果为正数或0,容器加载启动时根据值得顺序加载Servlet,且值越小加载优先级越高

Servlet实现控制器

Servlet与JSP的区别

- 本质:服务器端运行的Java应用程序 - jsp文件在用户第一次请求时会编译成Servlet,然后有这个Servlet处理客户的请求,所以JSP也可以看成是运行时的Servlet。 - JSP页面在HTML元素中嵌入Java脚本和JSP标记,比使用传统的Servlet技术开发表示层更加容易。JSP的部署也更加简单,JSP容器(Servlet容器)会对扩展名.jsp的URL统一配置,将其转换为Servlet为客户端服务,无需为每一个JSP文件进行配置URL映射 - JSP页面HTML元素与Java脚本混合的语法,对于处理过程中编写流程控制代码,数据访问代码等却是不利的,难以模块化开发及重用,此时更适合采用传统Java类的形式进行开发。故而使用Servlet在服务器上解释和执行浏览器的请求,充当客户端和其他层之间的中间层角色更加合适。 - jsp可以方便的开发表示层组件,而Servlet适合编写流程控制代码

实现Servlet控制器

- Servlet充当控制器的角色,他接受请求,负责数理化JavaBean对象业务逻辑进行处理,并为JSP页面准备封装数据的JavaBean对象,接着将请求分发给适当的JSP页面来产生响应

实现Servlet的生命周期

- 通过Servlet接口中的init(),service()和destroy()方法来表示的,即Servlet从创建到销毁的过程,包括如何加载和实例化,初始化,处理请求,以及如何被销毁
加载和实例化
- Servlet不能单独运行,必须部署在Servlet容器(web服务器)中有容器实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内管理Servlet。当Servlet容启动或者当客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet的实例,如果不存在,就创建一个Servlet。如果存在该Servlet实例,就直接从内存中取出该实例响应请求。
初始化
- 在Servlet完成Servlet实例化后,Servlet容器将调用Servlet的init()方法进行初始化,初始化的目的是让Servlet对象在处理客户端请求前完成一些准备或资源加载工作,如:设置数据库连接参数,建立jdbc连接,或者建立对其他资源的引用。 - 注意:对于每一个Servlet实例,init()方法只被调用一次。
服务
- Servlet被初始化后就处于能被响应的就绪状态。当Servlet容器接收客户端请求时,调用Servlet的service()方法处理客户端请求,HttpServlet的service()方法会根据get或post请求转调doGet()或doPost()方法,Servlet实例通过ServletRequest对象获得客户端的请求,通过调用ServletResponse对象的方法设置响应信息
销毁
- Servlet的实例由Servlet容器所创建,所以实例的销毁也是有容器来完成的,Servlet容器判断一个Servlet是否应当被释放时(容器关闭或需要回收资源),容器就会调用Servlet的destroy()方法,该方法指明那些资源可以被系统回收,而不是由destroy()方法直接回收Servlet实例。
Servlet生命周期演示
graph LR
实例化-->Servlet容器创建Servlet的实例
初始化-->该容器调用init方法
服务-->如果请求Servlet,则容器调用service方法
销毁-->销毁实例之前调用destroy方法

初始化参数及访问应用上下文

获得Servlet初始化参数
  • 通过初始化参数可以更灵活的控制Servlet的运行时的行为

  • 设置初始化参数需修改web.xml文件,在元素中增加元素

    示例:

    //部署Servlet

    helloServlet
    cn.bdqn.test.HelloServlet
    //设置初始化参数

    innitParam
    Hello Servlet



    HelloServlet
    /HelloServlet


    说明:定义Servlet的初始化参数时使用元素。
    元素是元素的子元素,使用 元素必须包括元素和元素
    元素定义初始化参数的名字,元素指定初始化参数的值。
    调用:通过ServletConfig实例的getInitParameter(String name)方法进行访问。例如:String innitParam=getInitParameter(“innitParam”)

获得上下文参数
- 可以被更多的web应用组件访问
<web-app>
  <context-param>
  	<param-name>contextParam</param-name>
  	<param-value>ContextParamValue</param-value>
  </context-param>
</web-app>
说明: 使用 元素声明web应用的全局范围参数, 元素包括 (指定参数的名字)元素和(指定参数的值)元素

调用:String contextParm=this.getServletContext().getInitParameter(“contextParam”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值