tomcat与servlet

来源:互联网 发布:淘宝所有分类怎么去掉 编辑:程序博客网 时间:2024/05/23 01:17

tomcat的配置:从官网上面下载任一个版本解压即可,想将tomcat配置到eclipse里面方便使用只需要把tomcat解压的路径加进来即可。

servlset:

1、Servlet 简介
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2、Servlet 任务
读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
3、Servlet 架构

4、Servlet 包
javax.servlet 和 javax.servlet.http
5、Servlet 生命周期:Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
(1、)Servlet 通过调用 init () 方法进行初始化。Servlet是单实例的,是在第一次被请求的时候,创建servlet对象。
(2、)Servlet 调用 service() 方法来处理客户端的请求,每次请求的时候都会执行
(3、)Servlet 通过调用 destroy() 方法终止(结束)。项目重新部署的时候执行(会销毁servlet对象)。Servlet容器关闭的时候会销毁对象
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

5、主要方法:

(1、)service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是该方法的特征:
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException{
}
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
(2、)doGet() 和 doPost() 方法是每次服务请求中最常用的方法。下面是这两种方法的特征。
Servlet 客户端 HTTP 请求
当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。

附:创建servlet过程:

1、 创建一个动态的web工程test,注意:把web.xml勾选上
2, 创建servlet
(1、)让自定义的类继承HttpServlet
(2、)重写doGet或者doPost方法
(3、)给servlet配置访问的地址(URL)

这里有两种方法:
方法一:在web.xml中声明servlet的位置和名称
通过urlpattern给servlet配置地址(地址必须是绝对路径)
<servlet>
<servlet-name>HelloServlet(类名)</servlet-name>
<servlet-class>com.iflytek.servlet.HelloServlet(具体包.类名称)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet(类名)</servlet-name>
<url-pattern>/hello.do(或者/hello就可以了,但一定要以/开头,表示相对根目录)</url-pattern>
</servlet-mapping>
方法二:

注解:通过在类前面加上一句注解的方式:

@WebServlet(name="HelloServlet",urlPatterns="/hello.do")   (同样,这里/hello就可以了,一定要以/开头,表示相对根目录)
现在就可以在浏览器里访问这个servlet了:

http://localhost:8080/test/hello   (前面配置带了.do的话则访问http://localhost:8080/test/hello.do)。


现在关于servlet的生命周期举例验证一下:

package com.test;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name = "Test", urlPatterns = "/mytest")public class Test extends HttpServlet {int i=100;@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubSystem.out.println("这是init");System.out.println("init"+"  "+i);}@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("这是service");i++;System.out.println("service"+i);}@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("这是destory");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("这是doGet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("这是doPost");}}

现在通过不同的浏览器去访问http://localhost:8080/test/mytest,并多次访问,控制台打印结果如下:


证实了init只调用一次,即servlet是单例的,在tomcat第一次访问到即创建对象且只初始化一次,要想重新初始化,只有项目重新部署(即项目有改动后重新保存)或Servlet容器关闭(tomcat关闭)的时候会销毁对象即下次会重新初始化。很多网站也利用servlet的这个特性把数据保存到数据库中来记录访问量。同时本例也说明了service方法和doGet(或doPost方法)是等效的,只会调用一个,所以写了service就没必要写doPost(或doGet),写了也不会执行,除非在service方法体里手动调用doPost()(或doGet());而写了doPost(或doGet)也就没必要写service方法了,否则doPost(或doGet)方法就被覆盖了。

原创粉丝点击