servlet基础学习

程序的演进

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

BS框架的工作原理 

从用户的操作开始,用户在浏览器页面提交表单操作,向服务器发送请求,服务器接收并处理请求,然后把用户请求的数据(网页文件、图片、声音等等)返回给浏览器,至此一次请求完成。

Servlet(Server Applet) 

   1、概念
             是Sun(Oracle)公司制定的用于扩展web应用服务器的一个组件规范。
    2、web应用服务器:可以部署bs架构项目的服务器。
             最开始,web应用服务器只能进行一些静态资源的处理。
             无法满足需要经过计算得到的动态资源。
             之后出现了CGI,通用编程接口,来实现动态接口。
             但是CGI(Common Gateway Interface) 编程非常复杂,不利于开发与维护。
             之后就出现了替代CGI的技术,Servlet.
    3、规范
              通过继承或实现某些类或接口,符合一定规范,可以完成部分功能,并且需要部署到容器里的组件。    
    4、容器
              就是能实现组件功能的一个程序。

Tomcat 

   1、tomcat是apache基金会的一个servlet容器。
             也相当于一个微型的web应用服务器。
    2、安装:
              解压,放在某一路径下
    3、在conf文件下
       server.xml里的<Connector port = "8080"……
             修改成你想要的端口号:不修改的话可能与oracle的http协议端口号相碰撞
    4、启动服务器
         windows:startup.bat
         linux:startup.sh           
         PS:启动后窗口不要关闭
           异常:闪退:没有配置JAVA_HOME环境变量
                      Address already in use:……port    端口号被占用            
   5、打开任意浏览器进行测试:
         http://ip:prot
            例子: http://localhost:8080       
                         出现一只喵即成功

手工编写一个web程序

 web程序的组织架构
    (1)appName
         --WEB-INF
               --classes
                   ---xxx.class
               --lib(可选)
                   ---xxx.jar
               --web.xml
         --index.html(主页-可选)
    (2)自定义一个源文件(如:HelloWorld)
        0)先导包
        1)继承HttpServlet
        2)重写service方法
        3)获取流对象,输出信息   
    (3)编译源文件
        javac -classpath servlet-api.jar的全路径 源文件.java
    (4)将class文件放入组织架构里的classes文件夹下
    (5)编写web.xml
        1)注册servlet组件
         <servlet>
              <!--组件昵称-->
              <servlet-name>firstweb</servlet-name>
              <!--组件的类全名 -->
              <servlet-class>HelloWorld</servlet-class>
        </servlet>
      2)注册servlet组件的映射信息
         <servlet-mapping>
                 <!--必须与组件昵称一致-->
                 <servlet-name>firstweb</servlet-name>
                 <!--url-pattern的值与浏览器地址栏上的值必须匹配 -->
                 <url-pattern>/hello</url-pattern>
        </servlet-mapping>
     (6)部署项目到服务器中
                将(1)的整个组织架构放入webapps中
     (7)启动服务器
     (8)使用浏览器访问服务器中的项目
        http://ip:port/appName----- 访问项目的首页
        http://ip:port/appName/url-pattern 

使用IDE开发web程序 

  1、先配置tomcat
        window-->preferences-->server-->runtime environments-->add-->
        tomcat-v7.0-->next-->browser-->硬盘上的tomcat-->选择文件夹-->关闭
    2、显示tomcat  
         window-->show view-->servers-->点击连接-->选中tomcat-v7.0-->finish
    3、设置tomcat的参数信息
              双击tomcat
              配置server locations
              选择use tomcat installation
              修改 

使用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、概念
            http协议是w3c(万维网联盟)定义的一种用于应用层的协议,就是规定了浏览器与web服务器如何通信的数据格式。
   2、如何通信
      (1)浏览器与服务器之间先建立连接
      (2)浏览器将数据打包发送给服务器--->发送请求
      (3)服务器要将数据打包发送给浏览器--->发送响应
      (4)断开连接
            一次连接后就断开一次:为服务器端有限的连接数做到尽可能多的连接客户端。
   3、数据格式
           请求数据包---------请求行:请求方式+请求资源路径+协议类型
           reg:  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协议

       当浏览器向服务器端发送请求后,服务器端会维护两个对象,用来封装和处理请求数据包的数据,及其响应数据。
       分别是HttpServletRequestHttpServletResponse对象
    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()     

 Servlet的工作过程

 1、Servlet的运行原理
       (1)浏览器依据IP和PORT与服务器建立连接   
       (2)发送请求数据包到服务器
       (3)服务器创建Servlet组件对象
       (4)使用request处理请求数据包
       (5)使用response封装响应数据
       (6)服务器发送响应数据包
       (7)浏览器进行解析,生成页面
    2、Servlet处理参数值
             处理1对1形式的参数与参数值
            String getParameter(String name)
             如果name不存在,返回null
             处理1对多形式的参数与参数值
             String[] getParameterValues(String name)
             如果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的校验时,会严格匹配请求路径是否一致,如果
               匹配成功就会执行相关资源。
       reg:<url-pattern>/hello.html</url-pattern>
                       如果严格匹配成功后,即使程序中有hello.html页面,也不会返回这个页面,而是
                       执行相关Servlet
                       
     4.通配符匹配
               通配符:*,匹配0个或多个字符,必须使用斜杠
       reg:<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:post/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></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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值