Servlet的使用:

Servlet首先要创建javaweb的工程,而且要使用tomcat服务器或者是Apache官网的其他的服务器,还要添加到工具里面。

工具给我们生成了一个Servlet类,它继承自HttpServlet。并且生成了init(),destory(),doGet(),doPost()方法,这些方法需要我们按照自己的需求去实现。其中init和destory域servlet的生命周期有关。

Init方法会在启动的时候调用,而且只会调用一次,而destory方法会在结束时调用,清空缓存。

web开发最常用http协议方法是getpost,这里的doGetdoPost方法正是让我们处理用户的getpost请求的地方。

每个Servlet在创建后,我们都必须给它配置一个映射的地址,才能访问,好在工具已经帮我们做了这一步,点开工程下的WebRoot文件夹下的Web-INF,我们会看见一个web.xml的文件。

Thisis the description of my J2EE component

This is the display name of my J2EEcomponent

HelloWorldServlet

myservlet.HelloWorldServlet

HelloWorldServlet

/servlet/HelloWorldServlet

index.jsp

用于是配置一个新建的Servletdescriptiondisplay-name标签主要是描述性的,可以忽略不计,甚至可以干掉。

servlet-name标签相当于给这个Servlet起一个别名,给哪个Servlet,就给servlet-class标签里配置的Servlet

servlet-class正是我们刚才创建的servlet的全路径。

配置它的访问路径正是用于配置路径映,servlet-name这里就配置刚才哪个别名,url-pattern就配置真实访问路径。

welcome-file-list在这里与我们配置Servlet没有任何关系,它表示当访问工程时,默认访问哪个具体页面。

现在我们重新部署一下,然后启动服务器,在浏览器输入

http://localhost:8080/工程名/包名/Servlet类名

根据显示的网页来看,我们这里只是调用了doGet方法。

我们把doGet方法修改一下,打印一些其他的文字或标签。

改完之后保存并刷新一下工程,然后刷新一下浏览器,会发觉内容已经变了?注:凡是修改Servlet或者jsp这类操作,MyEclipse会自动重新部署一下,

且不需要重启服务器,但是以后涉及到类的创建,方法的修改,配置修改,往往需要重新部署并重新启动服务器,才能看到最新版本。

至此,我们已经用Servlet开发了一个小小的网页。

在弄清楚整个过程之前,我们有必要去了解一下Servlet的生命周期

Servlet生命周期包含四个阶段

1,启动阶段:Servlet里没有main方法,自己不能启动,所以一般由web服务器(如tomcat)启动,可以想象,web服务器肯定有main方法。

2,初始化阶段:这个时候会调用init方法,这个方法只会在第一次访问该servlet时调用一次。我们可以在这个方法里面做一些初始化的操作,比如打开数据库连接,读取配置文件等等。

3,请求处理阶段:servlet会根据用户请求的方式(get或者post)来调用doGet或者doPost方法。

4,销毁阶段:servlettomcat卸载(移除)时,会调用destory方法,这个方法只会调用一次。我们可以在这个方法里面做一些资源释放的工作。

编写Servlet的重点在请求处理阶段,这一块是整个编码的核心。

我们先看看Servlet中的doGet方法

这个方法包含两个参数:HttpServletRequestHttpServletResponse

HttpServletRequesthttp请求对象,是服务器在接收用户请求后给我们封装的对象,所有与请求有关的数据(比如请求的地址,参数,请求的数据,上传的文件,客户端的ip等)都被包含在这个对象里面。为了便于讲解,我们把这种对象称为request对象。

HttpServletResponse:http响应对象,我们可以通过这个对象给用户响应一些内容,比如网页或cookie(以后会介绍)。为了便于讲解,我们把这种对象称为response对象。

response对象可以得到一个输出流对象:

PrintWriter out =response.getWriter();

通过这个对象,可以给用户输出网页信息

out .println("");

out.println("");

out.println(" AServlet");

out.println(" ");

out.println("  Hello world ");

out.println(", doGet method");

out.println("  Hello world ");

out.println(" ");

out.println("");

最后刷新并关闭

out.flush();

out.close();

有时候打印中文会出现乱码,我们可以在最前面加上:

response.setContentType("text/html;charset=gb2312");这句代码来解决,里面的gb2312即是一种编码(其他的编码还有gb2312utf-8等)