j2ee项目实训struts框架技术——第6章struts前端控制器组件及应用第1部分内容摘要:

62】中所示的一个程序模板示例 ,读者只需要按照此 程序模板 添加自己的功能扩展代码。 【例 62】 继承 ActionServlet 组件而产生出特定的子类 的程序模板示例 public class SubActionServlet extends ActionServlet { public void init(ServletConfig config) throws ServletException { (config)。 //。 在此完成本应用的初始化功能 } public void process (HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ //。 在此完成本应用的具体扩展的功能 (request, response)。 } } 2) 在部署描述文件 中定义本 子类 由于需要对 ActionServlet 组件 的原始功能进行扩展,因此必须首先让 Servlet 容器加载自己所扩展的子类以产生“拦截”的效果,这样就可以在 ActionServlet 组件 标准的功能完成之前执行本扩展的功能实现。 为此需要将【例 61】中所示的 文件中有关 ActionServlet 组件的部署配置中杨教授工作室 精心创作的优秀程序员 职 业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 8/18 页 的 servletclass/servletclass标签的内容改变为 servletclass/servletclass,其中的“ ”代表对 ActionServlet 组件 进行功能扩展的子类的名称。 在 Struts 框架中处理 表单请求时 的 中文乱码问题 1)在执行 Java 程序中为什么经常会出现“ ?”号(乱码) 由于在 Java 程序中,异种语言之间的转换是通过 Unicode 编码( Java 语言内部是用 Unicode 表示字符的、并且遵守 Unicode 标准 ) 来完成的。 假设有两种不同的语言 A和 B,转换的步骤为:先把 A转化为 Unicode,再把 Unicode 转化为 B。 举例说明。 在 GB2312 中有一个汉字“李”,其编码为“ C0EE”,欲转化为 ISO88591编码。 步骤为:先把“李”字转化为 Unicode,得到“ 674E”,再把“ 674E”转化为 ISO88591字符。 当然,这个映射不会成功,因为 ISO88591中根本就没有与“ 674E”对应的字符。 当映射不成功时,问题就发生了。 当从某语言向 Unicode 转化时,如果在某语言中没有该字符,得到的将是 Unicode 的代码“ \uffffd”(“ \u”表示是 Unicode 编码,)。 而从 Unicode 向某语言转化时,如果某语言没有对应的字符,则得到的是“ 0x3f”(“ ?”)。 这就是“ ?”的由来。 图 所示为某个 Java 程序执行后的结果,在控制台中所显示输出的提示文字为中文 乱码 状态。 2)了解 Web 应用中的数据流而断定 中文 乱码可能产生的环节 下图 所示为 Web 应用 系统 中的数据流 的图示,从用户请求而触发数据产生到最后将请求的数据进行处理后的结果保存到数据库表中的整个过程,主要经过“ 浏览器 》 Web服务器中的 Web 组件”和“ Web服务器中的 Web 组件 》物理数据库系统”两个环节。 图 某个 Java 程序执行后的中文 乱码 结果 杨教授工作室 精心创作的优秀程序员 职 业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/18 页 图 Web 应用中的数据流图示 因此, 其中容易出现 中文 乱码的节点是在“浏览器 》 Web 服务器中的 Web 组件”或者“ Web服务器中的 Web 组件 》数据库系统”。 3)利用 前端过滤器( Filter)组件对请求中的中文进行统一的编码转换 由于在默认的情况下,浏览器向 Web 服务器发送请求时是采用“ ISO88591”的字符编码( UTF8 编码)。 因此,通过 Web 表单页面所提交的请求数据,在服务器端采用(参数名 )返回的字符串为中文乱码、或者直接通过 URL 地址如 Get 请求在服务器端用 request. getParameter(userName)时所获得的参数 值 也是中文乱码。 因此,在常规的 Web 应用系统的开发中,一般是 在 JSP 页面或者 Servlet 组件中对请求参数进行 编码转换( (GB2312)。 ) ;但如果有多个不同的页面或者 Servlet 组件需要进行转换,则可以 利用 前端过滤器( Filter)组件对请求中的中文进行统一的编码转换( (GB2312)。 )。 4)在 Struts 框架中处理中文乱码问题 对于处理 Struts 框架 中文 乱码 问题有多种方式,但由于 Struts 框架 中实际上是由 ActionServlet 组件收到 Web 浏览器端 HTTP 请求,再转交特定之 Action 组件类并加以处理,因此直接在某个 Web JSP 页面或者某个业务调度控制器 Action 组件类中采用常规的功能实现 代码( (GB2312))实现 对客户端的请求进行编码转换并无效果。 而应该通过 继承 ActionServlet组件类以创建出自己的 ActionServlet子类来处理 Web 浏览器端 HTTP 请求,并覆盖其中的 process 方法,在子类的 process 方法中进行请求编码的转换。 由此展现 ActionServlet 组件类所扮演的前端控制器之角色。 杨教授工作室 精心创作的优秀程序员 职 业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/18 页 在项目中 添加对 标准的 ActionServlet 组件 进行定制的组件类 1)添加 自定义的 BBSActionServlet 组件类 在本 BBS 项目中添加一个 ActionServlet 组件类 的子类 , 该 类 名 称 为BBSActionServlet,包名称为 , 并且 基类选择为 Struts框架中的标准 ActionServlet 组件类 ( )。 具体 输入的 结果请见图 中 所示 的图示状态。 图 添加 BBSActionServlet 组件类 2)编程该 BBSActionServlet 组件类 在该 BBSActionServlet 组件类的 init 方法中,获得在 中所定义的目标编码参数的名称;然后在 process 方法中进行 请求编码的转换;最后再对 基类 ActionServlet 组件中的 原始 process 方法进行调用 以保持 ActionServlet 组件类的原始功能不变。 最后的实现结果代码请见 【例 63】 中的示例代码。 【例 63】 BBSActionServlet 组件类 的代码示例 package。 import。 import .*。 import .*。 import .*。 import .*。 杨教授工作室 精心创作的优秀程序员 职 业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 11/18 页 public class BBSActionServlet extends ActionServlet { String charsetName。 public BBSAct。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。