HTML_day4(servlet的学习)

一、Myeclipsed的介绍:

  1、dubug功能:与C语言的dubug使用方法相似。

  2、junit:单元测试

      (1)功能:用于测试类中的方法。

      (2)测试原理:猜测为宏运用的封装。

  3、myeclipse配置tomcat插件

二、web体系的介绍:

  1、常见的软件系统体系结构:

      (1)B/S:浏览器/服务器。web运用主要是使用B/S结构

          **** 应用场景:浏览器

          **** 缺点:安全性较差

          **** 优点:更新时,是需要编写服务器端程序。

      (2)C/S:客户端/服务。

          **** 应用场景:App

          **** 缺点:更新时,需要将客户端与服务器端同步更新,比较麻烦。

          **** 优点:安全性较高

  2、web资源:

      (1)静态资源:html,浏览器可以直接解读。

      (2)动态资源:JavaScript(js)、servenet和其他web程序(PHP等)。浏览器不能直接解读,需要转换成html才能被浏览器解读。

  3、浏览器作用:接受客户请求,并作出回应。只会解析静态web资源。

三、Tomcat服务器介绍与使用:

  1、常用服务器的介绍:略

  2、tomcat简介:由Apache提供,开源免费。因为sun公司等参与到tomcat的开发,所以SP/Servet的规范总是能在tomcat中体现出来。

  3、tomcat不支持javaEE,既不属于EJB容器(企业级)。

  4、安装路径、目录、名称等的要求:不能含有中文和空格。

  5、tomcat的webapps目录用于装在项目:

      (1)创建步骤:在webapps下创建目录——>在创建好的文件目录下创建html文件,

      (2)存放动态文件:在webapps下创建WEB-INF目录,用于存放动态文件等。也可以存放其他文件,

            ——WEB-INF下的文件不能被客户端直接访问

            ——WEB-INF需要单独创建lib和classes:lib目录下存放项目源码;classes目录下存放编译器生成的.class文件。

  5、tomcat外部文件的配置:当资源存在于webapps目录之外的地方,需要进行文件的配置。目的是让服务器能找到资源

      (1)在server.xml内部添加内容:

            ——添加项目名;添加项目真实路径

·             ——使用浏览器访问时,需要使用server.xml内部指定的项目名。

        (2)在conf/catalina/localhost目录下添加xml文件:

            ——文件内容:context = 真实路径

            ——使用浏览器访问时,使用文件名。

  6、虚拟机配置:略

  7、server.xml源码的解读:未整理

  8、httpWatch:一款通信内容解读插件专用于IE浏览器

      (1)作用:用于解读客户端与服务器端之间的通信。

      (2)使用原因:网页呈现的源码只是信息传输的正文部分,它对请求头进行了隐藏。而httpWatch可以看到通信的全部信息。

  10、常用请求体:

      (1)GET:有空行,但没有方法体

      (2)POST:有空行,有方法体。

      (3)Referer:提示请求来自哪一个界面。

          ——应用场景:统计访问量;防止链接盗用。

  11、常用响应码:

      (1)200:请求成功。浏览器会把响应体内容显示在页面上。注:通常以2开头的响应码都属于响应成功。

      (2)404:请求的资源没有找到,说明客户端错误的请求了错误的资源。注:属于客户端错误。

      (3)500:请求的资源找到,但服务器内部出现了错误。注:属于服务器端错误

      (4)302:重定向。表示服务器要求浏览器重新再发送一个请求,服务器会发送一个响应头location,他指定了新请求得的url地址。

      (5)304:如果当前请求的内容属于浏览器缓存内容,且与上一次请求的的内容相同,服务器会相应304,并且不会相应正文,表示浏览器缓存的就是最新版本缓存。注:减少缓存内容的重复写入与读取,提高了响应效率。

       ——在html中,可以只用meta模拟响应头。 

四、java图片类的使用:

  1、主要使用BufferImage类

  2、图片验证: 

      (1)图片验证的作用:防止恶意注册;防止暴力破解

      (2)使用java的graphics类进行图片的设计

五、servlet知识:

  1、作用:servlet负责进行真正的事件处理。服务器(如tomcat)只是在获得浏览器端的请求后,负责请求事件与servlet的匹配。

      (1)使用代理设计模式——服务器负责处理请求事件所产生的附加服务。

      (2)servlet使用单列设计: 一个类只产生 一个对象。

      (3)servlet属于线程不安全问题:浏览器的请求访问属于异步问题,每一个servlet都是唯一的,一个请求对应唯一的一个servlet,即servlet不能同时为多个请求提供服务。虽然是线程不安全的,但是效率较高。注:每一个servlet都是唯一的,且功能都不相同。

  2、servlet的工作步骤:获取请求(接受请求数据)->处理请求->完成响应

  3、servlet属于接口:存在于javax.servlet包,当接口被实现后,是由服务器生成和调用对象,而不是由程序员调用,实际上是由服务器和servlet共同组成来了一个完成的类。

  4、servlet接口的方法:init()、service()、destroy()、servletConfig()、getServletInfor()

      (1)生命周期方法:init()、sercive()、destroy()

            ****** init():在servlet对象创建之后马上执行,且只执行一次

            ****** service():每一次调用servlet都会别执行,实际也是每一次处理请示的主要方法。

            ****** destroy():在servlet结束之前调用,且只会被执行一次。它只是起到提示作用,并不是它销毁servlet对象。注:在这个方法中,可以用于释放servlet占用的非内存资源。但是实际上很少这样操作。

      (2)另外两个方法:

            ***** servletConfig():用于获得servlet的配置信息。

            ***** getServletInfor():获得servle的信息。

  5、servlet的访问:需要在web.xml中配置路径

      (1)代码演示:

      ————————————(待插入代码

      (2)实质:创建虚拟路径标签,并与真实路径标签产生映射关系,同时都拥有相同的类名标签。当浏览器通过虚拟路径标签查找获得类名标签后,向上匹配到同名标签,然后在经过查找获得真实路径标签。注:最后服务器会根据真实路径(字符串表示的数据),然后使用反射获得servlet类。

  6、servlet的相关类或接口:

      (1)servletConfig接口:当使用servlet接口中的servletconfig()时,返回的就是这个接口的实列。

              ****** 作用:用于存储servlet的配置信息。

              ****** 内容:一个servletConfig对象,对应web.xml中的一个servlet的配置信息(即访问路径等)

            ***** servletConfig接口中的方法:用于获得servlet的 初始化参数值或名字。

                  ——getInitParamater(String name):获得初始化参数的值。

                  ——getInitParamaterNames():获得初始化参数的名字。注:返回的是老版的迭代器——Enumeration

                  ——getServletContext():获得上下文(请求体)

  

      (2)servletContext接口:它的对象用于装载servlet的上下文。

      (3)servletRequest类:用于封装请求信息。

      (4)servletResponse类:用于封装响应信息。

  7、genericServlet抽象类:实现了servlet接口,实际是对servlet常规操作的实现,并留有扩展空间。

      (1)genericServlet抽象类内部具有扩展功能的实现:当实现了servlet接口的方法后,新增带有空方法体的同名函数,方便后续子类的扩展——适配器的使用。

  8、httpServet类:是对genericServlet抽象类的继承。专门用于处理http协议。

      (1)参数强转:继承自genericServlet的service()方法,存在参数servletRequest和servletResponse,通过强转转换为httpServletResquest和httpServletResponse。然后调用自身重载的service()方法

      (2)继承httpServlet类的特殊要求:必须覆写doget()和dopost()方法,如果没有覆写这两个方法但是类有被调用了,将会出现405错误。注:doget()和dopost()用于获取客户端的请求方式。

  9、解决servlet的线程安全问题:核心是不产生资源共享。

      (1)不要在servlet中创建成员变量——初级用法。注:可以拥有局部变量。

      (2)可以创建无状态成员——中级用法。注:将类作为成员变量,但是类变量不能拥有成员变量。

      (3)创建有状态成员变量,但是只能被读取——高级用法。注:即只拥有getter方法,没有setter方法,这样外部将无法对内部变量进行修改。

  9、配置文件知识:conf下的web.xml是所有的web.xml的超类。如果一个servlet没有被配置信息,当使用浏览器访问时,会默认调用conf下的web.xml,并使用默认访问方式。注:conf下的web.xml指的是/tmocat/conf/web.xml。其他web.xml指的是/tomcat/webapss/项目名/WEB-INF/web.xml。

  10、servlet对反射的运用:通过虚拟路径获得真实路径,并最终获得类

      (1)首先获得<servlet—mapping>标签下的子标签获得类名,然后通过向上匹配,在所有<servlet>标签下获得同名类标签,随后获得真实路径,最终通过反射获得类。注:这一列操作是由服务器完成。同时可以使用socket模拟简易的服务器。

  11、servletContext:javaweb四大域对象之一。

      ——域对象:用于在多个servlet对象中传递数据。所有域对象都具有存取数据的功能,因为域对象内部都具有一个map。

      (1)一个工程项目对应一个servletContext对象。

      (2)一个servletContext对象可以被多个servlet调用。注:因为他负责servlet之间的通信。

      (3)可以配置公共的参数为所有的servlet使用。注:不同于servlet的初始化参数,每一个servlet的初始化参数只能用于自身。

      (4)可以通过ServletContext获得某个文件的真实路径:getRealPath()。  注:也可以直接获取某个文件的流操作。

      (5)生命周期:在服务器(如tomcat)启动时创建,在服务器关闭时销毁。

  12、classLoader类:用于读取src目录下的资源文件。注:实际上src下的每一个资源文件都会被拷贝放置在WEB—INF下的classes中

      (1)classLoader类的参数路径是相对与classes目录,而class类的参数路径是相对于当前的.class路径。

      (2)当资源文件与项目文件在同一目录下时,使用class类同样可以读取,但是当放置在目录之外,则不能直接使用路径名读取。

              ——当使用class(/文档名),class的读取路径变成了相对于classes目录,此时功能等同于classLoader。

六、服务器对处理请求:

  1、处理流程:

       (1)服务器每一次收到请求时,都会为这个请求开辟一个新的线程。

       (2)放服务器会把客户端的请求数据封装到resquest对象中,request就是请求对象的载体。

       (3)服务器还会创建reponse对象,每一个response对象会与一个特定的客户端绑定在一起,它可以用来向客户端发送响应。

  2、reponse响应头:

       (1)每一个响应头都是一个键值对。

       (2)在处理响应时,IO流中的servletOutputStream与printWrier只能使用一个。否则会抛出异常。

              ——使用fileOutputStream一次性读取时,需要指定byte数组的大小。byte数组的大小可以由文件本身决定:file.length

  3、快捷重定向:在处理302问题时,servlet需要反馈响应码302和设置响应头location。注:location用于指定再访问的地址.

       (1)sendRedirect():此方法是对原始操作的封装。函数原型:sendRedirect(String location)。注:它与重定向仍有不同之处,它对访问方式有所限制。

      解释链接:https://www.cnblogs.com/qiumingcheng/p/4928289.html

  

  4、request请求:可以通过request请求获得请求的响应头和响应体。

      (1)请求转发和包含:当一个请求需要多个servlet协作完成时,使用请求的转发和包含。通过getRequestDisparter()方法获得调度器

          ——  forward():用于请求转发。被转发的servlet可以设置响应头,但响应体无效。只会执行转发后的servlet的响应体,简称留头不留体。通常在请求转发中,原servlet不作任何请求。

          ——  include():用于请求包含。原servlet既可以设置响应头,也可以设置响应体。

      (2)设置响应体的编码:对于Post请求,可以直接通过相应的方法进行设置。对于Get请求,可以在server.xml内配置默认的编码方式,但此操作移植性很差,因为只是改变了自己tomcat的解码方式。也可以通过反编码的方式获得原始的编码内容,然后再转换为UTF-8。注:客户端编码方式一般为ISO-8859-1,在中国,服务器解码方式一般为gbk。同时,服务器会自动识别URL编码,并进行解码。例如表单标签的内容就会自动生成URL编码。

      (3)总结:主要接触了响应头,响应体的设置;请求的特殊处理,如重定向,请求的转发和包含;响应体的编码和解码方式,重点在于URL编码的转换和post请求与get请求的区别。

      (4)路径的区别:

          》在请求转发和包含中:使用"/"开头,是相对于当前的项目路径;不使用"/"开头,则相对于当前的servlet路径。     

          》重定向路径:使用"/"开头,相对于当前的主机,,需要自己手动添加项目名。

          》页面中的超链接和表单标签:使用"/"开头,相对于当前的主机,表示的是绝对路径;不使用"/"开头,则相对于当前页面的路径,属于相对路径,可移植性差。

          》ServerContext获取资源路径:相对于当前的项目目录,即当前index.jsp所在目录。

          》ClassLoader:不使用"/",相对于classes目录。

          》Class:使用“/”开头,相对于classes目录,与ClassLoader功能相同;不使用“/”开头,则相对于.class文件所在目录。

  5、属性与参数的区别:attribute,parameter

      (1)来源不同:参数来源于客户端(如表单标签),获得的方式可分为地址栏可见的get请求和地址栏不可兼得post请求。属性是服务器端的组件,通过域进行设置和获取。

      (2)操作方式不同:参数只能读不能被修改属性可读可改。

      (3)数据类型不同:参数在前台的定义不管是什么,在服务器端获取时都当做String类型对待,并且客户端的类型只能是简单类型的值,不能是对象等的复杂类型;属性的值则可以是任意的Object类型。 

 

 

 

      

    

        

posted @ 2018-12-29 17:21  怪兽不纯粹  阅读(141)  评论(0)    收藏  举报