JavaWeb-18 (servlet)

一.servlet概述

就是一个java类,是javweb的规范之一,也是三大组件之一(serlvet,listener,filter)

作用:负责接收用户的请求以及做出响应。(之前是由doXxx.jsp)

快速入门:

  1. 实现servlet接口 不常用

  2. 继承HttpServlet抽象类 doGet doPost

完成servlet文件的编写后必须要实现配置

2种方式

注解 @webServlet("/路径")

web.xml中进行配置

servlet执行原理

(1)当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
(2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
(3)如果有,则在找到对应的<servlet-class>全类名
(4)tomcat会将字节码文件加载进内存,并且创建其对象
(5)调用其方法
<servlet>    
    <servlet-name>xxx</servlet-name>    
    <servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>    
    <servlet-name>xxx</servlet-name>   
    <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

二.JSP中的内置对象对应Servlet中的什么对象

JSP				   Servlet
request            serivce(request,response)   doPost(request,response)

session   		   request.getSession          HttpSession
applicaiton        this.getServletContext();   ServletContext
out				   response.getWriter()        PrintWriter

Cookie			   Cookie

servlet中2个重要对象

ServletConfig配置对象

ServletContext全局对象

都是获取web.xml中的参数问题。

 编码的问题

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 如何在serlvet中获取到当前项目的绝对路径

// 这里的绝对路径指的是基于项目的根目录而不是基于磁盘。

String path = this.getServletConfig().getServletContext().getContextPath();

/项目名称
path+"/index.jsp"


jsp内置对象servlet中java对象获取
requestHttpServletRequestservice方法中的req参数
responseHttpServletResponseservice方法中的resp参数
sessionHttpSessionreq.getSession()
exceptionThrowable
pagethisthis
pageContextPageContext
applicationServletContextgetServletContext()
configServletConfiggetServletConfig()
outJspWriterresp.getWriter()

三.servlet的生命周期

问题:当servlet被编写完成后,如何让浏览器访问servlet呢?

  • 给servlet指定一个servlet路径!(让servlet与一个路径绑定在一起)

  • 浏览器访问servlet路径

给servlet配置servlet路径,需要在web.xml中对servlet进行配置。

<servlet>
    <servlet-name>xxx</servlet-name>
    <servlet-class>com.zking.AServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>xxx</servlet-name>
    <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

生命周期方法

void init(ServletConfig):出生之后(1次)
void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
void destory():临时之前调用(1次)

【总结】servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法。

 

 

四.ServletConfig

概述

ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置,所以每一个Servlet都有一个ServletConfig。

作用

当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig对象,即传入一些配置信息给Servlet。

生命周期

应用一加载则创建,应用停止则被销毁;

创建时间

创建完Servlet对象时,接着创建。Servletconfig对象

常用方法

返回值方法名说明
StringgetInitParameter(String name)根据参数名称获取参数的值
Enumeratin<String>getInitParameterNames()根据所有参数名称的枚举
StringgetSevletName()获取servlet的名称
ServletContextgetServletContext()获取servletContext对象

ServletConfig的配置方式

在<servlet>标签种,通过<init-param>标签来配置。有两个子标签: <param-name>:代表初始化参数的key。 <param-value>: 代表初始化参数的value

 

五.ServletContext

ServletConText介绍

概述:ServletContext对象是一个应用上下文对象,也是一个域对象。表示Servlet应用程序,每个web应用程序都只有一个ServletContext对象。

ServletContext对象的作用

  • 有了ServletContext对象,就可以共享从应用程序中的所有资源访问到的数据信息,并且可以动态注册web对象。

  • 可以获得应用域的全局初始化参数,以及达到Servlet之间的数据共享

  • 可以作为域对象在整个应用中共享数据;域对象即在一定的作用范围内实现资源共享;

  • 可以用来获取应用中的资源在服务器上的绝对路径;

  • 获取文件的mime类型: 在网络传输中,并不是以扩展名来区分文件的类型,都是以mime类型;如:text/html;表示一个html文件。

生命周期: 应用一加载则创建,应用被停止则销毁

创建时间: 加载web应用时,创建ServletContext对象。

域对象

  • 域对象指的是对象有作用域,即有作用范围。域对象可以实现数据的共享,不同作用范围对象,共享数据的范围能力也不同。

  • 在Servlet规范中,一共有4个域对象。其他三个是:request请求域PageContext页面域session会话域。ServletContext就是其中的一个。是web应用中最大的作用域,也叫application应用域,可以实现整个应用之间的数据共享!

常用方法

返回值方法名说明
voidsetAttribute(String name,Object value)向域对象中存储数据
ObjectgetAttribute(String name)通过名称获取域对象中的数据
voidremoveAttribute(String name)通过名称移除域对象中的数据
Enumeration<String>getAttributeNames()获取域对象中所有数据的名称
StringgetSevletContextName()获取servletContext的名称
StringgetContextPath()获取当前应用的访问虚拟目录
StringgetServletInfo()获取服务器名称和版本信息
StringgetInitParameter(String name)根据名称获取全局配置的值
Enumeration<String>getInitParameters()获取全局配置的所有名称
StringgetRealPath(String path)根据虚拟目录获取应用部署额磁盘绝对路径

ServletContext配置方式

  • ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;

  • 在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签: <param-name>: 代表全局初始化参数的key。 <param-value>: 代表全局初始化参数的value。


版权声明:本文为m0_63579794原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。