- 0
- 0
- 约3.72千字
- 约 32页
- 2019-10-11 发布于广东
- 举报
12.2.1 控制层Java Web项目中使用Servlet作为控制类(层),控制层的Servlet需要完成请求分发,向客户端输出处理结果和错误处理等功能,这些功能是软件开发中实现任何功能都必须的,所以把它们作框架的功能之一。在示例中主要完成以下功能(实际应用中不仅只有这些): ◆ 请求分发; ◆ 显示处理结果; ◆ 回送JSON数据; ◆ 回送二进制数据; ◆ 错误处理。在项目的com.phoenix.servlet包(新建包的方法见附录A2.2)中新建BaseServlet.java(新建类的方法见附录A2.3),实现上述5项功能,下面分别予以简要说明。(1)请求分发常用的HTTP请求方式为GET和POST方式,所以在BaseServlet中实现doGet和doPost方法即可。为了代码的征用,可以直接在doGet方法中调用doPost方法,只实现doPost方法即可。实现请求的分发需要知道用户请求了哪个方法,这可以通过获取客户端请求参数获得。由于不能事先知道用户请求哪个方法,所以只能通过使用Java的反射机制,调用用户请求的对象方法,代码如清单12-1所示。method为BaseServlet中一个静态的字符串变量,用于存放客户请求的方法(名)。由于全部的Servlet都要通过这个method进行转发,所以设置为静态(static)的变量。BaseServlet.method = req.getParameter(method);通过request对象的getParameter()方法获得客户端请求的方法,获得用户请求的方法之后就是要查找具体的类,调用该类中指定的方法。// 获取目标类Class? objClass = this.getClass();// 声明目标方法的参数类型Class?[] types = { HttpServletRequest.class,HttpServletResponse.class };// 声明目标方法的参数(对象)Object[] args = { req, resp };System.out.println(User invoke method = + method);// 查找用户调用的目标方法Method methodRef = objClass.getMethod(method, types);// 调用用户请求的目标方法methodRef.invoke(this, args);因为所有的Servlet都要继承自这个BaseServlet,所以具体的目标类(即用户请求方法所在的类)都可以认为是该类的子类,所以可以通过this(指向当前的类对象)的getClass()获取需要运行的目标类。然后声明调用方法的参数类型types,它是一个Class?类型(不是对象)的数组,再声明参数名字args,它是一个Object类型的数组,因为要接收各种类型的参数,所以要用Object类型的数组,这里是req和resp。分别是HttpServletRequest和 HttpServletResponse类型的对象,也就是doPost方法的两个参数。然后,通过目标类的getMethod()方法,获得用户调用的方法methodRef,通过invoke()调用该方法,完成用户请求的分发操作。注意:要使用这个BaseServlet进行请求的转发,客户端请求时必须包含一个名为“method”的请求参数,它的值就是要请求的方法名。(2)向客户端回送字符串信息无论是给客户显示处理结果,还是显示客户请求的数据,都需要发送文本或者是JSON数据,这是任何一个操作都需要的,所以也作为框架的一部分,在BaseServlet中提供出来。这一操作比较简单,只需要通过response对象(即这里的resp形式参数)的setContentType方法设置回送到客户的信息类型text/html;charset=UTF-8,即文本或者HTML格式的文档,并设置字符编码方式UTF-8。在这里设置字符编码方式是为了避免出现字符乱码,在这个示例项目中,采用了UTF-8编码方式,这也是实际项目应该采用的字符编码方式,因为它可以兼容世界上所有国家的语言符号。然后,通过resp(即JSP的response对象)的getWriter()方法获得一个字符输出流PrintWriter;再通过PrintWriter的write()方法将要发送的信息写入到客户端即可。最后不要忘记清空PrintWriter的缓冲区,并关闭这个输出流,否则客户端有可能不能正确接收数据。详细代码如清单12-2所示。清单12-2 BaseServlet向客户端输出文本数据的showTip方法// 向客户端回显信息 protected void showTip(HttpS
您可能关注的文档
- access2013数据库技术及应用(第2版)教学课件作者姜增如第10章.ppt
- access2013数据库技术及应用(第2版)教学课件作者姜增如目录.ppt
- access数据库应用教学课件作者郑明言1.ppt
- access数据库应用教学课件作者郑明言2.ppt
- access数据库应用教学课件作者郑明言3.ppt
- access数据库应用教学课件作者郑明言4.ppt
- access数据库应用教学课件作者郑明言5.ppt
- access数据库应用教学课件作者郑明言6.ppt
- access数据库应用教学课件作者郑明言7.ppt
- access数据库应用教学课件作者郑明言目录.ppt
- 2025年版汽车趋势报告 The 2025 EPA Automotive Trends Report.docx
- 2026年边缘计算开源平台EdgeX Foundry入门与二次开发.docx
- 2026年超声内镜放大内镜早癌诊断AI辅助识别系统临床评价.docx
- 2026年报废汽车回收与再制造逆向物流体系.docx
- 2026年产品碳足迹核算方法学:从摇篮到大门与从摇篮到坟墓.docx
- 2026年城乡要素平等交换双向流动政策创新试点申报材料.docx
- 2026年超导半导体接口电路架构与电平转换驱动器设计.docx
- 2026年财政贴息不再以再贷款支持为前提后的风险防范与合规要点.docx
- 2026年不动产信托登记试点政策对遗嘱信托支持.docx
- 2026年城乡有机废弃物协同处理技术方案.docx
原创力文档

文档评论(0)