JavaWeb学习笔记(Servlet技术)
Servlet接口
Servlet是一种实现servlet接口的类,是由Web容器负责创建并调用,用于接受和响应用户请求,有五个抽象方法:
方法声明 | 功能描述 |
---|---|
void init(ServletConfig config) | 负责Servlet初始化工作。在容器创建好后调用此方法,该方法接收一个ServletConfig类型的参数,service通过这个参数向Servlet传递初始化配置消息。 |
ServletConfig | 返回容器调用的 |
String getServletInfo | 返回一个字符串,其中包含关于Servlet信息, |
void service(ServeletRequest request,SERVLETresponse respose) | 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用这一个方法。容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法,在Service方法中可以通过ServletRequest对象得到客户端的相关信息和请求消息,在对请求进行处理后,调用ServletResponse对象的方法设置响应消息。 |
void destroy() | 负责释放Servlet对象占用的资源,当Servlet对象销毁时会调用此方法。 |
Servlet程序
(1)在D:\cn\itcast\firstapp\servelt建立一个Java文件代码如下:
package cn.itcast.firstapp.servlet;
import java.io.*;
import javax.servlet.*;
public class HelloWorldServlet extends GenericServlet{
public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
(2)使用cmd对其进行编译
发现其报错。错误为javax.servlet文件不存在
(3)由于Servlet是一个JavaEE程序不是一个JavaSE程序所以所有的jar文件都需要自己手动加入到classpath环境变量中。
在tTomcat下的lib目录下有许多的jar文件,其中的servlet-api.jar是属于Servlet相关的jar文件。
(4)打开命令行窗口,通过set classpath命令将servlet-api.jar添加刀CLASSPATH环境变量中。
(5)重新编译HelloWordServlet.java,成功编译会产生一个HelloWorldServlet.class文件
(6)在Tomcat的webapps下创建目录chapter04,然后创建\WEB-INF\classes目录,将HelloWorldServlet.class复制到刀classes下,注意要将cn等包目录也一起复制过去。
(7)进入到WEB-INF目录下,编写一个web.xml文件,代码可以参照Tomcat目录下的examples\WEB-INF子目录下的web.xml文件。代码如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>cn.itcast.firstapp.servlet.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
</web-app>
其中的< servlet>用于注册Servle,其中两个子元素分别指定Servlet名称及其完整类名,servlet-mapping用于映射Servlet对外访问的虚拟路径,其中子元素servlet-name必须和Servlet的servlet-name相同。url-pattern用于指定访问的Servlet的虚拟路径。
(8)启动Tomcat服务器,在浏览器的地址栏中输入URLhttp://localhost:9090/chapter04/HelloWordServlet访问HelloWordServlet。
Servlet生命周期
Servlet生命周期分为三个阶段,分别是初始化阶段,运行阶段,销毁阶段。
初始化阶段
当用户向Servlet容器发送HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否存在该Servlet请求,如果没有就会创建一个Servlet对象,然后通过init()方法实现Servlet初始化工作。Servlet整个生命周期init()只调用一次。
运行阶段
在这个阶段,Servlet容器会为请求创建代表HTTP请求的ServletReques对象和代表的HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。service()在Servlet整个生命周期中会调用多次。
销毁阶段
当服务器关闭或Web应用被移除容器时,Servlet随着Web应用的销毁而销毁,在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占的资源。在Servlet整个生命周期中,destroy()只调用一次。
示例:
对之前的Servlet进行修改代码如下:
package cn.itcast.firstapp.servlet;
import java.io.*;
import javax.servlet.*;
public class HelloWorldServlet extends GenericServlet {
public void init(ServletConfig config)throws ServletException{
System.out.println("init methed is called");
}
public void service(ServletR