什么是Servlet?
Servlet(Servlet Applet),全称Java Servlert .是用Java编写的服务器端程序。其主要功能在与交互式的浏览和修改数据,生成动态Web内容。狭义的servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet的类,一般情况下,人们将Servlet理解为后者。比如HttpServlet类继承自Servlet类,可以利用继承Http Servlet 来实现Http请求,当不是Http请求的时候,也可以定义其他形式的Servlet。
Servlet 运行于支持Java的服务器中,从现实上讲,servlet 可以响应任何类型的请求,但是绝大多数情况下Servlet只用于来扩展基于THHP协议的Web服务器
最早支持Servlet标准的是JavaSoft的Java Web Server。此后,一些其它基于Java的Web服务器开始支持标准的Servlet。
Servlet编程需要使用到javax.servlet和javax.servlet.http两个包下面的类和接口,在所有的类和接口中,javax.servlet.servlet接口最为重要。所有的servlet程序都必须实现该接口和继承实现了该接口的类。以下是Servlet的主要类和接口:
javax.servlet.ServletConfig;
javax.servlet.ServletException;
javax.servlet.HttpServlet;
javax.servlet.HttpServletRequest;
javax.servlet.HttpServletResponse;
javax.servlet.HttpSession;
javax.servlet.Cookie;
javax.servlet.ServletContext;
javax.servlet.GenericServlet;
Servlet规范的作用
1、制定了【动态资源文件】的开发步骤
2、制定了HTTP服务器调用【动态资源文件】的规则
3、制定了管理【动态资源文件】的实例对象的规则
Servlet接口实现类
1、Servlet接口来自于Servlet规范下的一个接口,这个接口存在于Http服务器提供的jar包
2、Tomcat服务器下lib文件下有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet)
3、Servlet规范中,Http服务器能调用的【动态资源文件】必须是一个Servlet接口的实现类
Servlet接口实现类开发步骤
第一步:创建一个java类继承HTTPServlet父类,使之成为一个Servlet接口的实现类
第二步:重写HttpServlet父类的两个方法。doGet()或者doPost()
浏览器---get--->oneServlet.doGet()
浏览器---post--->oneServlet.doPost()
第三步:将Servlet接口实现类的信息【注册】到Tomcat服务器中 注册:通知
【网站】----->【web】------>【WEB-INf】------>wen.xml
<!--将当前Servlet接口实现类类路径地址交给Tomcat-->
<servlet>
<servlet-name>path</servlet-name><!--声明一个变量存储Servlet接口实现类的类路径-->
<servlet-class>school.xauat.controller.OneServlet</servlet-class><!--声明Servlet接口实现类的类路径-->
</servlet>
Tomcat String path="school.xauat.controller.OneServlet";
<!--为了降低用户访问Servlet接口实现类的难度,需要设置简短的请求别名-->
<servlet-mapping>
<servlet-name>path</servlet-name>
<url-pattern>/one</url-pattern><!--设置简短的请求别名,别名在书写的时候,必须以“/”为开头-->
</servlet-mapping>
如果现在浏览器向Tomcat索要OneServlet时的地址
http://localhost:8080/myWeb/one
/*
Servlet规范中动态资源文件开发的步骤
*/
public class Class1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Class1.doGet() is running...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Class1.doPost() is running...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Class1</servlet-name>
<servlet-class>school.xauat.controller.review.Class1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Class1</servlet-name>
<url-pattern>/class1</url-pattern>
</servlet-mapping>
</web-app>
制定了管理【动态资源文件】的实例对象的规则
Servlet生命周期
1、网站中所有的Servlet接口实现类的实例对象,只能由http服务器来创建
开发人员不能手动创建Servlet接口实现类的实例对象
2、在默认情况下,当http服务器接收到当前Servlet接口实现类的第一次请求时
自动创建这个Servlet接口实现类的实例对象
在手动配置情况下,要求http服务器在启动的时候自动创建Servlet接口实现类的实例对象
<servlet>
<servlet-name>path</servlet-name><!--声明一个变量存储Servlet接口实现类的类路径-->
<servlet-class>school.xauat.controller.OneServlet</servlet-class><!--声明Servlet接口实现类的类路径-->
<load-on-startup>30</load-on-startup><!!--填写一个大于0的整数-->
</servlet>
3、在http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象
4、在http服务器关闭的时候,自动将网站中所有的Servlet对象进行销毁
public class Class2 extends HttpServlet {
public Class2(){
System.out.println("Class2对象已经创建");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Class2.doGet() is running...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Class2.doPost() is running...");
}
}
<servlet>
<servlet-name>Class2</servlet-name>
<servlet-class>school.xauat.controller.review.Class2</servlet-class>
<load-on-startup>30</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Class2</servlet-name>
<url-pattern>/class2</url-pattern>
</servlet-mapping>
在Tomcat服务器启动时