前言
接着上一篇Java Web复习三
1、什么是Servlet
Servlet程序是java对CGI的实现,但是与传统的CGI不同的是,Servlet采用了多线程的处理方式,这样使得Servlet程序的运行效率比传统的CGI更加的高。
第一个Servlet程序
/**
* @author xiaoD
* Description: 第一个servlet程序
*/
public class FirstServlet extends HttpServlet {
/**
* 构造方法,执行父类的构造方法
*/
public FirstServlet() {
super();
}
/**
*
* @author xiaoD
* Description: 重写init(servlet初始化)
*/
public void init() throws ServletException {
}
/**
*
* @author xiaoD
* Description: 重写destroy(销毁servlet)
*/
public void destroy() {
super.destroy();
}
/**
*
* @author xiaoD
* Description: 重写doGet(处理get请求)
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("welcome");
out.flush();
out.close();
}
/**
*
* @author xiaoD
* Description: 重写doPost(处理post请求)
* 因为在java程序中,不管get和post请求,获取参数的方法都一样,所以直接在post中调用get即可
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
web.xml进行配置
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>xiaoD.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
2、Servlet的执行过程
1. 客户端向服务器发送HTTP请求
2. 服务器接收该请求,并将其发送给Servlet。如果Servlet尚未被加载,服务器将把它加载到Java虚拟机中执行
3. Servlet接收请求并处理
4. Serv将处理结果返回给服务器
5. 服务器收到处理结果,并返回给客户端
3、Servlet的生命周期
Servlet的生命周期包括加载程序,初始化,服务,销毁,卸载五个部分
1、加载程序
当web容器启动的时候,或者第一次使用这个Servlet的时候,Web容器会对Servlet进行实例化。
2、初始化
当Servlet被实例化以后,容器将调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理一些客户端请求前完成一些初始化的工作,比如建立数据库连接,读取资源文件等。
3、处理服务
当有请求提交的时候,Servlet将调用service方法(也就是处理Get请求或者Post请求)
4、销毁
当Web容器关闭或者检测到一个Servlet要从容器中删除的时候,会自动调用destroy方法,释放占有的资源
5、卸载
当一个Servlet调用完destroy方法以后,将等待垃圾收集器回收。
Servlet的整个生命周期都是有Web容器控制的,我们只需要实现一个doGet(或者doPost)方法即可。Web容器会自动加载Servlet,自动会Servlet进行初始化。当接受到客户端的请求的时候,会自动调用service方法(如果我们重写了service方法,那么web请求就直接执行我们的service方法,我们写的Get和Post请求都将无效),Servlet的设计采用了模板方法模式,如果想要了解更多,可以看我的另外一篇文章设计模式之模板方法模式。另外在Servlet中的request,response和在jsp的内置对象中request和response都是同一个接口的对象,所以使用方法也是一样。
4、获取初始化配置信息
在jsp的内置对象中,可以通过config对象获取初始化配置信息,因为都是对同一个接口的实现,这个也同样可以获取
在init方法中获取config对象
public void init(ServletConfig config) throws ServletException {
System.out.println(config.getInitParameter("name"));
}
web.xml进行配置
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>xiaoD.FirstServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>xiaoD