servlet(1)

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次

原文地址:https://www.cnblogs.com/jinzhengquan/p/1950866.html