Servlet 是什么?
我们对servlet的了解实在javaweb阶段了解的,当我们学习到了框架,后来好像就不怎么接触它,其实框架的原理还是来调用servlet.
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet和Web服务器的关系
Web服务器,有好几种,如我们现在常见的tomcat ,它是一个容器,Servlet对象不是我们创建的,是Web服务器创建的,Web服务器里面有各种各样的Servlet(不是指同一Serlvet有好几个,根据java语言的特点,java不会有同一作用的类,而是有许多功能不同的Servlet),当我们在浏览器访问网站,就是通过Web服务器,来创建Servlet,然后Servlet获取请求,做出响应,返回给我们数据、界面,有点像我们打10086,Web服务器就像是我们的这个移动网,能够让我们把电话打出去,客服人员就像Servlet对我们的请求做出响应。
创建Servlet
创建Servlet我们有三种方法
一、实现javax.servlet.Servlet接口
二、继承javax.servet.GenericServlet类
三、继承javax.servlet.http.HttpServlet类(常用)
在Java中我们知道,儿子一般都比父类强 ,我们一般都常用第三个方法来创建Servlet,因为它更简便,功能更强大。但此处我先用第一个方法来讲解。因为实现Servlet接口,是最底层的Servlet.
首先我们来创建一个JavaWeb项目。
点击next 然后命名 点击finish就行
然后配置一下tomcat
选在tomcat Add就完事了
接下来配置一下启动
然后就OK了,
我们现在来创建一个AServlet类并实现了Servlet接口
我么实现了5个方法。
下面将一一来讲解这个5个方法
/**
* AServlet
* @author xclam
* @date 2020/2/25
*/
public class AServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig");
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service");
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo");
return null;
}
@Override
public void destroy() {
System.out.println("destroy");
}
我们首先要创建我们的Servlet对象,可我说了,我们不创建Servlet对象Web服务器来创建这个对象,我们知道当我们启动tomcat 在浏览器地址栏中输入localhost:8080就可以访问tomcat的默认界面,我们如何来把路径绑定到Servlet中呢?
我们来配置一下web.xml ,详细看代码注释
<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的名称 随便设置
<servlet-name>AServlet</servlet-name>
//servlet类的位置 (com.xxx.xxx.xxxServlet)
<servlet-class>AServlet</servlet-class>
</servlet>
<servlet-mapping>
// 名称必须是上面设置过的名称
<servlet-name>AServlet</servlet-name>
//地址栏的映射
<url-pattern>/aaa</url-pattern>
</servlet-mapping>
</web-app>
好了我们启动tomcat .然后在地址栏中访问
我们来看控制台,当我们访问这个地址的时候,我们的servlet对象就被创建起来,执行init()方法,service()方法,
当我们再次访问的时候就会发现控制台又会执行一次service()方法。当我们停止tomcat的时候,控制台中又打印了destroy()中的语句。所以我们得出结论。
Servlet的生命周期
init() 初始化 只在Servlet对象刚被创建的时候执行,而且只执行一次。
service()当我们向servlet发送请求的时候执行,我们发送一次请求就执行一次。可以说我们的业务一般都在这个方法里面
destory() 释放资源,当我的servlet对象被销毁的时候执行,只执行一次。
下面我们来配置一下Servlet的初始化变量
<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>AServlet</servlet-name>
<servlet-class>AServlet</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>yyy</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/aaa</url-pattern>
</servlet-mapping>
</web-app>
配置完成后我们在init()方法中来引用它
运行tomcat,向Servlet发起请求。控制台中打印出来我们的初始化变量
这是因为当tomcat创建Servlet对象时,在执行init()之前会创建ServletConfig对象,ServletConfig中有我们Servlet的配置信息,刚刚的初始变量就是从ServletConfig中获取的。
下面我们来讲一下Servlet中的其他两个方法getServletConfig() 和getServletInfo()
getServletConfig() 用来获取ServletConfig对象 (servlet的配置信息)
getServletInfo() 它提供有关 servlet 的信息,如作者、版本、版权。
暂时就先写到这里吧,写的比较仓促,嘿嘿。