`
snowyvalley
  • 浏览: 143205 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts入门

    博客分类:
  • Java
阅读更多
一 什么是Struts
Struts是基于MVC设计模式的开发Web应用程序的开源框架,当前的版本是1.1
他的建立者是著名的开源组织Apache Software Foundation,提起Apache software Foundation(ASF) 大家一定不会陌生,好多口碑不错的开源产品像Tomcat,Ant,Velocity,JSF等都出自他们.
如果对他们感兴趣的话可以到他们的网站去看一看:http://Jakarta.apache.org
二 为什么叫Struts
Struts的英文意思是: (框架的)支柱,支撑物
就像我们盖楼一样,各楼层之间是用钢筋,混凝土构成的柱子去支撑的,在开发三层结构的Web应用程序时,Struts 的角色就是支撑这些应用程序的各个层次.
三 什么是框架
框架是可重用的应用程序的半成品,使用框架你可以构造出具体的个性化的应用程序.
框架是建立在应用程序的共性基础上的,给开发者提供了可重用的结构.像Struts,Jsf,Spring都是比较成熟的框架.
四 利用struts框架开发Web应用程序你需要哪些知识
Http协议是一种无状态的协议
能够利用Jsp构建Web页面
了解Servlet技术
能够建立简单的JavaBean
对MVC思想有认识
好了,具备了这些知识你就可以利用Struts开发Web应用程序了
五 理解Struts是如何工作的
理解Struts框架的工作原理要理解下面这幅重要的图片.
发件人 tech

Struts的ActionServlet是一个控制器,起着流程导航的作用,Struts 的Action类用来访问相关的业务类.
当ActionServlet从容器中接收到一个请求时,他会根据URI决定哪一个Action 来处理这个请求,Action进行输入的验证,访问业务层,从数据库或其他的数据服务器中获得必要的信息.
验证输入或者根据输入的数据更新数据库,Action需要知道哪些数据被提交了,ActionServlet把这些输入绑定到JavaBean中,这个JavaBean是Struts的ActionForm的子类,ActionServlet根据请求路径决定使用哪个ActionForm和Action.
每一个Http请求要对应一个Http响应,通常情况下,StrutsAction自己并不生成响应,而是把请求传递给其他的资源,比如Jsp页面.
在Struts中提供了一个ActionForward类使用逻辑名存储页面路径,当Action 完成业务逻辑处理的时候,会向AcitonServlet返回一个ActionForward,ActionServlet会根据存储在ActionForward中的对象调用相关的页面完成响应.
Struts把这些细节绑定到ActionMapping对象中,每一个ActionMapping都是和路径相关的,当这个路径被请求时,Servlet会找到哪些Action,ActionForm,ActionForward可以使用.
所有的这些细节Action,ActionForm,ActionForward,ActionMapping都在Struts-config.xml中被声明.ActionServlet在启动时会读取这个文件并且建立一个配置对象的数据库,在运行时ActionServlet会参照这些对象而不是这个配置文件.
不管你信不信,知道了这些你就可以建立一些简单的Web应用程序了.
六 建立第一Struts应用程序
我们的第一个Struts应用程序是一个简单的用户注册应用程序
1 功能描述:
用户需要输入用户名,密码,重复输入密码,当两次输入的密码相匹配时就认为注册成功,否则认为注册失败.
2 MVC模式分析:
M (model):模型层(业务逻辑) 我们这里的业务逻辑很简单就是判断两次输入的密码是否一致.
V(view):视图层:
A 用户输入的用户名,两次输入的密码
B 显示注册成功信息
C 显示注册失败信息

C(contrl)控制层:由Struts 的servlet来实现控制的导航.
3 界面原型:
A 录入注册信息
发件人 tech

B 显示注册成功
发件人 tech

C 显示注册失败
发件人 tech

4 要完成这个程序我们只需要建立
一个ActionForm 绑定用户的输入信息
一个Action 进行业务处理
一个配置文件Struts-config.xml
三个表示层页面 注册信息录入页面,注册信息成功,注册失败显示页面

1)首先建立三个显示页面
Register.jsp success.html failure.html
相关代码如下:
Register.jsp:
html代码
 
  1. <%@ taglib uri="/WEB-INF/struts-form.tld" prefix="form" %>  
  2. <form:form action="register.do">  
  3. UserName:<form:text property="username"/><br>  
  4. enter password:<form:password property="password1"/><br>  
  5. re-enter password:<form:password property="password2"/><br>  
  6. <form:submit value="Register"/>  
  7. </form:form>  
<form:form action="register.do"> <form:text property="username"> <form:password property="password1"> <form:password property="password2">

<form:submit value="Register"> </form:submit>
Success.html:


html代码
 
  1. <HTML>  
  2. <HEAD>  
  3. <TITLE>SUCCESS</TITLE>  
  4. </HEAD>  
  5. <BODY>  
  6. Registration succeeded!  
  7. <P><A href="register.jsp">try another?</A></P>  
  8. </BODY>  
  9. </HTML>  
</form:password> </form:password> </form:text> </form:form>

Failure.html:

html代码
 
  1. <HTML>  
  2. <HEAD>  
  3. <TITLE>FAILURE</TITLE>  
  4. </HEAD>  
  5. <BODY>  
  6. Registration failed!  
  7. <P><A href="register.jsp">try again?</A></P>  
  8. </BODY>  
  9. </HTML>  



2)用户的输入是绑定到ActionForm中的,接下来我们建立一个ActionForm.
RegisterForm是一个JavaBean继承自Struts框架的org.apache.struts.ActionForm,这个对象能够捕获通过请求发送的输入域.当一个web浏览器提交一个表单的时候,web浏览器会为表单的每一个域在请求中建立一个参数.在ActionForm 中对应于Html的表单的每一个域都有一个相应的属性.ActionServlet会把请求中的参数和ActionForm中的属性进行匹配,调用属性的Setter方法来绑定请求中的值.
我们这里用户需要输入的数据有userName,password1,password2,我们的ActionForm就要提供SetUserName(String),SetPassword1(String),和SetPassword2(String)方法.
下面是我们的ActionForm 的代码:
RegisterForm.java:

package app;
import org.apache.struts.action.*;
public class RegisterForm extends ActionForm {
protected String username;
protected String password1;
protected String password2;
public String getUsername () {return this.username;};
public String getPassword1() {return this.password1;};
public String getPassword2() {return this.password2;};
public void setUsername (String username) {this.username = username;};
public void setPassword1(String password) {this.password1 = password;};
public void setPassword2(String password) {this.password2 = password;};
}

3)我们来建立业务处理层的RegisterAction类:
RegisterAction是继承自Struts框架的org.apache.struts.Action类.ActionServlet把刚刚组装的ActionForm传递给Action,Action负责验证输入,访问业务信息,决定把哪个ActionForward返回给Servlet.
RegisterAction.java的代码如下:
RegisterAction.java:

package app;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterAction extends Action {
public ActionForward perform (ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
// Cast the form to the RegisterForm
RegisterForm rf = (RegisterForm) form;
String username = rf.getUsername();
String password1 = rf.getPassword1();
String password2 = rf.getPassword2();
// Apply business logic
if (password1.equals(password2)) {
try {
//  Return ActionForward for success
UserDirectory.getInstance().setUser(username,password1);
return mapping.findForward("success");
} catch (UserDirectoryException e) {
return mapping.findForward("failure");
}
}
// Return ActionForward for failure
return mapping.findForward("failure");
}
}


注意:
在struts1.1中使用的execute()方法来代替了perform()方法(perform是struts1.0)中的方法,execute()方法应用了更好的异常处理机制.

通过以上步骤我们已经准备好了所有Web开发必备的材料,下面我们要做的就是把这些材料进行有机的组合,建立一个实实在在的Web应用.

4)建立Struts的配置文件Struts-config.xml
Struts-config.xml是Struts框架中最重要的配置文件,所有的细节像Acgtions,ActionForms,ActionForwards,ActionMappings等都是在这里进行配置.ActionServlet将根据这个文件来实现流程的控制.
Struts-config.xml的内容如下:
Struts-config.xml:
<struts-config> <form-beans> <form-bean type="app.RegisterForm" name="registerForm"> </form-bean> <action-mappings>

七 知识回顾:
1)我们做了什么
为了完成这个注册程序我们建立了
A RegisterForm
B RegisterAction
C 三个页面 注册页面,成功失败显示页面
D struts-config.xml文件
2)他们是如何有机的结合起来的
我们再来改造一下前面那幅图:
</action-mappings> </form-beans> </struts-config>
发件人 tech

我们回顾一下Struts-config.xml这个比较重要的配置文件:

Struts-config.xml:


<struts-config> <form-beans> <action-mappings><action path="/register"><forward path="/success.html" name="success"></forward></action>
xml 代码
 
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE struts-config PUBLIC  
  3. "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"  
  4. "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">  
  5. <struts-config>  
  6. <form-beans>  
  7. <form-bean name="registerForm" type="app.RegisterForm"/>  
  8. </form-beans>  
  9. <action-mappings>  
  10. <action path="/register"  
  11. type="app.RegisterAction"  
  12. name="registerForm">  
  13. <forward name="success" path="/success.html"/>  
  14. <forward name="failure" path="/failure.html"/>  
  15. </action>  
  16. </action-mappings>  
  17. </struts-config>  


八 思考题:
我们建立一个简单的Web程序
需求描述: 用户注册的程序我们已经完成了,假定用户需要登陆系统,登陆时需要输入用户名,密码,当用户名和密码正确时显示欢迎页面,否则显示密码或用户名错误的页面.在这里为了使程序简单我们假设输入的密码为password就通过登陆验证。</action-mappings> </form-beans> </struts-config>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics