Jsp之三 servlet基础

Servlet带给开发人员最大的好处是它可以处理客户端传来的http请求,并返回一个响应。Servlet是一个java类,java语言能够实现的功能,servlet基本上都可以实现。

?       可移植性

因为servlet是由java开发并符合规定定义和广泛接受的API他可以再不同操作系统和不同的应用服务器平台下移植。

?       集成

Servlet和服务器紧密集成,他们可以密切合作完成特东的任务。

?       模块化

每一个servlet可以完成一个特定任务,并且可以将他们并在一起工作,servlet之间是可以交流的。

?       高效耐久

Servlet一旦载入,他就驻留在内存中,这样加快了响应的速度。在服务器上仅有一个java虚拟机在运行,他的优势在于,当servlet被客户端发送的第一个请示激活,以后他就可以运行于后台,等待以后的请求,所以我们在第一次反问servlet页面时通常有点慢,之后就很快了(当然首次的servlet载入也可以是在服务器启动时,由web程序的配置文件web.xml而定)。每个请求将生成一个线程而不是进程

Servlet的生命周期

在学习servlet的生命周期之前,我们先做一个servlet的小例子,熟悉一下servlet的运行过程

?       建立web项目目录

打开tomcat安装目录进入webapps文件夹,新建一个文件夹作为我们项目的根目录,名字为servlettest,那么这个项目的名字就叫做servlettest。然后在servlettest目录下建立一个名为WEB-INF的文件夹(注意这个文件夹必须是要大写的),在WEB-INF下建立classes文件夹,同时在WEB-INF下建立一个名为web.xml的文件。准备工作已经做完,下面开始开发第一个servlet程序。

?       创建servlet类文件

如程序3-1所示

【3-1】import java.io.*

import javax.servlet.*

import javax.servlet.http.*

public
class
ServletDemo extends HttpServlet  {

public
void
doGet(HttpServletRequest req,

HttpServletResponse res )throws ServletException,IOException{

PrintWriter out=res.getWriter();

out.println("hello,world");

}

}

将这个类文件,在命令行下编译得到一个ServletDemo.class的字节码文件,之后将此字节码文件copy到刚才建立的classes目录下即可。下面我们需要做的就是让服务器知道有这么一个servlet存在,并在客户端用户按照规定反问这个servlet的时候,此servlet能够正确的响应结果

?       改写web.xml文件

如清单【3-2】所示

【3-2】<?xmlversion="1.0" encoding="UTF-8"?>

<web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">

<servlet>

<servlet-name>serdemo</servlet-name>

<servlet-class>com.fin.ServletDemo</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>serdemo</servlet-name>

<url-pattern>/firstservlet</url-pattern>

</servlet-mapping>

</web-app>

对于web.xml中的内容,最为重要的就是<servlet></servlet>和<servlet-mapping></servlet-mapping>中的内容,在此先知道这些,在下一小节中将介绍配置文件。到此第一个servlet的开发已经完成,下面需要启动服务器测试我们的servlet。

?       运行servlet

进入tomcat安装目录的bin目录执行startup.bat文件,之后打开浏览器请求http://localhost:8080页面如果出现如图【3-3】所示则说明tomcat已正常启动

图【3-3】

之后再地址栏中输入http://localhost:8080/servlettest/firstservlet请求刚刚开发的servlet,如若页面中出现图【3-4】情形则说明此servlet运行正常。

图【3-4】

好让我们总结一下servlet的开发流程,首先建立web项目的目录,其次开发servlet程序,然后修改配置文件,最后启动服务器tomcat运行servlet测试调试运行。

?       Servlet的生命周期

我们曾说过,服务器只创建每个servlet的单一实例,每个用户请求都会引发新的线程—将用户请求交付给相应的doGet或是doPost运行出来。现在,我们更为详细的介绍servlet的创建和销毁方式,以及调用各种方法的方式和时间。我们首先汇总一下。

在创建servlet时,他的init方法会得到调用,因此,init是放置一次性设置代码的地方。在这之后,针对每个用户的请求,都会创建一个线程,该线程会调用前面创建实例的service方法,而不会重新的调用init方法(除非前面创建的servlet实例已经销毁)。最后,如果服务器决定卸载某个servlet,他会首先调用destroy方法

1、service方法

HttpServlet类中有一个service(HttpServletRequest  req,HttpServletResponse  res)方法,而一般的servlet都继承自HttpServlet这个类,所以一般的Servlet都具有service()这个方法,service方法是在用户使用浏览器请求Servlet时调用,service方法能够判断用户请求Servlet的方法如: Get、Post、Delete等,然后根据判定的结果调用执行doGet()或者doPost()或者doDelete()方法。正常的url请求,或是没有指定Method的html表单都是GET请求。把html表单中的method设置成post的请求为post请求。

如果你需要在Servlet中等同的处理post和get请求,只需要将doPost调用doGet方法或是用doGet调用doPost方法。如清单【3-5】所示:

清单【3-5】

Public void doGet(HttpServletRequest  req,HttpServletResponse res)

throws ServletException,IOException{

//

//程序块

//

}

Publicvoid doPost(HttpServletRequest req,HttpServletResponse res)

throws ServletException,IOException{

doGet(req,res);

}

在Servlet中我们99%的时间只关心get和post请求,所以我们在Servlet中覆盖doGet()和doPost()方法

2、init方法

大多数时候,你的Servlet只需要处理单个请求的数据,doGet()或doPost()是生命周期中唯一需要的方法,然而有时候我们希望在Servlet首次载入的时候,执行一些复杂的初始化任务,但并不想每个请求都重复这些任务。Init方法就专为这种情况设计。所以,他主要用于一次性的初始化工作,Servlet一般在用户首次调用对应Servlet的URL的创建,但也可以指定Servlet在服务器启动后载入,这可以再web.xml中设定。

例如:在Servlet中创建一个有十个整数组成的数组。由于这些数据都来源于复杂的计算,我们不希望每次都重复这些计算。因此doGet查找init中计算得出的值,而不是每次都生成他们。如清单【3-6】所示

【3-6】import
javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public
class
InitServlet extends HttpServlet {

private
long
modTime;

private 
int
[] numbers=new
int
[10];

public
void
init(){

modTime=System.currentTimeMillis()/1000*1000;

for(int i=0;i<numbers.length;i++){

numbers[i]=randomNum();

}

}

private
int
randomNum(){//得到一到一百随机数

return (int)(Math.random()*100);

}

protected
void
doGet(HttpServletRequest req, HttpServletResponse res)

throws
ServletException,IOException {

doPost(req, res);

}

protected
void
doPost(HttpServletRequest req, HttpServletResponse res)

throws
ServletException,IOException {

PrintWriter out=res.getWriter();

for(int i=0;i<numbers.length;i++){

out.println(numbers[i]);

}

}

@Override

protected
long
getLastModified(HttpServletRequest req) {

// TODO Auto-generatedmethod stub

return
modTime;

}

}

安装上面步骤我们将此Servlet所编译生成的字节码文件copy到classes目录中同样修改web.xml,将清单【3-7】代码加入到web.xml中的<web-app></web-app>之间,重新启动tomcat运行即可得到如图【3-7】所示的现实结果。

【3-7】<servlet-name>servinit</servlet-name>

<servlet-class>InitServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>servinit</servlet-name>

<url-pattern>/initservlet </url-pattern>

</servlet-mapping>

【3-8】

我们每次涮新页面,得到的结果都是这个结果,而在Servlet中我们知道这十个数都是随机生成的,每一次调用都应该产生不同的结果,所以可以肯定这个init方法制备调用了一次,只要服务器没有重启,那么浏览器就会一直返回这样的结果。

1.       destroy()方法

服务器可能会决定移除之前载入的Servlet实例,或许因为服务器的管理员要求这样做。但是在服务器移除Servlet的实例之前,他会调用Servlet的destroy方法,从而使得Servlet有机会关闭数据库连接、停止后台运行的线程、将cookie列表和点击计数写入到磁盘、并执行其他清理活动。但是,要意识到Web服务器有可能崩溃。因此不要将destroy机制作为向磁盘上保存状态的唯一机制。如服务器执行诸如点击计数,或对cookie值的列表经行累加等活动,应该主动地定期将数据写到磁盘上。

Servlet的配置文件

在前面的例子中,我们知道每创建完一个Servlet后,在Servlet运行之前都需要把Servlet的一些信息写入到web.xml中,这就是对Servlet的配置,最基本的配置是这样的,必须在<servlet></servlet>中指定Servlet的名字,以及Servlet对应的类文件,即在<servlet-name></servle-tname>中指定Servlet的名字,这个名字是随意的,但最好要有一定的意义,在<servlet-class></servlet-class>指定类的全名,及如果这个Servlet是打包的Servlet的话,要把包的名字也跟上。另外在<servlet-mapping></servlet-mapping>需要描述出具体Servlet的url访问路径,即在<servlet-name></servlet-name>中指定具体的Servlet名字,这个名字必须和<servlet></servlet>中指定的Servlet名字相同,在<servlet-urlpattern></servlet-urlpattern>中指定具体的url路径,这个url路径必须以“/”开头。这样配置完之后,就可以在浏览器中访问Servlet了。

Servlet的乱码处理

Servlet的部署运行

Servlet编写完之后,必须将Servlet编译之后生成的字节码文件copy到WEN-INF目录下的classes文件夹,至于Servlet的.java文件,我们可以放在任何位置,但为了项目的整齐美观,最好在项目的根目录下创建一个名为scr的文件件,将Servlet的源文件放入其中,方便开发者查看修改,另外需要注意的就是,不要玩了在web.xml中加入此Servlet的配置信息,如果这些事情都已完成,就将此web项目copy到服务器tomcat安装根目录下的wabapp下,启动服务器tomcat即可运行Servlet。

总结

本章主要介绍一些Servlet的基本知识,是J2EE开发者必须掌握的知识,也是初学者一个很好的基础。

在本章我们主要学习了:

1、开发一个简单Servlet所用到的类。

2、用PrintWriter类的对象可以再浏览器上输入信息。

3、怎样将Servlet的输出的信息用中文显示。

4、Servlet的生命周期,即init、service、destroy方法在何时调用。

5、Servlet信息如何在web.xml中进行配置。

如何部署Servlet,使其可以在服务器上能正常运行。

时间: 2024-11-03 21:24:27

Jsp之三 servlet基础的相关文章

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(一) : servlet基础

1.客户  servlet容器   servlet 2.实现接口 #1.接口:servlet : constrontor .init().service.destroy getServletInfo()  getServletConfig() 3.流程 #1.创建一个servlet类实现servlet接口 #2.重写servlet类方法 #3.在web.xml里配置文件 #4.在服务器里运行 4.一个servlet可以写多个servlet-mapping 映射只有两种方式:*.扩展名  ||  

jsp servlet基础复习 Part1

jsp和servlet的一些基础知识整理,用于备忘. 一.jsp与servlet的基本关系 1.jsp-->web容器-->servlet-->加载进容器的虚拟机执行-->输出执行结果给浏览器端 在这个过程,所有位于<%%>之外的值,都被认为是out.println()中的内容进行直接输出.详细理解看代码 <html> <% //例子说明:servlet和jsp的关系 boolean b = false; if(b){ %> 这里是内容一 <

JSP数据交互(二)和Servlet基础

01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. 02.在一个应用中只有一个application,每一个用户都会共享这一个application对象. 03.通过统计网站访问次数来讲解application的用法 02.对象作用域 03.Cookie简介 解析:cookie是Web服务器保存在客户端的一系列文本信息,根据域名和端口号区分是否保存成

Jsp/Servlet 基础

今天没事情做,就重温下servlet方面的知识,以作记录.在最开始接触J2EE时,也没花太多时间再这块,跟着教学视频,现在都有点淡忘了,不过这块是面试时考官喜欢问到的地方,考察基本功. Servlet Servle是一个特殊的java类,没有main方法,不能独立运行,也就是讲它需要其他容器或者工具来启动.Servlet是运行在客户端处理请求并作出相应的程序.简单来讲,用户若想用使用一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,继承

JSP/Servlet基础语法

相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html http://blog.csdn.net/liaoxiaohua1981/article/details/6761053 http://computer.c.blog.163.com/blog/static/102524482012314537670/ http://ww

[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

JSP servlet基础

简述什么是servlet Servlet就是一个实现了特定接口或者父类的java类. servlet是在服务器端运行的一个小程序.一个servlet就是一个java类,并且可以通过"请求-响应"编程模型来访问的这个驻留在服务器内存里的servlet程序. tomcat容器等级 tomcat的容器等级分为四个等级,servlet的容器管理context容器,一个context对应一个web工程. Engine是个引擎容器 HOST是主机容器 实现Servlet三种方案: 01.Servl

JSP和Servlet[1]

Servlet与JSP简介 Servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. JSP经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.JSP更擅长表现于页面显