Servlet简介
什么是Servlet:
- Servlet是一个接口,下面有5个方法
- Servlet有两个实现类,GenericServlet和HttpServlet
Servlet的作用:
- Servlet是一个小型的Java程序,运行在服务器端
- Servlet接收和响应从客户端发送过来的请求,使用的是HTTP协议
编写一个Servlet程序
(1)编写一个类,实现Servlet接口,重写5个方法
(2)在web.xml中配置Servlet的配置文件
<!-- 配置Servlet的信息 -->
<servlet>
<!-- 给Servlet指定名称(值是任意的) -->
<servlet-name >ServletDemo1</servlet-name>
<!-- 配置Servlet类的类名加包名(Class.forName()) -->
<servlet-class>com.demo.ServletDemo1</servlet-class>
</servlet>
<!-- 配置访问的路径 -->
<servlet-mapping>
<!-- 配置Servlet的名称,servlet-mapping节点下的servlet-name和servlet节点下的servlet-name的值必须是相同的 -->
<servlet-name>ServletDemo1</servlet-name>
<!-- 配置Servlet的访问路径 http://localhost:8080/Servlet/demo1 -->
<url-pattern>/demo1</url-pattern>
(3)将项目添加到服务器中,启动服务器,就可以访问ServletDemo1
Servlet的生命周期
Servlet实例被Tomcat服务器来创建,第一次访问的时候创建(在内存有一个实例(单例模式)),立即调用init方法进行初始化的操作,使用service方法对外提供服务(有一个请求,实例开启一个新线程,处理请求的内容),有一次请求,service就被调用一次。Tomcat服务器关闭或者移除项目的时候,Servlet被销毁,但是实例在销毁之前会调用destroy方法进行一些销毁操作(释放一些资源),destory方法只调用一次。
Servlet的类之间的关系
Servlet接口
|
GenericServlet(5个方法全部重写了)
|
HttpServlet(service方法重写了)
开发Servlet程序:
(1)编写一个类,继承HttpServlet
(2)重写两个方法doGet()和doPost()
(3)在web.xml中配置Servlet的相关信息
一般情况下,doGet()和doPost()方法中的逻辑都是相同的,可以互相调用,简化操作。
Servletp配置访问路径
web.xml中servlet标签中的<url-pattern></url-pattern>标签,中间加上访问路径
- 完全路径匹配
<url-pattern>/servlet/Servlet1</url-pattern>
访问路径:http://localhost:8080/Demo/servlet/Servlet1
- 目录匹配
<url-pattern>/*</url-pattern>
访问路径:http://localhost:8080/Demo/xxx(任意)
- 扩展名匹配
<url-pattern>*.do或者*.action</url-pattern>
访问路径:
http://localhost:8080/Demo/xxx.do或者xxx.action
- 优先级
完全路径匹配>目录匹配>扩展名路径
ServletConfig对象
获取关于配置了Servlet的配置信息
ServletConfig config = getServletConfig();
String configName = config.getServletName();
System.out.println(configName);
ServletContext对象
一个Web项目只有一个ServletContext对象,可以被Web项目中的所有Servlet所共享,通过ServletContext来传递数据
Tomcat服务器一启动,会为每一个Web项目创建一个ServletContext对象,服务器关闭的时候ServletContext对象就销毁了
- 获取ServletContext对象
-- 通过ServletConfig对象获取 getServletContext()
-- 通过继承GenericServlet类获取 getServletContext()
域对象
- 域对象可以在多个Servlet中传递数据
- 可以向域对象存入数据
setAttribute("属性名","属性值");底层是Map集合,属性名相同,属性值不同会覆盖。
- 可以从域对象中获取数据
Object = getAttribute("属性名称");
- 从域对象中删除属性
removeAttribute("属性名称");
ServletContext的作用
(1)获取全局的初始化参数(和ServletConfig不同,ServletConfig只能获取当前Servlet的初始化参数)
String getInitParameter(String name)
Enumeration getInitParameterNames()
配置全局初始化参数
(2)实现数据的共享
- void setAttribute(String name, Object object) 设置属性的值
- Object getAttribute(String name) 获取属性的值
- void removeAttribute(String name) 删除属性的值
- Enumeration getAttributeNames() 获取属性的名称们
(3)读取资源文件