步骤七 : 执行 Web 应用程序
接下来可点击选择 JBuilder 菜单 Run 或工具列中绿色三角形符号执行此 Web 应用程序。JBuilder 将于集成开发环境内激活 Tomcat 4.0 Server,我们可以通过 JBuilder 内置之 Web 浏览器进行测试,或于Microsoft Internet Explorer 网址字段中键入:
http://localhost:8080/demo/input.jsp
以进行测试。在 Web 浏览器中我们键入 AAA 与 BBB 按下 Submit 按钮,得到预期之运算结果AAABBB。
倘若将第一个字段改以繁体中文键入,却发现产生乱码,字符串连接结果也无法正确辨认。Struts Framework并无中文兼容性上之问题,但是 Tomcat 4.0 在使用 JSP处理内含中文请求时,并需设定请求编码。
例如,在 Microsoft Windows 平台下,欲使 Tomcat 4.0 正确处理繁体中文,通常在 JSP 起始处加上:
<%@ page contentType="text/html;
charset=MS950" %>
<% request.setCharacterEncoding("MS950") ;
%>
|
以设定网页内容编码与请求编码为MS950编码;类似地,对于简体中文(常用编码为GB2312),以上的代码应为:
<%@ page contentType="text/html;
charset=GB2312" %>
<% request.setCharacterEncoding("GB2312") ;
%>
|
但是 Struts Framework 中实际上是由 ActionServlet 收到Web 浏览器端请求,再转交特定之 Action 类加以处理,因此直接于 JSP 中设定请求编码并无效果。
三、处理中文编码问题(以繁体中文为例)
对于处理 Struts Framework 中文编码问题有多种方式,在此我们继承 ActionServlet 类并覆盖 process 方法,于子类process 方法中设定请求编码。由此展现ActionServlet 扮演前端 Controller 之特质。
首先,点击选择 JBuilder 主菜单 File | New Classes 准备产生一新的类。并继承自org.apache.struts.action.ActionServlet并将预设的类名称由Untitled1 改为 myActionServlet。
按下 OK 按钮后即产生程序代码。点击选择 JBuilder 主菜单Wizards | Override Methods… 激活覆盖方法精灵,覆盖方法精灵会自动列出父类 ActionServlet 所有可供覆盖之方法。
我们可于 Available methods 清单方块中选取process (HttpServletRequest request, HttpServletResponse response) 方法,完成后按下 OK 按钮。此时我们可修改覆盖后 process 方法程序代码如下:
request.setCharacterEncoding ("MS950") ;
super.process (request, response) ;
|
备注:此处以繁体中文为例,在中国国内一般我们用的是简体中文,因此可以将上述代码在简体中文环境下编写为:
request.setCharacterEncoding ("GB2312") ;
super.process (request, response) ;
|
首行程序代码将 process 传入之参数 request 设定为 MS950编码,其余行为同父类。接下来我们将要修改 web.xml部署描述档,以指定 Servlet 之进入点,首先点击选择左上方项目窗格中的 web.xml。
此时,左下方结构窗格将出现 web.xml 内 XML 标记之树状结构。我们可以点击选择 Servlets 内的 Action 项目。
此时,便可运用右方内容窗格之图形使用者接口编辑器修改 Servlet 进入点,目前预设之进入点是 Struts Framework 的 ActionServlet。
我们可以按下 Servlet class 项目右方 [ … ] 按钮选取新的进入点替换预设之ActionServlet,也就是之我们撰写之strutsdemo.myActionServlet。倘若我们非常熟悉web.xml 结构,同样地可以直接点击选择内容窗格内的 Sources 页次,直接以文字编辑器修改<servlet-class> 标记的内容。完成后重新编译此项目并执行之。再次测试后我们将发现繁体中文已经可以正确处理。
(T117)