本例采用Struts1.02版本实现,实现之前请先将1.02版本的struts.jar文件放置在工程WebRoot/WEB-INF/lib目录下。
添加视图模型对象
与上节《Servlet技术实现》相关小节相同。
添加dataset对象
与上节《Servlet技术实现》相关小节相同。
添加AutoForm
与上节《Servlet技术实现》相关小节相同。
添加label和button
与上节《Servlet技术实现》相关小节相同。
AutoForm引入label和button
与上节《Servlet技术实现》相关小节相同。
添加RequestCommand对象
增加一个RequestCommand(cmdLogin),设置path属性为loginaction.do,表示该Command将用户登陆信息发送到loginaction (该Action将在下一节中定义)中作验证。如下图:
图表 4 31
在Studio的Login视图模型中选择编辑界面下方的标签页Events Inspector切换到事件视图,并选择cmdLogin对象,并选择右侧的事件列表中的beforeExecute事件:
图表 4 32
双击打开事件编辑器,输入如下的代码:
var id = dsLogin.getValue("id"); var pwd = dsLogin.getValue("pwd"); command.parameters().setValue("id",id); command.parameters().setValue("pwd",pwd);
表示从dsLogin中取出用户名id和密码pwd放到cmdLogin的parameters中。
Login视图模型中选择编辑界面下方的标签页Properties Inspector切换到属性视图,并选择cmdLogin对象,展开该节点找到Frame的target属性,设置为"_self":
图表 4 33
为了单击按钮时可以执行这个命令,我们将btnLogin按钮的command属性设置为cmdLogin。这样按钮被单击时,按钮会自动地执行cmdLogin的命令,并执行beforeExecute方法实现参数赋值操作,并最终会将登陆信息发送到loginaction.do中作校验,下一步我们就是要在服务器定义一个Servlet,用来实现登陆验证。
添加loginaction
在MyEclipse环境下,刷新工程,并在src/hr目录下添加一个Action,负责处理客户端得登陆校验,代码如下:
package hr; import org.apache.struts.action.*; import javax.servlet.http.*; public class LoginAction extends Action { public ActionForward perform(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { String usr = request.getParameter("id"); String pwd = request.getParameter("pwd"); if ("admin".equals(usr)) { return actionMapping.findForward("success"); } else return actionMapping.findForward("failure"); } }
perform方法通过request对象获得参数用户登录时输入的id以及pwd信息。该处的用户名以及密码校验我们采用比较简单的判断处理。实际开发可灵活变通。
配置struts-config.xml
在WebRoot的web-inf目录下确保有strtus-config.xml,如果没有可以新增一个xml文件,代码配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> <struts-config> <action-mappings> <action path="/loginaction" type="hr.LoginAction" > <forward name="success" path="/main.jsp" /> <forward name="failure" path="/login.jsp" /> </action> </action-mappings> </struts-config>
其中主要包含loginaction的声明。以及forward设定。
修改web.xml配置
在web.xml中添加如下的servlet的申明:
<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>application</param-name> <param-value>ApplicationResources</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
创建JSP
利用视图模型的JSP创建向导,在WebRoot根目录下创建login.jsp,代码如下:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %> <html> <head> <title></title> </head> <body> <d:View config="hr.Login"> <d:Layout type="vflow" height="100%"> <d:Pane align="center"> <d:AutoForm id="frmLogin" /> </d:Pane> </d:Layout> </d:View> </body> </html>
运行测试
在MyEclipse环境中,刷新WebRoot目录,读取dorado studio中新创建的login.jsp文件。
启动集成的Tomcat5服务。在浏览器中输入:
http://localhost:8080/doradosample/login.jsp
在以下的界面中输入用户名admin,并作登陆测试:
图表 4 34
(Struts实现完毕)