java servlet是一种使用java编写的cgi程序
CGI:通用网关接口,与传统CGI不同的是,Servlet是使用一种多线程的程序处理方式,性能要求较高。
在servlet中可以控制html代码,则所有的html代码都必须使用out.println()一行一行输出。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
一,Servlet的生命周期
首先创建servlet,然后初始化servlet,如果初始化成功那么,使用servlet提供服务,如果没有成功,那么就卸载servlet,当servlet完成服务,则销毁servlet,最后卸载servlet。
(1)生命周期的方法描述
初始化时期
public void init(ServletConfig config)throws ServletException
执行时期
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
结束时期
public void destroy()
Servlet类本身也是java类,所以也要保存在class文件夹下。
实例:
1,编写Servlet类
package cn.lxh.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SimpleServlet extends HttpServlet {
//初始化
public void init(ServletConfig config) throws ServletException
{
System.out.println("----初始化----");
}
//处理
public void doGET(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
{
PrintWriter out=resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("</head>");
out.println("<body>");
out.println("<h1>hello</h1>");
out.println("</body>");
out.println("</html>");
}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
{
this.doGET(req, resp);
}
//销毁
public void destroy()
{
System.out.println("----销毁----");
}
}
2,通过web映射访问Servlet程序
需要配置web.xml文件
<Servlet>
<servlet-name>simple</servlet-name>
<servlet-class>cn.lxh.servlet.SimpleServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</Servlet>
<!--在此加入新的servlet-->
<servlet-mapping>
<servlet-name>simple</servlet-name>
<url-pattern>/demo</url-pattern><!--浏览器中的相对地址-->
</servlet-mapping>
在浏览器中输入..../demo,然后找到servlet-mapping中的servlet名称,然后通过servlet名称找到servlet的class类
在编译Servlet时,会出现找不到servlet包的问题,因为jdk包含j2se包,而java ee包不在java se之中,需要单独配置包。
在tomcat中,存在servlet的全部库文件。
将tomcat\common\lib\servlet.jar包拷贝到jdk安装路径下的jre\lib\ext下
当客户端发送http请求使用get方法时就调用doGet()方法,http的缺省方法就是GET;当客户端发送http请求使用POST方法时就调用doPost()方法。
Servlet生命周期:
1,初始化: 默认情况下,在第一次使用Servlet程序时初始化;也可以在容器启动时初始化Servlet程序,通过配置web.xml
在servlet配置中加入<load-on-startup>1</load-on-startup>,表示服务器启动时初始化Servlet程序。
其中1表示优先级,可以为2,3,4等值。
2,服务: doGet(),doPost(),直接在浏览器中输入地址就是get请求
3,销毁:a,服务器关闭;b,此servlet长时间不使用,销毁也只执行1次