Servlet是一个Java程序,是在服务器上运行 以处理客户端请求并做出响应 的程序
Servlet的生命周期
-
HTTP请求
-
解析请求
-
创建Servlet实例
-
调用init()方法,初始化servlet
-
调用service()方法,执行内容
-
输出响应信息
-
响应
-
调用destroy()方法,销毁实例,服务终止。
什么是Servlet
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Servlet生命周期
package com.cn.xszx.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletTest implements Servlet{
@Override
//初始化方法,在servlet被创建时执行,执行一次
public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化servlet");
}
@Override
//获取ServletConfig对象:servlet的配置对象
public ServletConfig getServletConfig() {
return null;
}
@Override
//提供服务方法,每一次Servlet被访问时执行,多次执行
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet被调用");
}
@Override
//获取Servlet的一些信息,如版本、作者
public String getServletInfo() {
return null;
}
@Override
//销毁方法,在服务器正常关闭时执行,执行一次
public void destroy() {
System.out.println("servlet被销毁");
}
}
打印出:
servlet的执行原理
-
当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
-
查找web.xml文件,是否有对应的<url-pattern>标签体内容
-
如果有,则在找到对应的<servlet-class>全类名
-
tomcat会将字节码文件加载进内存,并且创建其对象
-
调用方法
在xml配置映射关系
<servlet>
<servlet-name>servletTest</servlet-name>
<servlet-class>com.cn.xszx.servlet.ServletTest</servlet-class>
</servlet>
<--映射地址-->
<servlet-mapping>
<servlet-name>servletTest</servlet-name>
<url-pattern>/servletTest</url-pattern>
</servlet-mapping>
Servlet相关接口
ServletConfig接口
-
在Servlet初始化过程中获取配置信息
-
一个Servlet只有一个ServletConfig对象
常用方法:
-
String getInitParameter(String name):获取web.xml中设置的name命名的初始化参数值
-
ServletConfig getServletContext():返回Servlet的上下文对象引用
-
配置初始化信息
<servlet>
<!--配置初始化参数 当前servlet使用-->
<init-param>
<param-name>namespace</param-name>
<param-value>hello servletTest</param-value>
</init-param>
</servlet>
@Override
public void init(ServletConfig servletConfig) throws ServletException {
String namespace = servletConfig.getInitParameter("namespace"); System.out.println("初始化servlet");
System.out.println("初始化信息"+namespace);
}
ServletContext接口
-
获取Servlet上下文
-
常用方法:
-
ServletContext getContext(String path):返回服务器上与指定URL相对应的ServletContext对象
-
void setAttribute(String name,Object obj):设置Servlet中的共享属性
-
Object getAttribute(String name):获取Servlet中设置的共享
-
<context-param>
<!--配置全局参数,所有servlet都可访问-->
<param-name>姓名</param-name>
<param-value>张三</param-value>
</context-param>
@Override
public void init(ServletConfig servletConfig) throws ServletException {
ServletContext servletContext=servletConfig.getServletContext();
String name= servletContext.getInitParameter("姓名");
System.out.println(name);
}
注解配置
servlet3.0
-
支持注解配置,可以不需要web.xml
-
步骤:
-
创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
-
定义一个类,实现Servlet接口
-
复写方法
-
在类上使用@webservlet注解,进行配置
@webServlet("资源路径") public class ServletTest implements Servlet{}
-
绝对路径
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。也就是取出部署的应用程序名或者是当前的项目名称
HttpServlet
HttpServlet是一个类,它继承了GenericServlet,GenericServlet实现了Servlet.–>因此HttpServlet也能实现Servlet的功能. HttpServlet的作用比Servlet更加强大,它能够更快速的处理Http请求,能够更快的根据请求方式(Get,Post)来处理Http请求.继承HttpServlet后不用重写Service方法,也不用去实现init等方法。这些都在HttpServlet和GenericServlet有了默认实现.HttpServlet是针对处理Http请求而设计的一个类
-
HttpServlet继承于GenericServlet
-
处理HTTP协议的请求和响应
-
-
HttpServlet的方法
-
void doGet(HttpServletRequest request,HttpServletResponse response) 以Get请求服务时调用
-
void doPost(HttpServletRequest request,HttpServletResponse response) 以Post请求服务时调用
-