Servlet初识
来源:互联网 发布:java泛型类 编辑:程序博客网 时间:2024/06/16 05:06
1、什么是Servlet
- Servlet是JavaWeb的三大组件之一(Servlet,Listener,Filter),它的工作就是:接受客户端的请求数据;完成请求;返回响应。
- Servlet是和平台无关的服务器端组件,它运行在Servlet容器中(如:Tomcat Servlet容器负责Servlet和客户的通信以及调用Servlet的方法)
- 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2、如何编写一个Servelt
有三种方法:
* 实现javax.servlet.Servlet接口 继承
* javax.servlet.GenerlcServlet类继承
* javax.servlet.http.HttpServlet类 (通常使用的方法)
Servlet中的方法大多数不由我们来调用,而是由Tomcat调用。并且Servlet的对象也不是由我们来创建,由Tomcat创建。
3、如何让浏览器能够访问Servlet?
需要给Servlet指定一个Servlet路径(让Servlet与一个路径绑定在一起)
给Servlet配置Servlet路径,这需要在web.xml中对Servlet进行配置<servlet> <servlet-name>xxx</servlet-name> <servlet-class>cn.itcast.servlet.AServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>xxx</servlet-name> <url-pattern>/跟servlet绑定路径</url-pattern>
注意:
a>给类AServlet起个名字叫xxx,注意:写servlet类的全名
b>先得有名为xxx的servlet,然后要给xxx配置什么路径,在mapping中完成
c>说明:
这个绑定的路径一旦被访问,实际上是访问名为xxx的servlet,而这个servlet的类是cn.itcast.servlet.AServlet。得到这个字符串,服务器根据反射机制,会自动创建该类的对象,执行该类的方法。
4、Servlet的生命周期
- 加载和实例化
Servlet容器负责加载和实例化Servlet,容器是通过Java的反射API(使用类加载器加载servlet类)来创建Servlet实例,调用的是Servlet的默认构造方法,所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。 - init:只被调用一次。在创建好实例后立即被调用。
- service:每次请求都会调用,实际用于响应请求
- destory:只被调用一次。当前Servlet所在的web应用被卸载前调用,用于释放当前Servlet所占用的资源
5、Servlet接口中的方法
void init(ServletConfig arg0) //Servlet对象创建之后执 (做一些初始化操作) void service(ServletRequest request, ServletResponse response)//每次处理请求都是处理这个方法 void destroy() //Servlet被销毁之前调用,只执行一次(释放那些非内存资源) ServletConfig getServletConfig()://获取Servlet的配置信息 String getServletInfo()://获取Servlet的信息
6、load-on-startup参数
用以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建。若为0或正数,则在当前web应用被Servlet容器加载时创建,且数组越小越早被创建。
<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.ithings.servlet.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
7、serlvet-mapping通配符
可以用匹配符配置,但是要注意,必须是.do或者 /开头的以/* 结束的路径。
对于如下的一些映射关系: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do 问题: 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应. 【Servlet引擎将调用Servlet1。】 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应. 【Servlet引擎将调用Servlet3。】 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应. 【Servlet引擎将调用Servlet1。】 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应. 【Servlet引擎将调用Servlet2。】 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应. 【Servlet引擎将调用Servlet2。】
8、ServletConfig接口
- 1个ServletConfig对象,对应一段web.xml中servlet的配置信息
- ServletConfig接口的方法;
1、ServletContext getServletCOntext() //获取Servlet上下文对象2、String getServletName() //获取的是<servlet-name>中的内容3、String getInitParameter(String name) //通过名称获取指定初始化参数的值4、Enumeration getInitParamenterNames() //获取所有初始化参数的名称
9、ServletContext对象(重要)
代表当前web应用,可从中获取当前web应用的各个信息。一个项目就一个ServletContext对象。我们可以在N多个servlet中来获取这个唯一的对象,使用它来给多个Servlet传递数据(可以用它来完成共享数据)
①概述
ServletContext对象的创建是在服务器启动时,销毁时服务器关闭时。(与服务器同生死)
作用:
不同Servlet之间传递共享数据(域对象)
②获取ServletContext
在void init(ServletConfig config)中,getServletContext()方法可以获取到
ServletContext context=config.getServletContext();
GenericServlet或HttpServlet中获取ServletContext
GenericServlet类中有ServletContext()方法。使用this.getServletContext()
③域对象功能
域对象可以理解为:域对象就是用来在多个Servlet中传递数据
** javaweb有四大域对象 PageContext ServletRequest HttpSession ServletContext 所有域对象都有存取数据的功能。因为域对象内部有一个Map,用来存储数据, ** ServletContext操作数据的方法:(同时也是域对象的基本方法) ** void setAttribute(String name ,object value) //用来存储一个对象,可以称之为存储一个域属性,使用键值对的方式。 ** object getAttribute(String name): 获取ServletContext中的数据。 ** void removeAtteibute(String name): 移除ServletContext中的域属性 ** Enumeration getAttributeNames(); 获取所有域属性的名称
④全局应用参数
可以配置公共的初始化参数,为所有的Servlet而用,使用<context-param>
标签
<context-param> <param-name>name</param-name> <param-vlaue>value</param-vlaue></context-param>
⑤获取相关资源的方法
1、获取部署在服务器上的绝对路径 servletContext.getRealPath("");2、获取当前web应用的名称 getContextPath() 2、获取资源流 InputStram is=servletContext.getResourceAsStream("");3、获取指定目录下所有资源路径 Set set=servletContext.getRescourcePaths("")
- 初识Servlet
- 初识servlet
- servlet初识
- 初识Servlet
- 初识Servlet
- 初识Servlet
- 初识Servlet
- Servlet初识
- 初识servlet
- 初识servlet
- 初识servlet
- 初识servlet
- 初识servlet
- Servlet初识
- 初识Servlet
- 初识servlet
- 初识Servlet
- 初识Servlet
- 343. Integer Break
- BZOJ2154(莫比乌斯反演)
- CODEVS--1202求和
- Ajax的工作原理
- 如何禁止在WINDOWS上复制粘贴文件
- Servlet初识
- maven项目基础
- Java中的内部类(三)
- 简单模拟下ssm,复习动态代理
- leetcode刷题——
- 三、计算机网络之网际层
- 【matlab】蚁群算法详解
- python requests的方法
- eclipse开发RCP之三