标题:Struts 上机实践

标题:Struts 上机实践
[评论]
作者: 刘国栋 (dev2dev ID: yahoo163)

引言

最近在使用Struts,现在把个人的一点感悟写下来,希望对各位有点帮助。习惯了翻译文档中老外们的书写格式这里不妨套用一下,这样看起来也显得条理清楚J。我在这里不打算再介绍Struts的优点和什么是MVC模式了,网上这样的文章很多一定比我写要好的多,我只具体讲一个例子,结合这个例子把Struts的初级的一些东东Show一下(高级的我自己还没搞懂就不现眼了J)。好了,废话不讲了要不然有人要扔砖头了。

运行环境

还是忍不住要说两句环境搭建的步骤,实在是我觉得这部分很重要,诸位仁兄只好忍一忍先。

1.所需软件

为了要运行这个例子你需要以下几个软件:

  • WebLogic8.1sp2或者任何其他Web服务器,我用的Weblogic8.1sp2。你可以从BEA公司的网站上下载:http://commerce.bea.com/index.jsp
  • Struts1.0,可以从www.apache.org上当。
  • 一个好用的Java IDE,我用的是JBuilder,当然这不是必须的。
  • 再有就是一个写JSP的工具,一般的网页编辑工具就可以。

 

2.环境搭建

  • 安装Struts

Struts压缩包中分别把几个部署描述文件和标签库描述文件copy到你的DefaultApp/WEB-INF目录下。

这些文件包括:

struts-config.xml:用来配置你的serlvet和映射java bean的文件。

struts-html.tld:这是一个标签库描述文件,他实现了html中跟请求响应有关的几个标签。

struts-logic.tld:这也是一个标签库描述文件,他实现了java中逻辑操作的功能,比如循环,判断等等。

struts-template.tld:模板标记库描述文件

struts-bean.tld:有关java bean映射所需的一些标签库。

再把struts.jar拷贝的DefaultApp/WEB-INF/lib目录下。好了安装完了,再配置一下web.xml就OK了。

配置web.xml文件

  你可以从struts压缩包中直接把这个文件copy到DefaultApp/WEB-INF目录下,如果你想搞清楚他们的意思的话,其实也不难,你只要稍稍有一点JSP标签库的知识就会知道,他只不过是把你要使用的标签库加载到你的web应用中罢了。为了节省空间,我就不再把他帖出来了。

开始

我们要讲的这个例子是一个简单的登录验证页面,就是输入用户名和密码,点击“Submit“之后在控制台打印出用户名和密码。既然说StrutsMVC结构我们不妨按照这个结构的顺序开始我们的例子吧。

Struts的Model

所谓Model我理解就是存储信息的一个容器,也许有些浅薄但是初学者不妨就这样理解吧,这样容易一些。说白了就是把用户从jsp页面上提交的信息保存到一个Java Bean中。当然这个Java Bean不是普通的Java Bean因为它继承自Struts的ActionForm,这样那个Control类才能认识它并控制它。从ActionForm这个单词的字面意思我们不难看出,它就像我们的Html中的Form标记一样,一个ActionForm就可以代表一个Form体内的内容,比如我们例子中的这个类LoginForm:

package mytest.struct;

//导入必须的包

import org.apache.struts.action.*;

import javax.servlet.http.*;

//继承ActionForm

public class LoginForm extends ActionForm {

  private String name; //代表JSP页面中的name,注意这里的name和页面中的name必须是一样的

  private String password;

//设置name的数值

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

  public String getPassword() {

    return password;

  }

  public void setPassword(String password) {

    this.password = password;

  }

//数据校验,你可以自己进行处理。

  public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {

    ActionErrors errors=new ActionErrors();

    if(name==null){

      errors.add("Name",new ActionError("Name can not be Null!"));

    }

    if(password.length()<3){

      errors.add("Password",new ActionError("Password lengh at least 3 chars"));

    }

    return errors;

  }

//数据重置的处理

  public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {

    name = null;

    password = null;

  }

}

 好了,这就是我们的一个Model,只有name和password两个字段,它继承了ActionForm并且有Java Bean标准的getter和setter方法。就这么多,接下了让我们看看View里有些什么?

Struts的View

View就是我们的JSP页面,不过要使用Struts的话JSP写起来就比较不同了。还是让我们看看代码吧:

Login.jsp

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<!-- 上面导入的是页面所需的标记库描述,要用struts就必须有这些 -->

<%@ page contentType="text/html; charset=GBK" %>

<html:html> <!-- 这相当于Html中的html标记,下面的凡是以html前缀开头的都是这个意思 -->

<head>

<title>

login

</title>

</head>

<body>

<p>

<html:form action="/loginAction.do" method="POST">

 <!-- 这里的/loginAction.do一会儿会讲到,相当于我们要请求的serlvet -->

UserName:

<html:text property="name"/>

<!-- 放一个文本框,名叫name,注意它必须与LoginForm中的字段相同 -->

<br>

PassWord:

<html: password property="password"/>

<br>

<table border="1">

<tr >

       <td><html:submit property="submit" value="Submit"/></td>

       <td><html:reset value ="Reset"/></td>

</tr>

</table>

<br>

</html:form>

</body>

</html:html>

View  中的内容就这么多了,说白了就是吧原来Html中的标签用struts中的标签代替,那么这样作有什么用呢?先不要着急后面讲到Struts的部署时你就会明白了。在这里我强烈建议,在学习Struts之前最好先了解一下JSP标签库的知识。

Struts的Control

这里的这个Control,是我们处理页面信息的一个Servlet,当然他和我们通常的Servlet还是有区别的,它继承了Struts的Action。而且实现了perform方法:

LoginAction.java

package mytest.struct;

import org.apache.struts.action.*;

import javax.servlet.http.*;

public class LoginAction extends Action {

  public ActionForward perform(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

    LoginForm loginForm = (LoginForm) actionForm;

    System.out.println("UserName:"+loginForm.getName());

    System.out.println("PassWord:"+loginForm.getPassword());

    return  actionMapping.findForward("logok");

  }

}

说明:

LoginForm loginForm = (LoginForm) actionForm;

这一句获得了一个LoginForm 容器对象,这样就可以从页面上获得数据了,比方说要得到jsp页面中name文本框的数据就使用:loginForm.getName()最后一句return  actionMapping.findForward("logok");是返回一个链接。其中的“logok”是在struts-config.xml中定义的。就是说,执行完逻辑操作后页面跳转到什么地方。

Struts的部署:

Struts的部署信息是在struts-config.xml中进行描述的。现在讲到了Struts的最关键的部分,要想我们前面写的程序能够运行起来关键就看这一步了,我先把这个它帖出来再讲:

struts-config.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>

  <form-beans>

    <form-bean name="loginForm" type="mytest.struct.LoginForm" />

  </form-beans>

  <global-forwards>

    <forward name="logok" path="/login.jsp" />

  </global-forwards>

  <action-mappings>

    <action name="loginForm" type="mytest.struct.LoginAction" validate="true" scope="request" path="/loginAction" />

  </action-mappings>

</struts-config>

说明:

<form-beans>标签描述了容器bean的信息就是我们写的那个LoginForm

<global-forwards>标签描述了页面跳转的位置,他的name属性就是我们在LoginAction类中actionMapping.findForward("logok")方法的参数,这代表执行完这个请求之后页面将跳转到什么地方,我这里设置为/login.jsp就是告诉Struts运行请求之后页面还返回原来的位置。

<action-mappings>中描述了所有的控制类的信息,我们的例子中只有一个控制类那就是,LoginAction, 其中path属性的值描述了控制类在浏览器中的url路径,而那个name描述的是这个控制类要处理的是那个FormBean。

运行:

好了所有的工作都完成了,现在启动Weblogic8.1,然后在浏览器中输入http://localhost:7001/applications/Login.jsp。可以看到如下的页面:

输入用户名和密码,点击Submit按钮。Weblogic的控制台将显示:

结论

一个简单的Struts程序就是这样了,由于篇幅的限制我只是简单的把从页面得到的信息打印到控制台上,当然你也可以在控制层把得到的数据保存到数据库或进行复杂的业务处理等等。不过通过这个简单的例子你应该明白了Struts是如何运行的,也应该了解如何在Weblogic8.1下部署和使用Struts。希望这篇文章能够带你进入Struts的世界。

点击此处下载本文代码部分

作者:

姓名:刘国栋

通信地址:北京市海淀区学院路20号910信箱

邮编:100083

个人介绍:

2000年大学毕业之后一直从事软件开发。先后参与开发了多个项目,使用技术包括EJBSelvlet,JSP,Struts,JDO,Web Services等。在最近主持设计的项目中使用Weblogic Server作为应用服务器,采用StrutsMVC结构进行设计开发,使用EJB2.0技术作为持久层的数据存储。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值