




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编写和使用Servlet,课程目标,了解Servlet相关的类包 掌握如何编写和使用Servlet 理解掌握init()、service()、doPost()和doGet()方法 理解Servlet的工作原理和生命周期 请求与转发,引入,Java Servlet技术就是在服务器端创建响应用户请求对象的技术,被创建的对象习惯上称为一个Servlet对象。 JSP是在Servlet的基础上产生的,屏蔽了其创建的过程,只是关心页面本身的结构和标记 采用Servlet可以更好的处理数据请求,Servlet API,javax.servlet包,定义了独立于协议的服务器小程序的接口和类 javax.servlet.http包,定义开发HTTP通信的服务器小程序的接口和类 javax.servlet.annotation,定义9个注解类型和两个枚举类型 javax.servlet.description,定义以编程方式访问Web应用程序配置信息的类型,一. Servlet对象的创建与使用,HttpServlet类及对象的创建 部署Servlet 运行Servlet,1.1 HttpServlet类及对象的创建,创建一个Servlet对象的类就是编写一个Java文件,实现一个特殊类的子类。 这个特殊的类就是javax.servlet.http包中的HttpServlet类。HttpServlet类实现了Servlet接口,实现了响应用户的方法,1.1 HttpServlet类及对象的创建,简单实例:Hello.java package star.moon; import java.io.*; import javax.servlet.*; import javax.servlet.http.*;,1.1 HttpServlet类及对象的创建,WebServlet(name=“helloServlet“,urlPatterns=“/hello.do“) public class Hello extends HttpServlet public void init (ServletConfig config) throws ServletException super.init(config); ,1.1 HttpServlet类及对象的创建,public void service (HttpServletRequest request,HttpServletResponse response) throws IOException response.setContentType (“text/html;charset=GB2312“); PrintWriter out=response.getWriter(); out.println(“); out.println(“您好,欢迎您。Hello,you are Welcome“); out.println(“(“); ,思考:,其中service方法可以用doGet及doPost进行替换 为什么在继承HttpServlet之后重新定义了doGet,而且自动调用doGet方法呢?,1.2 部署Servlet,编译保存 如果Servlet类Hello的包名是:star.moon 首先将Servlet源文件编译生成字节码文件:Hello.class 保存到: Web服务目录 WEB-INFclassesstarmoon,2. 部署Servlet 注释法,被Servlet3.0所支持。 WebServlet(name=“*“,urlPatterns=“*“) 例如: WebServlet(name=“helloServlet“,urlPatterns=“/hello.do“) 使用WebServlet为Servlet指定一个名称helloServlet,一个URL映射模式hello.do 访问地址 :8080/MyJavaWeb/hello.do,2. 部署Servlet 编写web.xml文件 /根标记 互不相同 hello com.demo2.Hello 所在的类名 hello /hello.do URL的路径名,1.3 运行Servlet,根据web.xml部署文件来请求服务器执行一个Servlet对象 根据 web.xml文件中标记指定的格式输入请求, 例如: :8080/MyJavaHello/hello.do,Web应用程序的文件组织与部署,test2:web应用程序的所有文件 test2WEB-INF:部署描述符文件web.xml及以下三个文件夹 test2WEB-INFclasses:存放Servlet和javaBean相关的类文件 test2WEB-INFlib:所需的类包(JAR文件) test2WEB-INFtags:标签文件 test2WEB-INFweb.xml:web应用程序的配置和部署信息,二、 Servlet生命周期,Servlet的生命周期 初始化:init()方法。(1次) 响应请求:service()方法或 doGet () 、doPost () 方法。(多次) 从服务器中移除: destroy()方法。(1次),二、 Servlet生命周期,init()方法 初始化Servlet对象。Servlet对象第一次被请求加载时,服务器会创建一个Servlet对象,该对象自动调用init()方法完成必要的初始化工作 传递一个ServletConfig对象给init方法,它包含Web应用程序的配置信息(web.xml中配置)获取的初始化参数,二、 Servlet生命周期,service()方法 调用service()方法响应客户的请求 传递两个参数:通过ServletRequest 对象得到客户端相关信息和请求信息;通过ServletResponse对象实现对客户端的响应,二、 Servlet生命周期,当请求来时,容器自动调用Servlet的service()方法,根据HttpServlet的service定义,就是判断HTTP请求方式,分别调用doGet()、doPost()等方法 HttpServlet中的service()方法对请求方式的顺序: doGet() doHead() doPost() doPut(),二、 Servlet生命周期,doGet()方法和doPost()方法 直接继承service方法 改在Servlet类中重写doPost()或doGet()方法来响应用户的请求; 增强响应灵活性,降低服务器负担 方法的两个重要参数 request:与内置对象request含义完全一致 response:与内置对象response含义完全一致,二、 Servlet生命周期,destroy()方法 当一个Servlet实例应该从服务器中移除时,调用destroy()方法,释放其使用的资源。,二、 Servlet生命周期,客户端,Servlet 容器,Servlet 对象,三、 通过JSP调用Servlet,表单向Servlet提交数据 computer com.demo2.Computer computer /getResult ,三、通过JSP调用Servlet,表单向Servlet提交数据(续) givenumber.jsp ,getResult,思考:如果givenumber.jsp存放在子目录number下,是否还能正确访问getResult?,三、通过JSP调用Servlet,通过超链接访问Servlet show com.demo2.ShowLetter show /helpMeShow ,三、通过JSP调用Servlet,通过超链接访问Servlet (续) showLetter.jsp 单击超链接查看英文字母表: 查看英文字母表 ,helpMeShow,四、URL模式设置,requestURI=环境路径+Servlet路径+路径信息 环境路径:请求参数的getContextPath()获取 路径映射:/*,代表所有的路径; 扩展映射:*.开头的,代表符合后缀名的所有路径; 根目录:空字符串”,代表/ 的请求 预设Servelt:仅包括/ 的URL模式,找不到对应的URL时,使用预设Servlet 完全匹配:路径上严格对应 如果环境路径在URL请求上有重叠,则从最严格的开始匹配。,四、URL模式设置,Servlet路径:getServletPath()获取 是应”/”开头的,但/*及”除外。 路径信息:getPathInfo()获取 除环境路径及Servlet路径外额外路径信息 http:/localhost:8080/test2/servlet/hello.view,实验,课后实训题17中(1)(2)(P57),五 请求与转发,HttpServlet类中有针对Http请求和发送响应的方法 HttpServletRequest接口 HttpServletResponse接口,HttpServletRequest,当HTTP转发给Web容器时,容器会收集相关信息并将其信息包装在一个HttpServletRequest 对象中 请求信息的内容 请求行:请求的方式(比如:GET或POST)、请求资源和使用的协议、 请求的头信息(Header:)信息体的附加信息,如主机地址等 信息体:请求的参数名称和参数值等信息,1 获取请求信息,getParameter获取请求的参数名称和参数值信息。得到某参数值的语法为: String username=request.getParameter(“name”); getParameterValues获取复选框或列表的值可以通过此方法得到: String textContent = request. getParameterValues(“param”); 注意可能得到空对象null(没有提交数据),1 获取请求信息,getParameterNames:使用此方法可以知道请求中有多少请求参数, Enumeration e =req.getParameterNames(); while (e.hasMoreElements() String param=e.nextElement(); getParameterMap:将请求参数以Map对象返回,Map的键(Key)是请求参数名称,值(Value)是请求参数值。,1 HttpServeltRequest举例,提交信息 login.jsp 用户名: 密码: ,1 HttpServeltRequest举例,接受信息Servlet *.java(Servlet) request.setCharacterEncoding(“UTF-8“); /接受从登录页面传过来的信息 String name=request.getParameter(“name“); /接受密码 String pwd=request.getParameter(“pwd“); ,请求对象的常用方法,getProtocol():获取请求使用的通信协议,如http/1.1等。 getServletPath():获取请求的JSP页面所在的目录。 getContentLength():获取HTTP请求的长度。 getMethod():获取表单提交信息的方式,如POST或GET。 getHeader(String s):获取请求中头的值。 getHeaderNames():获取头名字的一个枚举。 getHeaders(String s):获取头的全部值的一个枚举。 getRemoteAddr():获取客户的IP地址。 getRemoteHost():获取客户机的名称(如果获取不到,就获取IP地址)。 getServerName():获取服务器的名称。 getServerPort():获取服务器的端口号。 getParameterNames():获取表单提交的信息体部分中name参数值的一个枚举,HTTP标头(Head)信息,getHeader():与getParameter类似,指定标头名字返回对应的值; getHeaders():与getParameterValues类似,指定标头名字放回对应的Enumeration,元素为字符串 getHeaderNames():与getParameterNames类似,取得所有标头名称 举例:HeaderServlet.java,2 参数编码处理(中文乱码),中文乱码的由来 常用字符集 ASCII (美国信息互换信息代码):与8位二进制对应0-127 ISO8859-1:增加了所有西方欧洲语言的附加字符0-255。 GB2312和GBK(中国国家标准汉字信息交换编码):与16位二进制对应,中文的首位为1。 Utf-8:是一种针对Unicode的可变长度字符编码,又称万国码。,2 乱码产生分析,假定当前网页编码是UTF-8,通过表单使用进行提交,相当于对中文字符用UTF-8进行编码。 Servlet获得请求参数后,容器默认用ISO-8859-1进行编码,这样就出现了乱码。 解决办法,就是在容器对信息进行用默认编码集编码修改为请求参数的编码集,使提交表单与其编码一致。,2 中文乱码的解决方案,POST方法: 在执行操作之前,设置request的编码格式:request.setCharacterEncoding(“GB2312”); GET方法:单独转换字符编码 String str=request.getParameter(“boy“); byte b =str.getBytes(“ISO-8859-1“); str=new String(b,”gb2312”); 注意:为什么解决方法不一致,因为第一种方法只对请求体有作用,get是用URL传递信息的,而处理URL的是HTTP服务器,非web容器,2中文乱码的解决方案,举例: post:fom-post.html,EncodingServlet.java get:form-get.html, EncodingServlet.java 自行练习2.3.7 一个简单考试系统,利用请求对象存储数据 (1)public void setAttribute(String key,Object obj) 将参数Object指定的对象obj添加到session对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。 (2)public Object getAttibute(String key) 获取session对象含有的关键字是key的对象。由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应强制转化为原来的类型。,3 使用请求对象存储数据,3 使用请求对象存储数据,(3)public Enumeration getAttributeNames() session对象调用该方法产生一个枚举对象,该枚举对象使用nextElements()遍历session中的各个对象所对应的关键字。 (4)public void removeAttribute(String key) session对象调用该方法移掉关键字key对应的对象 修改 MyLoginServlet.java,4 上传文件,getReader() 请求对象中定义getReader(),可以取得一个BufferReader,借助该对象可以读取请求的Body数据 举例:BodyServlet.java/BodyForm.html/BodyFormImg.html getInputStream() 取得一个ServletInputStream,它代表请求Body的串流对象,可以利用它来处理上传文件区段 举例:BodyUploadServlet.java/BodyImg.html,4上传文件,Servlet3.0,新增Part接口,方便对文件上传处理 MultipartConfig:设置上传文件的相关信息 Part part=req.getPart(“photo”);获得Part对象 取得上传文件名: private String getFilename(Part part) 将内容写入文件中 part.write(filename);,4上传文件,Servlet3.0,新增Part接口,方便对文件上传处理 举例 单个上传文件:upload.html 、uploadServlet.java 批量上传文件:upload2.html、uploadServlet2.java,HttpServletResponse对象,用HttpServletResponse对象实现服务器对客户端的响应,向客户端发送数据 响应与请求类似,由状态行、头和可能的信息体。 状态行:HTTP版本,说明请求结构的响应状态码及描述状态码的短语。 响应头:服务器向客户端发送的消息。 响应信息体:请求运行后返回的响应结果。,输出字符,getWriter 对浏览器输出HTML,都要通过getWriter获得PrintWriter对象,它可以向客户发送文本数据 关键语句 PrintWriter out=response.getWriter(); out.println(“); .,输出二进制字符,getOutputStream 通过该方法可以实现对浏览器的字节输出,利用该方法得到ServletOutputStream,实现输出 关键语句 resp.setHeader(“Content-Encoding“,“gb2312“); resp.setContentType(“application/vnd.ms-excel;charset=gb2312“); PrintWriter out=resp.getWriter(); ExcelServlet.java,输出编码处理,设置Locale 通过setLocale方法设置一个地区信息,从而保证语系及编码;resp.setLocale(Locale.TAIWAN); setCharacterEncoding resp. setCharacterEncoding(“UTF-8”); setContentType设置字符编码 resp.setContentType(“text/html;charset=UTF-8”) 要接受中文请求参数并在响应是正确显示中文,必须对于输入请求参数设置中文及输出也要设置中文,设置响应的HTTP头,可以改变客户端的响应,使用的语法是“response.setHeader()”,比如让客户端自动每隔5秒刷新一次,程序名称:ShowTime.java response.setHeader(“Refresh“,“5“); out.println(“+new Date(); ,文件跳转,Servlet处理请求时,经常会遇到自动处理流程的情况,比如包含某个文件,将流程转给别的Servlet处理,或者直接转向到某个地址 一共以下几种基本方式 使用forward,转发请求和响应(HttpServletRequest) 使用sendRedirect,直接跳转(HttpServletResponse) 使用include,包含另一个流程(HttpServletRequest) 使用sendError,跳转错误页面。 (HttpServletResponse,转发请求 RequestDispatcher,RequestDispatcher的forward方法,forward会将请求转发给URL,动作在Web容器中进行,浏览器不知道,地址栏不会变化 关键语句 RequestDispatcher dis=request.getRequestDispatcher(“地址”); dis.forward(request,response); 举例:login.jsp,MyloginServl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州天柱县中等职业学校招聘合同制外聘教师备考考试题库附答案解析
- 中班安全教育活动设计
- 设备故障预测与自愈-洞察及研究
- 代谢表观遗传学肿瘤研究-洞察及研究
- 工厂安全培训总结文案课件
- 手指砸伤工伤安全培训课件
- 手指点画刺猬课件
- 间充质干细胞肺修复-洞察及研究
- 化肥厂质量改进办法
- 学生食堂食物安全培训课件
- 施工现场安全监理危险源清单一览表
- GB/T 233-2000金属材料顶锻试验方法
- FZ/T 74003-2014击剑服
- 颈椎DR摄影技术-
- 功能材料概论-课件
- 一点儿有点儿课件
- 眼视光技术专业技能考核题库-眼镜定配技术模块
- 体育测量与评价-第二章-体育测量与评价的基础理论课件
- 超清地质年代表
- 铺轨工程监理规划及工作内容
- 女生青春期生理卫生知识讲座(课堂PPT)
评论
0/150
提交评论