ajax实用技术教学课件作者程继洪肖川李海斌编著第12章学生选课(系统)的设计与实现12.2.1-12.2.2.pptxVIP

  • 0
  • 0
  • 约3.72千字
  • 约 32页
  • 2019-10-11 发布于广东
  • 举报

ajax实用技术教学课件作者程继洪肖川李海斌编著第12章学生选课(系统)的设计与实现12.2.1-12.2.2.pptx

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

文档评论(0)

1亿VIP精品文档

相关文档