您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > JSP与Servlet技术
JSP与Servlet技术Servlet技术概述什么是ServletServlet是用Java语言编写的运行在服务器端的小应用程序,能够接受Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP协议进行工作的。在JavaWeb开发中要编写servlet,通常会继承HttpServlet。Applet、JSP、Javabean和Servlet•Applet和Serlvet中都没有main()方法,只有一些特定的方法用于启动、执行和退出,不同的是,Servlet不提供用户界面,运行在服务器端,而Applet提供用户界面,运行与客户端•Servlet和JavaBean一样,使用Java编写,不同的是,JavaBean不能独立运行,只是提供接口供JSP等访问,而Serlvet可以独立运行•Servlet编写HTML脚本时,需要使用print或者println方法逐句打印输出,给开发人员带来了很大的麻烦,而JSP网页实在HTML脚本中嵌入Java代码,从根本上改变了Servlet的编程方式•JSP、JavaBean和Servlet可以进行交流。Servlet的生命周期•(1)加载和实例化•(2)初始化事件•(3)执行-处理请求和响应•(4)终止事件或卸载InitServicedoGet()doPost()Destroy初始化事件请求响应终止事件执行的开发线程Servlet生存周期图11-1Servlet的生命周期Servlet的生命周期始于将它装入Web服务器运行时,在终止或重新装入Servlet时结束。是当服务器装载运行servlets,接收来自客户端的多个请求并且返回数据给客户端,然后再删除移开servlets。这个生命周期由javax.servlet.Servlet接口的init()、service()、destroy()方法表达。Servlet工作原理Web服务器doGet()方法doPost()方法HTTPGET请求HTTPPOST请求响应响应客户机图典型的servlet的继承结构Servlet的编程接口在ServletsAPI中,最常用的是Servletinterface,所有的servlets都执行这个接口。这些servlets或者是直接执行Servlet接口,或者是通过扩展类执行•Servlet类接口的分类–与Servlet实现相关——定义用于实现Servlet相关的类和方法–与Servlet配置相关——主要包括ServletConfig接口–与Servlet异常相关——ServletAPI定义了两个异常——ServletException和UnavailableException–与请求和响应相关——用于接收客户端的请求,并且做出对应的响应–会话跟踪——用于跟踪和客户端的会话–Servlet上下文——通过这个接口,可以在多个Web应用程序中共享数据–Servlet协作——主要是RequestDispatcher接口,用于进行视图派发–过滤器——定义请求响应过滤的相关API和接口–其他类——cookie和HttpUtils类•1.HttpServlet通常编写的Servlet类,一般从Javax包中的GenericServlet类继承而来,在HttpServlet中加入了一些附加的方法,这些方法可以协助处理HTTP基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法有:–doGet用来处理HTTP的GET、头部HEAD请求–doPost用来处理HTTP的POST请求–doPut用来处理HTTP的PUT请求–doDelete用来处理HTTP的DELETE请求–doHead用来处理HTTP的HEAD请求–doOptions用来处理HTTP的OPTIONS请求–doTrace用来处理HTTP的TRACE请求•2.HttpServletRequest这个接口中最常用的方法就是获得请求中的参数,这个请求中的参数是客户端表单中的数据。该类拥有的主要方法:getCookies()——获得客户端发送的cookiegetSession()——返回和客户端关联的HttpSession对象,如果没有给客户端分配Session对象,则返回nullgetSession(booleancreate)——和上一个方法类似,不同的是,如果没有给客户端分配Session对象,则创建一个新的Session并返回getParameter(Stringname)——获得请求中名为name的参数值,如果请求中没有该参数,则返回nullgetParameterValues(Stringname)——返回请求中名为name的参数值getRequestDispatcher(Stringname)——返回指定源名称的RequsetDispatcher对象。示例见:paraForm.jsp和RequestParam.java•3.HttpServletResponse它代表了对客户端的Http响应,允许servlet设置内容长度和响应的MIME类型,并且提供输出流ServletOutputStream常用的方法有以下几种:addCookie(Cookiecookie)——在响应中增加一个cookieencodeURL(Stringurl)——使用URL和一个SessionId重写这个URLSetCharacterEncoding(Stringcharset)——设置响应的字符编码类型setContentType(Stringtype)——设置响应的MIME类型ServletOutputStreamgetOutputStream()——返回一个记录二进制的响应数据的输出流。PrintWritergetWriter()——返回一个PringWriter对象用来记录格式化的响应实体sendRedirect(Stringlocation)——把响应发送到另一个页面或者Servlet进行处理示例见:cookie.jspwriteCookie.jspcookie.java•4.HttpSessionHttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。一个session可以通过Cookie或重写URL来维持。常用方法有:getId()——返回分配给这个Session的标识符getCreate()——返回创建session的时间getValue(Stringname)——返回一个以给定的名称绑定到Session上的对象。如果不存在这样的绑定,返回空值setMaxInactiveInterval(Intinterval)——设置一个秒数以表示客户端在不发出请求时,Session被Servlet引擎维持的最长时间。•5.RequestDispatcher从客户端接收请求,然后将它发给服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件)包含两个方法:forward(ServletRequestrequest,ServletReponseresponse)——把请求转发到服务器上的另一个资源(Servlet、HTML文件、JSP文件)include(ServletRequestrequest,ServletResponseresponse)——把服务器上的另一个资源(Servlet、HTML文件、JSP文件)包含到响应中forward方法和include方法的区别:forward方法调用后在响应中的没有提交的内容被自动消除。include方法使原先的Servlet和转发到的Servlet都可以输出响应信息。•过滤•在Web应用中实施过滤是常用的技术,通过过滤,可以对请求进行统一编码、认证等。有一种特殊的servlet——成为Filter(过滤器)•1.Filter接口——Filter必须实现的接口–Init(FilterConfigfilterConfig):用于初始化Filter–doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain):Filter的业务方法就在这里实现–Destory():释放Filter占用的资源•2.FilterChain接口——过滤链–通过此接口可以把过滤的任务在不同的Filter之间转移。–doFilter(ServletRequestrequest,ServletResponseresponse)•3.FilterConfig接口——代表Filter的配置–getFilterName():返回Filter的名称–getInitParameter(Stringname):获得名称为name的初始化参数–getServletContext():返回这个Filter所在Servlet上下文对象–getInitParameterNames():获得Fliter配置中的所有初始化参数的名称编写简单的Servlet步骤•1.编写Servlet–A.创建一个包假设包名是servlets,创建包的代码如下:packageservlets;–B.引入用到的包需要导入的包有javax.servlet.*,javax.servlet.http.*,通常还需要导入的包是java.io.*。-C.定义类的基本框架并继承HttpServlet每个Servlet都必须实现接口Servlet,而这里要编写的Servlet主要是用于Http协议的,可以继承实现了Servlet接口的HttpServlet。publicclassHelloServletextendsHttpServlet{}–D.编写成员方法•通常不需要成员变量,成员方法包括了init,service和destroy等。•如果需要对servlet进行初始化,就需要实现init方法。•如果需要在卸载servlet的时候执行一些功能,可以实现destory方法。•一般情况下,根据需要完成的功能只需实现服务类方法即可。如下所示的代码:publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html;charset=GB2312);PrintWriterout=response.getWriter();out.println(html);out.println(headtitleHelloWorld!/title/head);out.println(body);out.println(“pHelloWorld!/p);out.println(/body);out.println(/html);out.close();}Servlet基本结构publicclassserlvet类名extendsHttpServlet{//必须继承自HttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding(gb2312);response.setCharacterEncoding(gb2312);response.setContentType(text/html);//使用“request”读取和请求有关的信息(比如Cookies)和表单数据//使用“response”指定HTTP应答状态代码和应答头(比如指定内容类型,设置C
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:JSP与Servlet技术
链接地址:https://www.777doc.com/doc-3560882 .html