理解Struts

为了解析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.返回数据。

参考

1.Struts的简单使用

   1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。    一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀;    2. ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。    3.要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性,我们后面结合实际的运行效果进行分析。    4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gongqingkui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值