为了解析Struts的运行过程,我们建立一个模拟登录的小程序StrutsLogin,这个小程序以LoginIn.jsp作为登陆页面,输入用户名密码后跳转到sayHello.jsp页面输出用户输入的信息。首先,在MyEclipse下建立web项目:StrutsLogin。建立项目后附加Struts库。目录结构如图所示:
在webRoot->WEB-INF->struts-config.xml的设计视图下新建一个Form,Action and JSP项,用例名为LoginIn,设置好登录所需要的两个参数username和password以及登录页面LoginIn.jsp页面。这个项目自动为我们建立了登录用到的LoginIn.jsp页面,处理Action的LoginInAction和处理表单数据的LoginInForm三个文件。
处理表单数据的类LoginInForm继承自我们设定的ActionForm。其主要架构为:
可以看出,userName和password是两个私有属性,并且有了getter和setter访问器。这个可以实现数据的注入和读出。
LoginIn.jsp页面主要代码如下:
<%@ page language="java"pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://struts.apache.org/tags-bean"prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html"prefix="html"%>
<html:form action="/loginIn">
userName :<html:text property="userName"/><html:errorsproperty="userName"/><br/>
password :<html:text property="password"/><html:errorsproperty="password"/><br/>
<html:submit/><html:cancel/>
</html:form>
以上代码主要是导入了Struts的两个标签库bean和html,用来构造登陆页面的表格。运行后效果如图所示。以上表单提交userName和password两个属性到/loginIn,loginIn对应Action处理类LoginInAction。
在LoginInAction类中,我们修改在LoginInForm loginInForm =(LoginInForm) form;下面添加两行程序:
request.setAttribute("login", loginInForm);
return mapping.findForward("sayHello");
这两行程序,将表单数据保存到request对象中,返回到一个跳转对象。下面我们来实现这个跳转对象。在struts-config.xml中新建一个forward对象,设定名称为上端程序的sayHello,指定其对应文件路径为/sayHello.jsp。新建sayHello.jsp文件,其主要是显示用户输入的用户名和密码信息。首先导入表格信息类<%@page import="edu.stdu.struts.form.*" %>,然后在程序中读出之前存储在request中的login对象,转义为form对象并输出其信息。
<% LoginInForm lif =(LoginInForm)request.getAttribute("login"); %>
UserName:<%=lif.getUserName() %>
Password:<%=lif.getPassword() %>
修改web.xml文件,设定欢迎界面为loginIn.jsp后,部署运行后,输入用户用密码后提交所得页面:
综上所述:Struts工作流程基本为:1.客户端提交请求2.ActionServlet类初始化(根据struts-config.xml信息)3.初始化Action处理类4.Action处理类调用FormBean类处理数据5.跳转到某个JSP页面6.返回数据。
参考