您好,欢迎访问三七文档
ServletServ服务器,let小程序;Applet应用小程序。属于动态网页。动态网页,页面元素动态显示,用户和服务器之间可以实时交互,不需要刷新页面。动态网页的发展,第一个阶段CGI(commongateinterface)通用网关接口,使用服务器端程序,由服务器监听用户请求,根据用户请求实时加载运行服务器端程序;CGI程序存于硬盘之上,根据每次的请求从硬盘加载使用后立即释放,影响服务器响应速度。第二阶段,服务器容器,当服务器启动运行时,所有的服务器端程序一次性装载到服务器容器中,所有的外部请求都直接访问内存中的服务器容器,节省访问时间,并且服务器中的程序永久驻留不会被丢弃。Servlet技术是Sun公司提供的一种实现动态网页的解决方案,基于java语言的web服务器编程技术。Servlet技术也是jsp(javaserverpage)技术的基础。一个Servlet程序就是一个实现了特殊接口的java类,它有支持Servlet的web服务器调用和启动运行。一个Servlet程序负责处理它所对应的一个或者一组url地址的访问请求,并接受客户端发出的访问请求信息和产生相应的内容。Servlet能完成的任务:1.获取客户端通过html的form表单递交的数据和url后面的参数信息;2.创建对客户端的响应消息内容;3.访问服务器的文件系统;4.连接数据库并开发基于数据库的应用;5.调用其他的java类编写Servlet程序:1,一个Servlet类实现了javax.servlet.Servlet接口,Servlet接口定义了Servlet引擎与Servlet类之间的通信协议(包括请求和响应);2,javax.servlet.GenericServlet类实现了Servlet接口,实现了Servlet的基本特征和功能;3,javax.servlet.http.HttpServlet类继承了GenericServlet类,在GenericServlet的基础上添加了针对HTTP协议的特点补充;4,客户端每次访问支持HTTP协议的Servlet程序时,Servlet引擎都将调用Servlet的Service方法来进行处理。Servlet方法接收两个参数,一个是用于封装HTTP请求消息的对象,类型为HttpServletRequest,另一个是代表HTTP协议响应消息的对象,类型为HttpServletResponse。5,调用HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个对象写入的数据将作为HTTP响应消息的实体内容发送给客户端。Servlet的注册与运行1,Servlet类必须通过Servlet引擎启动运行,并且存储目录有特殊要求,通常需要存储在Web应用目录的WEB-INF\classes;2,Servlet类必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问;3,一个Servlet元素用户注册一个Servlet类,包含两个主要的子元素,Servlet-name表示在web.xml中注册的Servlet类的名称,也是Servlet类注册的唯一识别标志,不允许重名,Servlet-class用于注册Servlet的完整类名;4,一个Servlet-Mapping元素用于映射一个已注册的Servlet类的外部访问路径,包含两个子元素,已经注册好的Servlet类的标识Servlet-name,Servlet的外部访问路径的声明url-pattern,将映射文件设定成*.html或者*.htm,属于伪静态映射。5,Servlet映射细节同一个Servlet类可以被映射多个url地址上,即多个Servlet-mapping元素的Servlet-name设置的值是同一个Servlet的注册名;Servlet类和映射地址是一对多关系;在web.xml中配置的映射地址不可以重复;但是映射地址区分大小写;在Servlet映射到的url中也可以使用*通配符,如果使用通配符地址格式只有两种形式:一种是通配符加扩展名“*.扩展名”不需要加目录斜线;一种是以正斜线开头并以通配符结尾的形式“/view/*”;在web.xml中配置了如下四种映射方式1./abc/*映射到Servlet12./*映射到Servlet23./abc映射到Servlet34.*.do映射到Servlet4url不同形式访问的匹配原则:当Url:/abc/a.html,则/abc/*和/*可以匹配这个url;当Url:/abc,则/abc和/*和/abc/*可以匹配这个URL;当url:/abc/a.do,则*.do和/abc/*和/*可以匹配这个URL;当URL:/a.do,则/*和*.do可以匹配这个URL;当URL:/xxx/yyy/a.do,则*.do和/*可以匹配这个URL;缺省Servlet如果某个Servlet的映射路径是“/”,则这个Servlet就成为当前Web应用程序的缺省Servlet;凡是在web.xml文件中找不到的匹配,他们访问请求都转交给缺省Servlet处理,缺省Servlet用户处理所有其他Servlet都不处理的访问请求;在Tomcat的安装目录\config\web.xml中注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为缺省Servlet;当访问Tomcat服务器中的某个html文件和图片时,实际上访问的就是这个缺省的Servlet;Servlet处理表单数据:使用HttpServlet父类派生产生Servlet类,接收表单数据需要覆盖父类的doPost方法。doPost方法的参数HttpServletRequest,HttpServletResponse,使用HttpServletRequest的getParameter方法获取指定参数名的参数值,使用getParameterNames获取所有参数名,使用setCharacterEncoding设置请求对象的字符编码集为utf-8,使用响应对象的setContentType设置响应内容的类型和字符编码集。Cookie,客户端存储的纯文本文件,由服务器创建,并且加载在响应内容中传递给客户端,在以后的请求操作中,Cookie和请求内容一起被发送到服务器,服务器可以对Cookie进行验证操作。不同的网站都有自己的Cookie,不同浏览器对Cookie的存储路径也是不同的。同一个用户在同一个网站中相同的Cookie是可以在不同页面中使用的。因为Cookie在客户端是以纯文本并且是明文的形式存放,所以不可以存放敏感数据。Session,会话对象,由服务器创建,存储多种方式,内存进程存储存储在Tomcat服务器的容器中,也可以存储在数据库中或者以文件形式存储在服务器硬盘中。Session对象是以Map形式存在,每个用户都有自己独享的Session对象并且使用SessionID来区分不同的Session,每个用户的Session都是一个Map集合,Session中的属性以键值对得形式存在,获取或者设置Session属性都需要通过Session的键值来完成。Session是单用户多页面对象,多个页面可以访问同一个Session。Servlet中的对象:RequestDispatcher请求转发器,接收用户请求并将请求在服务器内部转发给任意其他资源。在转发过程中始终保持唯一一个请求对象。在javax.servlet包中是一个接口形式。在这个接口中两个方法,分别是forward和include,forward表示服务器内部转发,使用的是同一个请求对象,include是动态加载外部文件,使用include方法的资源文件和外部加载进来的资源文件使用的是同一个请求对象和响应对象。这两个方法对应的是Jsp页面中的jsp:forward和jsp:include动作。Servlet的配置信息对象,当一个Servlet被初始化时,Servlet容器将一些与当前Servlet相关的信息通过这个对象传递给Servlet对象。在Servlet的init方法中作为参数形式获取这个对象。ServletConfig对象有四个方法分别获取初始化参数名枚举和初始化参数,以及获取ServletName和应用程序对象ServletContext。在Servlet对象内部有一个getServletConfig方法获取Servlet配置信息对象。Servlet中的应用程序对象,ServletContext,当Web容器加载Web应用程序时会自动为每个Web应用程序创建一个ServletContext对象,并将这个对象交给ServletConfig对象。这个对象是全应用程序公有的皆可见的一个对象,所有这个对象的属性所有Servlet都可以获取。通过ServletContext对象加载初始化参数,并且分享每一个Servlet对象。应用程序对象ServletContext有自己的初始化参数,在Web.xml中可以通过context-param配置ServletContext的初始化参数。可以通过ServletContext获取RequestDispatcher请求分发器对象,实现请求转发或者请求重定向。ServeltContext含有两种方式获取RequestDispatch:一种是使用转向的Servlet注册名获取请求转发对象,另一种是使用URL路径方式获取请求转发对象。ServletContext是Servlet类中的应用程序对象对应的是Jsp中的application对象Servlet过滤器每个请求在进入Servlet之前都会经过若干个过滤器,每个响应在被发送给客户端之前也会经过若干个过滤器。这些过滤器组合起来如同管道一样对请求对象和响应对象进行加工和过滤。过滤器的核心方法是doFilter。过滤器可以对服务器上的所有资源进行管理,例:对Jsp,图片,HTML,文件等;字符编码过滤器,权限过滤器,防盗链过滤器,图像格式转换过滤器,数据压缩过滤器,解密过滤器,Xml文件转换过滤器等。创建过滤器类需要实现javax.servlet.Filter接口,这个接口有三个方法需要实现init初始化方法,destroy销毁方法,doFilter过滤器处理方法。Init方法和Servlet的init方法相同都是对象初始化操作,Tomcat服务器会通过这个方法将过滤器的初始化参数注入到过滤器中,初始化参数被封装到过滤器配置信息对象中FilterConfig,可以通过FilterConfig获取initParameter初始化参数。doFilter方法携带三个参数,请求对象和响应对象,过滤器链对象。创建好过滤器类后要在web.xml中注册过滤器,注册过滤器使用Filter标签元素,过滤器的地址映射Filter-Mapping标签元素。另一种注册过滤器的方式使用注解形式,注解是以@符号作为起始,@WebFilter声明过滤器注解,参数filterName注册过滤器的名字,urlPatterns过滤器对何种地址访问形式进行过滤操作,value过滤器对哪个资源文件进行过滤操作,initParams过滤器初始化参数,@WebInitParam过滤器初始化参数对象,其中name参数名,value参数值。在请求头中referer字段表示当前请求的来源,如果是空值则表示直接在地址栏中输入请求地址,可以通过这个字段判断当前请求是否是当前服务器链接过来的请求,可以通过这个字段实现防盗链功能。所谓防盗链是指通过非法链接方式访问网站资源。过滤器在完成所有工作后需要将请求和响应对象向后续的过滤器或者Servlet传递,这个传递请求和响应的工作由过滤器链对象FilterChain来完成,只需要调用FilterChain的doFil
本文标题:Servlet介绍
链接地址:https://www.777doc.com/doc-2858196 .html