myActionForm myActionForm=(myActionForm)ActionForm ;
String sA = myActionForm.getFieldA ( ) ;
String sB = myActionForm.getFieldB ( ) ;
myActionForm.setFieldResult (sA+sB) ;
return ( actionMapping.findForward ( "input" ) ) ;
由于 perform 方法会传入参数 ActionFrom 以便获知 Web浏览器内使用者输入之字符串,在此JBuilder 已将ActionForm 转型 ( Type Cast ) 为 myActionForm 之程序代码产生完成,开发人员仅需以 getFieldA 与 getFieldB 方法即可得知使用者输入之字符串,并将连接后结果以setFieldResult 方法回存fieldResult 属性。return 将决定负责显示之 JSP 网页,利用perform 方法传入参数actionMapping 之 findForward 方法,可用以指定显示之JSP 网页。之前精灵对话框中已预设 /input.jsp 为负责输入之 JSP 网页,Struts 中允许输入与显示同为一个 JSP 网页,因此我们需在 struts-config.xml 中定妥名为 input 之Forward 标记,以便 findForward 方法能够利用此标记得知真正 JSP 网页名称 /input.jsp。
步骤四 : 设定 Forward 标记
点击选择 JBuilder 左上方之项目窗格 ( Project Pane ) 内之struts-config.xml,此时集成开发环境便可以图形使用者接口方式编辑 struts-config.xml 内容,左下方结构窗格( Structure Pane ) 会依照 struts-config.xml 结构,分为 DataSources 、Form Beans、Global Forwards 与 Action Mappings四类标记项目。
当点击选择 Global Forwards 项目后 JBuilder 右方内容窗格( Content Pane ) 将出现如图所示之编辑画面,开发人员可按下 Add 按钮加入名为 input 之标记,并指明此标记对应路径为 /input.jsp。
对于已经熟悉 Struts Framework 的开发人员, 若欲直接修改 struts-config.xml 内容,可以点击选择内容窗格中的Source 页次,此时内容窗格如图所示将以文字编辑器显示 XML 内容,我们可自由选择习惯之方式维护 struts-config.xml 内容.
步骤五 : 产生 JSP
接下来我们将利用现有 myActionForm.java 产生/input.jsp,点击选择Object Gallery 对话框 Web 页次中JSP from ActionForm Wizard,将出现以三步产生 JSP 之精灵:
在第一步对话框中,我们可将欲产生的 JSP 档名由预设之UntitledJsp1.jsp 改为 /input.jsp,并可按下 [ … ] 按钮以选取 ActionForm。ActionForm 选取对话框有两种查找模式,我们可以浏览 Java Package 树状结构直接选取myActionForm。
或是键入Java 类前缀名称,JBuilder 将会自动查找相符之类。例如我们键入 myActionForm 的前缀 my,将可见到对话框查找到两个相符之类。此一便捷选取类别之对话框,可在JBuilder 编辑器中以热键 Ctrl-Alt-H随时激活使用。
选取 myActionForm 完毕后,按下 Next 按钮可进入至第二步对话框。JBuilder 将分析myActionForm.java 内容显示其字段,我们可以组合方块决定该字段将以何种 Struts Tag 搭配显示,本例中三个字段皆使用可输入文字、预设之 text 型态,按下 Next 按钮即进入第三步。第三步对话框针对 Struts Tag Libraries 特性,提供多种选项,并且询问是否将全部之Struts Tag Libraries 宣告导入至JSP 档中。本例我们采用默认值,按下 Finish 按钮后 JBuilder 即产生 /input.jsp。
步骤六 : 设定执行组件
接着我们可以设定执行组件以测试本程序。点击选择JBuilder 集成开发环境主菜单 Project | Project Prosperities… 将出现项目属性设定之对话框,点击选择Run 页次准备设定执行组件。JBuilder 允许在单一项目中拥有多个执行组件,可执行 Java Application、Java Applet、J2ME MIDlet 及 J2EE 各式 Server 端应用程序。
本例中将建立一个 Server 类型之执行组件。按下对话框右侧 New… 按钮将会出现执行组件属性设定对话框,以新增一个执行组件。
执行组件属性设定对话框中,我们可以键入一识别用途之名称于 Name 字段,本例中我们键入中文识别名称 "执行 input.jsp",在 Run 页次 Type 组合方块中可选取Server 类型应用程序,由于本例我们采用 JBuilder 内置之 Tomcat 4.0 为 JSP/Servlet Container,因此 Server 下拉盒选取 Tomcat 4.0。倘若我们的 Server 组合方块中无适当选项可供选取,可于JBuilder 主菜单 Tools | Configure Server… 中进行相关设定。接着我们必须选取此 Web应用程序激活 URI,我们可按下 Launch URI 字段右侧 [ … ] 按钮,即可出现选取 URI 之对话框,我们可直接以鼠标点击选择左侧 input.jsp,按下 OK 按钮完成选取,并返回执行组件属性设定对话框。
此时执行组件属性设定对话框中主要项目皆已设定完毕,按下 OK 按钮返回项目属性设定对话框。项目属性对话框中将把前述步骤所设定之执行组件列于Runtime Configurations 清单方块中,按下 OK 按钮即完成执行组件设定。
步骤七 : 执行 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处理内含中文请求时,并需设定请求编码。繁体中文环境常用编码为 Big5 与 MS950,MS950 编码含括 Big5 编码,并额外增加 ??、恒、里、妆、娴、锈、墙 等七字。
例如,在 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> 标记的内容。
完成后重新编译此项目并执行之。再次测试后我们将发现繁体中文已经可以正确处理。
本文地址:http://com.8s8s.com/it/it12695.htm