初识servlet

servlet是一种服务器端的java应用程序,具有独立于平台和协议的特性,可以生成动态的web页面,她担当客户请求与服务器响应的中间层,servlet是位于web服务器内部的服务器端的java应用程序,与传统的从命令行启动的java应用程序不同,servlet由web服务器进行加载,该web服务器必须包含支持servlet的java虚拟机,Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器,在日常的学习和生活中,总是碰见servlet,今天这篇博文,小编就来简单的介绍一下servlet的相关知识,希望对有需要的小伙伴有帮助,不足之处,还请各位大神多多指教。

什么是servlet

一个servlet就是java编程语言中的一个类,她被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序,虽然servlet可以对任何类型的请求产生响应,但通常只用来扩着web服务器的应用程序,java servlet技术为这些应用程序定义了一个特定于http的servlet类。

javax.servlet和javax.servlet.http包为编写servlet提供了接口和类,所有的servlet都必须实现servlet接口,这个接口定义了生命周期方法,当实现一个通用的服务时,可以使用或扩展由javaservlapi提供的genericservlet类,httpservlet类提供了一些方法,诸如doGet和doPost,以用于处理特定于http的服务。简单来说Servlet就是满足我们Servlet规范的“服务器端的小Java程序”。如下代码所示:

/**
 * 需要我们实现J2ee中的Servlet接口
 * @author 丁国华
 */
public class ServletExample implements Servlet {  

    //在构造方法执行结束之后,对象创建完毕,init方法马上执行
    //只执行一次。这个方法我们称作初始化方法。
    //该方法调用的时候Servlet对象刚刚创建完毕,相当于人一生开始的受教育
    @Override
    public void init(ServletConfig arg0) throws ServletException {
    }  

    //这是一个Servlet对象的核心业务方法。我们主要把业务编写到这个方法中,用户请求一次,执行一次。
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
    }  

    //当服务器容器关闭的时候,或者长时间没有用户再去访问这个Servlet
    //Servlet对象所占用的内存即将被释放,释放之前会由Tomcat容器自动调用该方法。
    //该方法在Servlet对象的内存被回收之前执行。
    //该方法执行的时候Servlet对象还没有被销毁。
    //该方法也是只执行一次。相当于人一辈子的结束。
    @Override
    public void destroy() {
    }  

    //下边两个是关于Servlet信息的方法
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }  

    @Override
    public String getServletInfo() {
        return null;
    }
}  

servlet的生命周期

首次创建servlet时,她的init对象得到调用,因此Init是放置一次性设置代码的地方,在这之后,针对每个用户请求都会创建一个线程,该线程调用前面创建的实例的service方法,多个并发请求一般会导致多个线程同时调用service,之后由service方法依据接收到的http请求类型,调用doGet、doPost或者其他方法,最后如果服务器决定卸载某个servlet,调用servlet的destroy方法。是不是觉得特别烦琐,小编用了几句话,简单的总结了一下,Servlet生命周期分为三个阶段:

a、初始化阶段,调用init()方法;

b、响应客户请求阶段,调用service()方法,doGet()、doPost(),这些方法都是servlet的主体;

c、终止阶段,调用destroy()方法;

简单介绍一下这几种方法,首先Init()方法,可以在servlet开始时,完成初始化,代码如下:

//在一个servlet中写一个
public void init()thorws Servlet Exception{
       //init code
}

service方法

服务器每次收到对servlet的请求,都会产生一个新的线程,调用service方法检查http请求类型,从而调用相应的方法。

destory()方法

服务器移除servlet之前可以调用destory方法来完成一些工作,例如,使得servlet有机会关闭数据库连接,停滞后台进程,将cookie列表和点击数写入磁盘等收尾工作。

小伙伴们有没有发现一个有趣的现象,创建的过程和servlet的生命周期是一一对应的,

a、创建:通过用户的请求路径,解析web.xml文件,获取Servlet的完整类名,通过反射进行实例化对应的Servlet对象:
Class c = Class.forName(“Servlet类全名”);
Servlet servlet = (Servlet)c.newInstance();
  b、创建后进行初始化,调用init方法
         servlet.init(config); //初始化方法,对象第一次被创建之后调用。只执行一次。(初始化时刻)
  c、用户调用时,执行service方法:
         servlet.service(request,response); //核心业务方法,用户访问一次必然执行一次。(执行多次)
  d、销毁:
servlet.destroy();

servlet的基本结构

下面一个简单的小demo,是一个基本的servlet,servlet一般扩展自httpservlet,依据数据发送方式的不同,覆盖doGet或者是doPost方法,如果希望servlet对get和post采取同样的行动,只需要让doGet调用doPost即可,反之亦然,代码如下所示:

Import java.io.*;
Import javax.servlet.*;
Import javax.servlet.http.*;
public class servletTemplate extends HttpServlet{
public void doGet(httpServlet Requestrequest,httpServlet Responseresponse)
	throws Servlet Exception,IOException{
		//Use "request" to read in coming HTTPheaders
		//(e.g.cookies) and query date from HTMLforms.
		//User "response" to specify the HTTPresponsetatus
		//code and headers(e.g.the content type,cookies)
		PrintWriter out = response.getWriter();
		//User "out" tosend contentto browser
	}
}

doGet和doPost都接受两个参数HttpServletRequest和HttpServletRespon,通过HttpServletRequest可以获得所有的输入数据,表单数据、http请求报头、客户主机名等,HttpServletResponse可以指定输出信息,如HTTP状态码和响应报头,最重要的是,通过它可以获得PrintWriter,用她将文档内容发给用户。

  创建HttpServlet

    根据客户发出的HTTP请求,生成响应的HTTP响应结果,HttpServlet首先必须读出HTTP请求的内容,Servlet容器负责创建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对象中,这大大简化了HttpServlet解析请求数据的工作量,如果没有HttpServletRequest,HttpServlet只能直接处理Web客户发出的原始的字符串数据,有了HttpRequest后,只要调用HttpServletRequest的相关方法,就可以方便的读取http请求中任何部分信息。

创建一个HttpServlet,分为以下四个步骤:

a、扩展httpservlet抽象类

b、重载适当的方法,如覆盖doGet()或者doPost()

c、如果http请求信息,则获取该信息,用HttpServletRequest对象来检索HTML表格所提交的数据或URL上的查询字符串,请求对象还有特定的方法以检索客户机提供的信息,有以下三种方法:

getParameterNames()

getParameter()

getParameterValues()

d、生成HTTP响应,HttpServletResponse对象生成响应,并将她返回到发出请求的客户机上,她的方法允许设置“请求”标题“和”响应“主体,”响应“对象还含有getWriter()方法以返回一个PrintWriter对象,使用PrintWriter的print(),和printIn()方法以编写Servlet响应来返回给客户机,或者直接使用out对象输出有关html文档内容,下面来写一个简单的demo,代码如下所示:

Import java.io.*;
Import java.util.*
Import javax.servlet.*;
Import javax.servlet.http.*;
public class ServletSample extends HttpServlet{
	//第一步:扩展HttpServlet抽象类
	public void doGet(HttpServletRequestrequest,HttpServletResponseresponse)
	thrower Servlet Exception,IOException{
	//第二步:重写doGet()方法
	String myName="";
	//第三步:获取HTTP请求信息
	java.util,Enumeration keys = request.getParameterNames();
	while(keys.hasMoreElements());{
		key=(String) keys.nextElement();
		if(key.equals IgnoreCase("myName"))
		myName=request.getParameter(key);
	}
		if(myName="")
		myName="Hello";
		//第四步:生成HTTP响应
		response.setContentType("text/html");
		response.setHeader("Pragma","No-cache");
		response.setDateHeader("Expires",0);
		response.setHeader("Cache-control","no-cache");
		out.println("<head><title>Justabasicservlet</title></head>");
		out.println("<body>");
		out.println("<hl>Justabasicservlet</h1>");
		out.println("<p>"+myName+",this is a very basic servlet that writes an html page.");
		out.println("<p> for instruction son running those samples on your web sphere 应用服务器,"+"open the pase:");
		out.println(<"pre> http://<em>your.server.name</em>/IBMWEBAS/samples/index.asp1</pre>");
		out.println("where<em>your.server.name</em>your.server.name</em>is the host name of your webSphere 应用服务器");
		out.println("</body></html>");
		out.flush();
	}
}

分析一下上面的代码部分,上述ServletSample类扩展HttpServlet抽象类,重写doGet()方法,在重写的doGet()方法中,获取http请求中的一个任选的参数,比如myName,该参数可作为调用的URL上的查询参数传递到Servlet。

小编寄语:该博文,小编主要介绍了servlet的相关知识,分别从什么是servlet、servlet的生命周期、servlet的基本结构以及创建一个简单的httpServlet几个方面对servlet进行一系列简单的介绍,servlet在开发中经常使用,明白她的工作原理对我们以后的开发学习非常有用,java之路,未完待续......

时间: 2024-10-12 21:51:28

初识servlet的相关文章

初识Servlet和JSP

一.简介Servlet和JSP sun首先推出了Servlet规范,它是一种小型的Java程序,全部是由java写成并且生成HTML,扩展了web服务器的功能,是位于Web服务器内部的服务器端的Java应用程序. 后来,sun就推出了类似于ASP的镶嵌型的JSP,JSP页面由HTML代码和嵌入其中的Java代码所组成.服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端浏览器. 二.Servlet和JSP的关系 Serlet是一个早期的不完善的产品,写b

Servlet的学习(一)

初识Servlet Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的Servlet是指这个接口,广义的Servlet是指任何实现了这个Servlet接口的类. 使用Servlet开发一个动态web资源,其实就是开发一个Java程序向浏览器输出数据. Servlet其实就是一个运行在服务器上得Java程序,Servlet是J2EE十三门技术中的一种,因此我们不能去看J

Java之JSP和Servlet基础知识。

JSP基础 JSP起源 JSP,Java Server Pager的简称.由SUN倡导并联合其它公司创建. JSP是一门脚本语言 JSP可以嵌入到HTML中 JSP拥有Java语言的所有特性 面向对象.健壮.多线程.安全.可移植.高性能 JSP运行于JSP容器中 Tomcat.Jetty等. JSP会被转换成Servlet JSP->Servlet->Class文件. Mac下常用shell命令: pwd 打印当前目录 ls 列出当前目录下的所有文件目录 cd 更改目录 .代表当前工作目录 .

JSP-11-Servlet

1 初识Servlet Ø  Servlet做了什么 本身不做业务 只接收请求并决定调用哪个JavaBean去处理请求 确定用哪个页面来显示处理返回的数据 Ø  Servlet 是什么 Servlet是一个Java程序,是在服务器端运行以处理客户端请求并做出响应的程序. Server+Applet, 是一种服务器端的Java应用程序 只有当一个服务器端的程序使用了 servlet API的时候,这个服务端的程序才能称之为Servlet. Ø  ServletAPI介绍 API: 应用程序接口 j

初识JAVA,对servlet的理解

一.WEB开发的简单理解 Web开发是一个指代网页或网站编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也可以是交互式的,或显示变化的信息.编写交互式服务器页面略微复杂一些,但 却可以实现更丰富的网站.如今的大多数页面都是交互式的,并提供了购物车.动态可视化甚至复杂的社交网络等现代在线服务. 通俗的说,web开发就是我们说的做网站.它分为网页部分,和逻辑部分也就是我们说的前台与后台.前台负责与用户的交互,显示数据.用到H

jsp初识、servlet转发、转发与重定向的比较

jsp sun公司制定的一种服务器端动态页面技术规范 生成动态页面 jsp其实是一个以.jsp为后缀的文件,该文件的内容主要是html和少量的java代码 容器会将jsp文件自动转换成一个servlet然后执行. 如何写一个jsp文件 1.创建一个以.jsp为后缀的文件 2.在文件里面添加如下的内容: (1)html(css,js):直接写.不用写out.print (2)java代码: a.java代码片段 <% java语句: %> b.jsp表达式 <%= java表达式%>

初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面

1:JSP JSP的基本语法:指令标识page,include,taglib;page指令标识常用的属性包含Language用来定义要使用的脚本语言:contentType定义JSP字符的编码和页面响应的MIME类型:pageEncoding:jsp页面的字符编码: include指令<%@ include file="path"%>静态包含,先包含,后编译处理: <jsp:include page="要包含的文件">  动态包含,先编译处理

J2EE(五)——servlet初识

一.Tomcat的三个功能: 1.jsp容器 2.Servlet容器 3.Web服务器 二.手动开发第一个servlet 开发servlet三种方式: 1.实现servlet接口 2.继承GenericServlet 3.继承HttpServlet 1.在tomcat的web apps下新建一个文件夹(myWeb),这个项目里面增加含web.xml的 WEB-INF并在WEB-INF下增加classes以及lib.在classes下编写MyFirstServlet.java: package m

[J2EE基础]初识JSP和Servlet

近期须要用到J2EE,就開始学习与J2EE相关的知识了. JSP是一种Javaserver端技术,它用于在网页上显示动态内容. Tomcat相关知识 JSP的运行过程 JSP的页面构成元素 JSP的凝视 静态和动态include JSP标准标签库 JSP的九大内置对象: Out:一个缓冲的输出流,向client输出内容 page:当前JSP页面本身,它是java.lang.Object类的实例 request:提取浏览器提交的信息 response:server对客户的请求做出响应.向clien