文章目录
一、servlet入门
servlet :其实就一个运行在web服务器上的小的Java程序,用于处理从web客户端发送的请求并且对请求作出响应。
服务器向浏览器打印一个hello:
第一步:建立一个类去实现servlet接口,实现service方法
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet implements Servlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().println("Hello Servlet");
}
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
}
}
第二步:在web.xml配置servlet,如下图:
<servlet><!--配置servlet-->
<servlet-name>HelloServlet</servlet-name><!--配置servlet名称-->
<servlet-class>com.servlet.demo.HelloServlet</servlet-class><!--配置servlet类全路径-->
</servlet>
<servlet-mapping> <!--配置servlet的映射-->
<servlet-name>HelloServlet</servlet-name> <!--配置servlet名称,与上面必须一致-->
<url-pattern>/hello</url-pattern> <!--配置servlet访问路径-->
</servlet-mapping>
第三步:启动服务器,然后输出访问路径,查看页面即可
地址栏的/hello先和url-pattern匹配然后根据映射servlet-name找到servlet-name相同的然后执行servlet-class的类然后执行里面service方法。
通常情况下,我们不会像上面那么编写,因为要实现的方法多,一般可以使用servlet的实现类去继承。例如,HttpServlet.是一个与协议相关的Servlet是专门用来处理HTTP协议的请求。通常编写一个 Servlet一般都会让这个 servlet继承HttpServlet重写service方法。
在service方法内部根据请求方式不同执行不同的doXxx()的方法(get 请求执行doGet方法,如果是post请求就会执行doPost方法)。
所以往往继承了HttpServlet之后不需要重写service方法,只需要重写doGet和doPost方法。往往请求要处理的内容的代码都是一致的,所以需要让doGet和doPost相互调用可以简化编程。
二、servlet生命周期
servlet生命周期:Servlet对象从创建到销毁的过程。
servlet何时被创建又是何时被销毁的?
Servlet中有init, service,destroy方法,这几个方法称为是Servlet生命周期相关的方法。
Servlet是在第一次被访问的时候会被实例化,只要servlet一被实例化那么servlet 中的init方法就会执行(init只会执行一次)。任何一次从客户端发送来的请求,那么servlet中的service方法就会执行(在service方法的内部根据请求的方式不同调用不同doXxx方法)。当servlet从服务器中移除或者服务器关闭的时候Servlet对象被销毁,里面的destroy方法就会执行,然后垃圾回收就会将其回收掉。
三、servlet启动时加载
Servlet对象是第一次被访问的时候会被创建的,init方法就会执行。假设在init方法中做了一些比较耗时的操作(比如:加载了一些配置文件并且解析可能需要花费3秒钟)。第一个用户第一次访问这个Servlet的时候,需要等待3秒钟。如何使第一个用户在第一次访问的时候不需要花费这么长时间?
Servlet 默认是在第一次访问的时候创建的对象,现在通过一个配置将Servlet的实例化的过程放在服务器启动的时候(让服务器启动的时候创建Servlet 的对象)。如果现在这样做那么之前花费的时间就会在服务器启动的时候一起花费掉了。对于用户来讲就不需要额外花费这个时间。
建立一个继承httpservlet的实例化对象。然后去web.xml中配置load-on-startup 一般是要写2,如果有多个servlet数字越小,优先级越高
<servlet