第三章Servlet服务器端编程3.3Servlet编程接口3.2一个简单的Servlet程序3.1Sevlet基础知识3.4处理HTTP报头3.5处理Cookie3.6会话跟踪3.7ServletContext接口3.0任务引入能力目标熟练掌握Servlet类的编写能力;掌握配置Servlet映射的方法;掌握Servlet多线程处理方法;具体技能:处理HTTP报头的技能;处理Cookie的技能;处理Session的技能;编写线程安全的Servlet的技能。态度目标问题解决能力;主动性;理解能力。本章知识点Servlet简介Tomcat的安装、配置及布署;配置Servlet映射;请求对象request与应答对象response简介;常用request的请求参数;会话对象Cookie与Session的实现;全局对象ServletContext类的使用。任务引入美国Loucs公司预计开发的客户投保系统,并不是一个大众网站系统,所以在客户自行进行投保操作时要进行身份验证的工作,要求系统通过不同的客户操作进行显示不同客户的数据信息。本章节的Servlet技术可以方便的进行后台程序的控制,并且能够与服务器端的程序(如数据库、WebServices等)通信,所以简单的验证工作更轻而易举。3.1Servlet基础知识3.1.3Tomcat的安装、运行及配置3.1.2Servlet简介3.1.1背景知识3.1.1背景知识常用的Web服务器:IIS;Apache;Weblogic;Websphere;JBOSS。常用开发工具:JBuilder;Eclipse;MyEclipse;NetBeans。通常的动态网页技术:CGI(CommonGateWayInterface);API常用的有(NSAPI,ISAPI);ASP(ActiveServerPage);ASP.NET;PHP(PersonalHomePage);Servlet;JSP(JavaServerPage)。3.1.1背景知识3.1.2Servlet简介Servlet是在Java2平台下取代CGI的一种技术,是一个接收请求,作出响应的网络服务Java类。Servlet是服务器小应用程序;Servlet用来完成B/S架构下,客户端请求的响应处理;Servlet平台独立,性能优良,能以线程方式运行;ServletAPI为Servlet提供了统一的编程接口。3.1.3Tomcat的安装、运行及配置一、安装从下载,直接运行可执行文件安装二、Tomcat的目录结构bin/二进制可执行文件和脚本common/Catalina本身和web应用可加载的类目录conf/配置文件目录lib/所有Web应用可见的类库目录logs/日志目录server/服务器所需的类库目录webapps/Web应用所存放的目录work/Tomcat的工作目录(存放临时文件)3.1.3Tomcat的安装、运行及配置三、Tomcat配置文件server.xml服务器的主配置文件web.xml定义所有Web应用的配置(缺省的Servlet定义和MIME类型定义)tomcat-user.xml定义了tomcat用户的信息3.1.3Tomcat的安装、运行及配置四、server.xml的层次结构server.xml的层次结构五、常用配置示例加入新的Web应用:在server.xml中Context位置加入下列参数。Contextpath=“应用名“docBase=”目录位置debug=0reloadable=true/更改端口号更改Connector中的port属性3.2一个简单的Servlet程序3.2.3Servlet的生命周期3.2.2在web.xml中配置servlet3.2.1案例3.2.1案例需求:编写一个生成纯文本的简单的Servlet类。目的:了解Servlet的基本概念案例3-1:一个简单的Servlet类3.2.2在web.xml中配置servlet在web.xml中配置servlet,让客户端浏览器可以访问:servletservlet-nameHelloWorld/servlet-nameservlet-classchap03.HelloWorld/servlet-class/servletservlet-mappingservlet-nameHelloWorld/servlet-nameurl-pattern/hello/url-pattern/servlet-mapping为了方便调试servlet,可以通过配置servlet-invoker的方法,使得不需要配置servlet映射即可访问servlet程序。3.2.3Servlet的生命周期生命全过程:加载→实例化→初始化→处理请求→退出服务API中的过程:init()publicvoidinit(ServletConfigconfig)throwsServletExceptionservice()publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,java.io.IOExceptiondestroy()publicvoiddestroy()3.3Servlet编程接口3.3.2Servlet编程案例3.3.1Servlet编程接口所有Servlet编程都通过继承javax.servlet.http.HttpServlet实现请求处理方法:(分别对应http协议的7种请求)1.doGet响应Get请求,常用2.doPost响应Post请求,常用3.doPut用于http1.1协议4.doDelete用于http1.1协议5.doHead仅响应Get请求的头部。6.doOptions用于http1.1协议7.doTrace用于http1.1协议实例的个数:1.在非分布的情况下,通常一个Servlet在服务器中有一个实例;2.如果Servlet实现了SingleThreadModel,则该Servlet会对每一个请求产生一个响应实例。3.3.1Servlet编程接口3.3.2Servlet编程案例案例:使用doGet和doPost方法处理请求要求:编写一个带有doGet和doPost方法的Servlet目的:掌握基本的Servlet请求处理技术要点:publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOExceptionpublicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException案例3-2:案例3-3;案例3-4;案例3-53.4处理HTTP报头3.4.2获取CGI变量3.4.1获取Http请求头3.4.3设置HTTP响应头3.4.4Servlet的跳转3.4.1获取Http请求头不同于表单数据;请求头直接由浏览器设置,在初始的Get/Post请求行之后立即发送可以获得客户端/服务器端的一些配置信息获取请求头很简单,直接通过HttpServletRequest的getHeader方法。头的名称不区分大小写,常用的头信息如下:getContentTypegetMethodgetRequestURIHost案例3-6:获取所有的HTTP请求头信息3.4.2获取CGI变量CGI变量:1.基于HTTP请求的行和头;2.来自于套结字3.来自于服务器的安装参数可以通过HttpServletRequest的相关方法来访问这些变量常用的CGI变量CONTENT_TYPE—getContentType()PATH_INFO---getPathInfo()REMOTE_ADDR---getRemoteAddr()QUERY_STRING---getQueryString()SERVER_NAME---getServerName()SERVER_PORT---getServerPort()案例3-7:编程获取CGI变量3.4.3设置HTTP响应头响应头说明Content-Encoding用于标明页面在传输过程中的编码方式Content-Type用于设置servlet输出的MIME(MultipurposeInternetMailExtension)类型。在Tomcat安装目录下的conf目录下,有一个web.xml文件,里面列出了几乎所有的MIME类型和对应的文件扩展名。正式注册的MIME类型格式为maintype/subtype,如text/html、text/javascript等;而未正式注册的类型格式为maintype/x-subtype,如audio/x-mpeg等Content-Language用于标明页面所使用的语言,例如en、en-us等Expires用于标明页面的过期时间,可以使用这个来在指定的时间内取消页面缓存(cache)Refresh这个报头表明浏览器自动重新调用最新的页面3.4.4Servlet的跳转在Servlet中通过验证后经常需要跳转到其他页面显示1.SendRedirect方式response.sendRedirect(url)案例3-8;例3-9;2.Forward方式request.getRequestDispatcher(url).forward(request,response)案例3-10;案例3-11。3.5处理Cookie3.5.2Cookie案例3.5.1Cookie基础Http协议的无连接性要求出现一种保存C/S间状态的机制;Cookie:保存到客户端的一个文本文件,与特定客户相关;Cookie以“名-值”对的形式保存数据;创建Cookie:newCookie(name,value);可以使用Cookie的setXXX方法来设定一些相应的值。setName(Stringname)/getName()setValue(Stringvalue)/getValue()setMaxAge(intage)/getMaxAge()3.5.1Cookie基础3.5.1Cookie基础利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端;利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组。3.5.2Cookie案例学习Cookie相关案例,学习如何设置及读取Cookie。设置Cookie案例:3-12读取Cookie案例:3-133.6会话跟踪3.6.2HttpServletRequest中的会话管理方法3.6.1会话跟踪3.6.3HttpSession中的常用方法3.6.1会话跟踪Session在某段时间一连串客户端与服务器端的“交易”;实质上,它是依靠Cookie来实现的。在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。通过HttpSession来读写Session。3.6.2HttpServletRequest中的会话管理方法getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。getSession(booleanisNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则