Servlet、Tomcat

一、web程序的演变
1、单机程序:txt文档,word文档,ppt文档
2、两层CS架构
        客户端:client,设计用户界面和少量的逻辑代码
        服务端: 数据库, 大量的逻辑代码
        优点:交互简单
        缺点:业务逻辑使用数据库编程语言编写,在程序移植方面非常差,需要重新编写业务逻辑代码
3、三层CS架构
      c:client     用户界面设计及其少量的业务逻辑代码
      s:应用服务器,大量的逻辑代码
      db:数据库, 至进行数据的交互
      优点:移植性好
      缺点:开发客户端成本高,维护性差。
4、BS架构
     B:browser,浏览器
     s:应用服务器,所有的业务逻辑代码
     db:数据库,进行数据的交互
     优点:  只需要遵循浏览器的HTTP通信协议即可,无客户端开发成本。所有的逻辑代码都在服务器端开发。移植性好
     
二、BS架构的工作原理    

三、Servlet
    1、概念
         是Sun(Oracle)公司制定的用于扩展web应用服务器的一个组件规范。
    2、web应用服务器:可以部署bs架构项目的服务器。最开始,web应用服务器只能进行一些静态资源的处理。
         无法满足需要经过计算得到的动态资源。之后出现了CGI,通用编程接口,来实现动态技术。
         但是CGI编程非常复杂,不利于开发与维护。之后就出现了替代CGI的技术,Servlet.
    3、组件
         通过继承或实现某些类或接口,符合一定规范、可以完成部分功能,并且需要部署到容器里的组件。
    4、容器
       就是能实现组件功能的一个程序。
       
四、Tomcat
    1、tomcat是apache基金会的一个servlet容器。也相应于一个微型的web应用服务器。
    2、安装:
         解压,放在某一路径下
    3、在conf文件夹下
       server.xml里的<Connector port="8080"....
       修改成你想要的端口号:  不修改的话可能与oracle的http协议端口号碰撞
    4、启动服务器,关闭服务器(bin目录下)
       window:
           startup.bat
           shutdown.bat
       linux:
           start.sh
           shutdown.sh
       PS:启动后窗口不要关闭
       
       异常:
          闪退:没有配置JAVA_HOME环境变量
          Address already in use:.......port    :端口号被占用。

    5、打开任意浏览器进行测试:
       http://ip:port
       例子:
       http://localhost:8088

五、Servlet的组织结构
   appName
         WEB-INF
            classes
                xxx.class文件
            lib(可选)
            web.xml
         index.html(可选)       
    出现一只猫 即成功
    
六、手动开发一个web程序
    (1)编写一个源文件:先导包(jar包),继承HttpServlet,重写service方法,获取流对象,输出信息
    (2)将源文件编译成字节码文件
       javac -classpath servlet-api.jar的全路径 源文件.java
       将字节码文件放入组织架构里的classes文件夹下
    (3)编写web.xml
        注册servlet组件:
            <servlet>
                <servlet-name>组件昵称</servlet-name>
                <servlet-class>组件类全名</servlet-class>
            </servlet>
        注册servlet组件的映射信息
            <servlet-mapping>
                <servlet-name>必须与组件昵称一致</servlet-name>
                <url-pattern>/此值与浏览器地址栏上的值必须匹配</url-pattern>
            </servlet-mapping>
    (4)按照web程序组织结构进行存放,将整个servlet组织结构放置到服务器的webapps中。
    (5)启动tomcat服务器
    (6)使用浏览器访问服务器中的项目
        http://ip:port/appName
         访问的是项目的首页
        http://ip:port/appName/url-pattern
        
七、使用IDE配置tomcat
   1、配置tomcat
      window-->preferences-->servers-->runtime environment-->tomcat-v7.0-->next
      -->browser-->硬盘上的tomcat-->finish -->apply and close
   2、显示tomcat
      window-->show view-->servers-->点击连接-->选中tomcat-v7.0--finish
   3、设置tomcat的参数信息
      双击tomcat
      配置server locations
      选择 use tomcat installation
      修改webapps
      
八、使用IDE开发web项目
    1、new-->dynamic web project
    2、起名后-->next-->next-->选择web.xml-->finish
    3、定义Servlet组件,编写servlet规范的程序
    4、配置web.xml
    5、部署项目
         右键点击servers里的tomcat-->add and remove-->添加要部署的项目-->finish
    6、启动tomcat
    7、使用浏览器访问
    
九、错误代码及其解决方法
        服务器在处理完业务逻辑后,会响应浏览器,响应的内容包含了状态编码(数字类型)
        200:表示成功处理业务。
        404:服务器处理的路径存在问题,找不到相关请求资源
            如:
            (1)在地址栏上的路径有问题(大小写不对)
            (2)<url-pattern>的值与地址栏路径不一致
            (3)两个servlet-name不一致
            (4)没有部署项目(项目存放路径有问题)
            (5)项目的组织结构有问题
        405:容器找不到Servlet组件的service方法
            (1)方法名写错
            (2)方法的参数类型有问题
            (3)方法的异常,返回值有问题
        500:容器找不到Servlet组件
            (1)没有继承HttpServlet或实现Servlet接口
            (2)<servlet-class>写的不对
            (3)service里的逻辑出现了问题
            
十、HTTP协议
   1、概念
        它是w3c(万维网联盟)定义的一种用于应用层的协议,就是规定了浏览器与web服务器如何通信和通信的数据格式
   2、如何通信
        (1)浏览器与服务器之间先建立连接
        (2)浏览器将数据打包发送给服务器--->发送请求
        (3)服务器要将数据打包发送给浏览器-->发送响应
        (4)断开连接
     一次连接后就断开一次:为服务器端有限的连接数做到客户端的多次连接。
   3、数据格式
      请求数据包:   
            请求行:请求方式 + 请求资源路径+协议版本
                          get   +/firstweb/hello   http/1.1
            消息头:w3c组织定义的一些键值对,用来向服务器发送一些特定的数据。如浏览器的类型及其版本。
                        如:
                            User-agent: Edge/17.1736
                            Accept:text/html
            实体内容:请求方法为post请求时,实体内容才有数据。
       
      响应数据包:
            状态栏:服务器端处理数据的结果。
                    格式: 协议版本+状态编码+状态描述信息
                        如: http/1.1  200  ok
            消息头:服务器端要告诉浏览器的一些特定信息
                        Connect: keep-Alive
                        Date:.....
                        ContentType:text/html
            实体内容:服务器端处理后的数据
            
十一、Servlet如何处理HTTP协议
        当浏览器向服务器端发送请求后,服务器端会维护两个对象,用来封装和处理请求数据包的数据,及其响应数据。
        分别是HttpServletRequest和HttpServletResponse对象
        1、HttpServletRequest对象
            封装和处理请求数据包的数据
            提供了以下方法
            String getParameter(String name)
            String[] getParameterValues(String name)
            String getHeader(String str)
            Enumration<E> getHeaders();
            RequestDispatcher getRequestDispatcher(String url)
            .......
        2、HttpServletResponse对象
            封装和处理服务端要响应给浏览器的数据
            提供了以下方法
            void setContentType(String str)
            void sendRedirect(String url)
            .......
            
十二、Servlet的工作过程
        1、Servlet的运行原理
            (1)浏览器依据IP和PORT与服务器建立连接
            (2)发送请求数据包到服务器
            (3)服务器创建Servlet组件对象
            (4)使用request处理请求数据包
            (5)使用response封装响应数据
            (6)服务器发送响应数据包
            (7)浏览器进行解析,生成页面
            
        2、Servlet处理参数值    
            情形1:    参数与参数值为1:1关系
                        String  getParameter(String key)
            情形2:    参数与参数值为1:M关系
                        String[]  getParameterValues(String key)
            如果name不存在,返回null
            
        3、请求方式
            浏览器向服务器发送请求的种类有八种:
                    GET,POST,OPTIONS,HEAD,PUT,DELETE,TRACE,CONNECT
            (1)常用的两种GET和POST
                get:向特定资源发送请求(如返回登陆界面)
                 如:--在地址栏上直接写地址
                        --表单的默认提交
                        --点击链接
                post:向指定资源提交数据(提交表单,上传文件)
                        --表单的method属性设置POST
            (2)两者的区别
                get:提交的数据会显示在地址栏上,数据量小,最多为4kb。不安全
                post:提交的数据不会在地址栏上显示。因此我们可以提交大量的数据,相对安全
                
十三、Servlet处理中文参数值    
            中文会出现乱码,原因是编码与解码的字符集不一致造成
       
            发送请求时:中文乱码解决方式   
                方式1: 服务端先编码再解码,适合 get/post  
                            服务器端默认使用iso-8859-1解码        
                            浏览器端常用的为utf-8进行编码
                方式2:只适合post
                            request.setCharacterEncoding("utf-8") 
                            位置:处理请求参数前   
     
            发送响应时:
                            response.setContentType("text/html;charset=utf-8")
                            位置:写在获取流之前             

十四、重定向:
            1.概念
                    服务器处理完业务逻辑后,向浏览器发送一个状态码302,
                    同时发送一个消息头Location,此消息头的值是一个新地址。
                    当浏览器接收这些信息后,会立即向服务器发送该地址的请求
            2、重定向的原理


            3、如何重定向
                response.sendRedirect(String url)
                url:是重定向的新地址
            4、重定向的特点
                    地址栏的地址会发生改变。
                    重定向之前不能关闭流
                    两次请求不共享request和response对象  
                    
十五、Servlet如何处理请求资源路径。
        1、什么是请求资源路径
                http://ip:port/appName/url-pattern
                请求资源路径:appName/url-pattern
        2、处理原理
              浏览器依据ip和port确定服务器,之后依据appName
              确定应用程序所在的目录,servlet容器默认浏览器请
              求的是一个Servlet组件, 所以会校验web.xml里的
              url-pattern,进行匹配,执行相关的Servlet组件。
        3、精确匹配
              服务器在进行web.xml里的url-pattern的校验时,会严格匹配请求路径是否一致,如果匹配成功,就会执行相关资源
              如: <url-pattern>/hello.html</url-pattern>
                   严格匹配成功后,即使程序中有hello.html页面,也不会返回这个页面,而是执行相关Servlet。
        4、通配符匹配
              通配符:*  ,匹配0个或多个字符,必须使用斜杠
              如:<url-pattern>/*</url-pattern>
             例如:       
                    http://ip:port/appName/abc.html   匹配成功
                    http://ip:port/appName/service/add.html   匹配成功
                    http://ip:port/appName/listEmp   匹配成功      
        5、后缀匹配 
             在写web.xml里的url-pattern的值时,我们可以使用*.后缀的方式,后缀可以是1或多个字符组成的。
                如:<url-pattern>*.action</url-pattern>
                例如:  
                    http://ip:port/appName/abc.html   匹配失败    
                    http://ip:port/appName/emp/abc.action   匹配成功
                    http://ip:port/appName/listEmp.action  匹配成功
          
           优先级: 精确匹配最高(其次是通配符匹配)
           假如:web.xml中有三个Servlet组件,其url-pattern如下
            <url-pattern>/abc.do</url-pattern>
            <url-pattern>/*</url-pattern>
            <url-pattern>*.do</url-pattern>
         
           浏览器地址:http://ip:port/appName/abc.do 
           会执行精确匹配的Servlet组件
           
          如果精确匹配,通配符匹配,后缀匹配都没有成功,容器会查找
          是否有此文件,如果有此文件,打包数据返回给浏览器。如果没有,返回404.     
             
    6、Servlet组件的合并
          一般情况下,Servlet组件充当的角色为控制角色,控制角色的
          作用是接收请求后进行分发到不同的资源里。因此一个Servlet就可以
          对请求资源路径进行分析,使用分支结构来处理不同的资源。
                 
           如何合并:
            (1)采用后缀匹配进行修改web.xml
            (2)获取请求资源路径进行分析,然后使用if分支进行处理
                
十六、Servlet的生命周期
        Servlet容器如何创建Servlet对象,如何初始化Servlet对象,如何调用其功能,及其Servlet对象的销毁。
        生命周期分为四个阶段,分别为实例化,初始化,就绪,销毁。   
        
        阶段1:实例化
               即容器调用构造器创建Servlet对象.
               时机1:容器收到请求后,创建Servlet对象
               时机2:容器启动后,立即创建Servlet对象
                        web.xml中需要配置
                        <load-on-startup>1</load-on-startup> 
        阶段2:初始化
               容器在创建Servlet对象后,会立即调用init方法进行对象的初始化。
               一般情况下,我们不需要重写此方法,因为父类型GenericServlet
               里提供了init方法的实现逻辑。此方法保存了另外一个对象ServletConfig的引用
        
              如果你想初始化一些自定义的属性,我们可以将初始化的值配置在web.xml里。
                <init-param>
                        <param-name>company</param-name>
                        <param-value>华育兴业</param-value>
                </init-param>
               通过ServletConfig提供的getInitParameter(String name)来获取值       
     阶段3:就绪
             初始化之后,容器调用Servlet对象的service方法进行资源分配。
     阶段4:销毁
             容器会根据自己的算法来进行Servlet对象的销毁,销毁前一定会调用destroy()方法。
             因此我们可以重写此方法来完成一些业务逻辑。  
             卸载程序时,一定会销毁Servlet对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值