什么是Servlet

来源:互联网 发布:zabbix二次开发 java 编辑:程序博客网 时间:2024/06/02 00:30
1、什么是Servlet? 
    sun公司开发的一种用于扩展web服务器功能的 
组件规范。 
    1)扩展web服务器功能 
        a,CGI(早期用这个 现在不用了)
            common gateway interface(公共网关接口)。 
        当浏览器发送请求给web服务器(比如apache web 
        server),web服务器判断请求是否是动态资源的请求, 
        如果是,则调用相应的CGI程序(使用perl,c等语言 
        开发的,符合CGI接口定义的程序,该程序需要事 
        先保存到web服务器端特定的目录下面)去处理。 
            问题: 
                编程相对比较麻烦(CGI程序需要处理 
                web服务器传递过来的参数,即需要分 
                析原始的请求参数)。另外,CGI写的程序 
                可移植性也比较差。 
        b,组件技术 
            组件: 
                符合一定规范,实现部分功能的软件模块,该 
        模块必须要部署到相应的容器当中才能运行。 
            容器: 
                提供组件的运行环境,并且管理组件的 
            生命周期的一种程序。 
    2)组件规范 
            Servlet是一种组件,不依赖于容器来运行, 
        也就是说,我们开发的Servlet,可以在符合 
        相同的规范的不同的容器当中运行。 
            当web服务器(比如apache webserver)收到请求之后, 
        会依据请求的类型(比如,是动态资源的请求) 
        会调用容器(比如tomcat),容器会调用Servlet来处理。 
        容器在调用Servlet之前,会先将请求参数分析出 
        来,这样,Servlet不用再去分析请求参数( 
        相对于CGI技术,开发起来更方便)。 
     
2、如何开发一个Servlet? 
        step1 写一个java类,实现Servlet接口或者 
    继承HttpServlet。 
        step2 编译 
        step3 打包 
            建一个文件夹 
            appname(名称任意,最好有一定的含义) 
                WEB-INF 
                    classes(.class文件) 
                    lib(放.jar文件,可选) 
                    web.xml(描述servlet,比如如何访问) 
        step4     部署 
                将step3对应的整个文件夹(或者 
                对整个文件夹使用jar命令压缩成 
                .war文件)拷贝到web服务器( 
                所有的servlet容器,比如tomcat, 
                除了是一个容器以外,同时,也 
                具有web服务器的相应的功能,所以, 
                以后,不再区分servlet容器与web 
                服务器,统称为web服务器)特定的 
                文件夹下面。 
        step5 启动服务器,访问servlet 
            http://ip:port/appname/servlet url-pattern 
            http://localhost:8080/firstweb/hello 
3、tomcat的安装与简单的使用 
    1)安装 
        a,将tomat.zip解压到/home/soft01下。比如 
    解压之后 /home/soft01/apache-tomcat5.5( 
    主文件夹)。 
        b,配置环境变量 
            cd /home/soft 
            vi .bash_profile 
            JAVA_HOME: jdk的安装路径 
            CATALINA_HOME:/home/soft01/apache-tomcat5.5 
            PATH:/home/soft01/apache-tomcat5.5/bin 
        c,启动tomcat 
            cd /home/soft01/apache-tomcat5.5/bin 
            sh startup.sh (startup.bat) 
            sh catalina.sh run(如果上面命令有问题,换这个) 
            在浏览器地址栏输入http://localhost:8080 
        d,关闭tomcat 
            cd /home/soft01/apache-tomcat5.5/bin 
            sh shutdown.sh 
    2)tomcat各个文件夹的作用(了解) 
        a,bin : 可执行文件,比如启动和关闭服务器的命令。 
        b,common: 可以将一些jar文件放到这儿,所有 
        部署在这台服务器上程序都可以访问这些jar文件。 
        c,conf:服务器的配置文件(比如server.xml, 
        web.xml,这些配置文件会影响到服务器的运行, 
        一般需要重新启动服务器才能生效)。 
        d,webapps: tomcat的部署文件夹。 
        e,work:服务器在运行过程当中生成的一些临时 
        文件。 
4、Servlet是如何运行的 
    在浏览器地址栏输入了 
    http://localhost:8080/firstweb/hello 
    step1 浏览器依据ip,port建立与服务器之间的连接。 
    step2 浏览器会将一些数据(包括请求资源路径、 
    请求参数、浏览器自身的一些信息)按照http 
    协议打成一个数据包(请求数据包),然后发送 
    给服务器。 
    step3 服务器分析请求数据包(解包),将分析的 
    结果封装成一个对象(是一个符合 
    HttpServletRequest接口的对象,一般称为请求 
    对象),然后再创建一个响应对象(是一个 
    符合HttpServletResponse接口的对象)。然后, 
    step4 服务器分析请求资源路径(/firstweb/hello), 
    称依据firstweb(应用名)找到webapps下面对应的 
    文件夹,然后,使用/hello去web.xml文件中查找 
    对应的Servlet配置。依据Servlet类名创建 
    相应的实例。接下来调用该实例的service方法, 
    在service方法里面,可以通过request(请求对象) 
    方便地获取请求参数,也可以将处理结果存放到 
    response(响应对象)。服务器会将response中的数据 
    取出来,打包(按照http协议,将处理结果转换成 
    一个数据包),然后发送给浏览器。 
    step5 浏览器从响应数据包中取出数据,生成相应的 
    界面。 
     
5、使用myeclipse来开发servlet 
    1)配置myeclipse 
        让myeclipse管理tomcat(启动、关闭、部署) 
    2)建一个web工程 
    3)部署 
    4)访问servlet 
6、常见错误         
    1) 404错误: 
        404(是一个状态码,由w3c定义,不同的数字 
        代表不同的含义) 
        产生这个错误的原因: 
            输入的路径不正确。 
        解决方式: 
            检查你输入的路径。 
            正确的路径应该是: 
            http://ip:port/appname/servlet url-pattern 
    2) 500错误: 
        产生这个错误的原因: 
            程序编写错误或者系统内部出错 
        解决方式: 
            检查源文件,包括相应的配置文件。 
    3) 405错误: 
        产生这个错误的原因: 
            服务器只认识service方法,如果没有提供这个 
        方法,则服务器会调用HttpServlet的service方法。 
        该方法会报错。     
        解决方式: 
            检查service方法的签名