目标:
理解Struts的体系结构
掌握Struts的基本用法
1. Struts简介
Struts是前身是由CraigR.McClanahan编写的JSPModel2架构之Application Framework源码贡献给Apache基金会,因此也成为现在Apache Jakarta项目中的Struts Framework。Apache Jakarta项目中除了Struts还包括Tomcat、Ant和Velocity等。
当建立一个建筑物时,建筑工程师会设计好建筑物的支柱,为每一层的建筑提供支撑。软件工程师设计一个软件项目时,同样也要先设计好软件的支柱,这里我们可以用Struts来做为软件项目的支柱。Struts的目的是帮助减少在开发过程中使用MVC设计模型带来的应用时间,Struts将为软件开发过程减少许多繁琐的过程。
Struts2是一个用于创建企业级Java Web应用程序的可扩展框架,该框架的目的是简化整个开发周期,从建设、部署和维护应用程序。Struts2的原名WebWork2。经过几年独立开发,WebWork和Struts社区联手创建Struts2。这个新版本的Struts使用更简单。
2. Struts下载
Struts官网下载地址是http://jakarta.apache.org/ ,选择“Ex-Jakarta” 项目下的“ Struts”超连接,进入到Struts的下载界面,在界面的左侧有一个菜单栏,如下图:
选择“Documentation”下的Struts版本,此处下载最新的Struts 2.2.1.1(GA),进入到下载界面,如下图:
现在点击“Download Now” 进入Struts的下载界面,该界面中会有所Struts版本的下载选项,此处只下载Struts2.2.1.1,看下图:(此处还有另外两个下载选项“Get Started”和“Plugin Registry”,可以根据自己的需要选择相应的项。)
此处建议下载“struts-2.2.1.1-all.zip”,下载该zip文档将Struts的源码、API文档、jar包以及实例全部下载完成。下载完后,如下图:
3. Struts体系结构
Struts的体结构图如下:
框架中分为三个部分:模型、控制器和视图。
在Struts框架中,模型分为两个部分:1.系统的内部状态;2.可以改变状态的业务逻辑。内部状态通常由Bean表示。根据设计或应用程序的复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要的时候才获取数据。大型应用程序通常在方法内部封装业务逻辑(操作),这些方法可以被拥有状态信息的Bean调用。比如购物车Bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。建议用户将业务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
视窗:由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。
控制器:struts中,基本的控制器组件是ActionServlet类中的实例Servelt,实际使用的Servlet在配置文件中由一组映射(由Action Mapping类进行描述)进行定义。
4. Struts的操作流程
Struts的操作流程图如下:
服务器启动后,根据web.xml加载Action Servlet读取struts.xml文件内容到内存。以登陆为例:第一次进login.jsp会先实例化FormBean、把默认值赋给表单元素。
输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts.xml文件找到action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面。验证通过会实例化Action,执行Action的excute方法。
5. 第一个Struts
第一步:建项目并加载Struts2包。
使用Eclipse建立一个Dynamic Web Project项目,将下载的Struts文件夹中lib目录下的几个jar文件,拷贝放置到项目WebContent文件夹WEB-INF文件夹lib目录下,要拷贝的jar文件项目图如下:
第二步:WEB项目中安装Struts2。
Struts2采用的是过滤器,所以先在web.xml文件中配置一个Filter,web.xml配置文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>NetJavaStruts</display-name>
<!-- 在WEB项目中安装Struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
第三步:编写Action
package sample;
import com.opensymphony.xwork2.ActionSupport;
/**
* 定义一个Login的Action类,该类继承自ActionSupport类
* Struts2中,Action类已经和FormBean类集成到一起。
* @author 熊向军
*/
public class Login extends ActionSupport{
//定义一个私有的字符串类型的账号属性
private String username;
//定义一个私有的字符串类型的密码属性
private String password;
/**
* 设置账号属性的方法
* @param username是要从界面上接受的参数值
*/
public void setUsername(String username){
//测试输出
//System.out.println(username);
this.username = username;
}
/**
* 获取账号属性值的方法
* @return 返回账号属性的值username
*/
public String getUsername(){
return username;
}
/**
* 设置密码属性的方法
* @param password是要从界面上接受的参数值
*/
public void setPassword(String password){
//测试输出
//System.out.println(password);
this.password = password;
}
/**
* 获取密码属性值的方法
* @return 返回账号属性的值password
*/
public String getPassword(){
return password;
}
/**
* 这是Action类的执行方法,所有从客户端发送到LoginAction的请求都将有该方法处理。
* @return 会返回执行后要显示的结果,该结果在sample.xml文件中已经配置好,对应的是<action>标记中<result>标记的name属性。
*/
public String execute() throws Exception{
//验证账号和密码是否不为null或者账号和密码长度大于0,如果成立则返回到执行成功的页面,如果失败则返回登录页面
if(validator(getUsername()) && validator(getPassword())){
//System.out.println("===>");
//返回值对应<result>标记name属性的值
return "view_Success";
}else{
//System.out.println("--->");
//返回值对应<result>标记name属性的值
return "view_Login";
}
}
/**
* 验证账号和密码是否为空
* @param value表示的是账号值或者密码值
* @return 返回验证后的结果,如果验证为真,则返回TRUE,否则返回FALSE
*/
public boolean validator(String value){
//System.out.println(">>>>>>>>>>>>>>>"+value);
boolean state = false;
//如果账号和密码为null或者小于等于0,则返回FALSE,反之返回TRUE。
if(null != value && value.length() > 0)
state = true;
return state;
}
}
Struts2已经将Action类和FormBean类整合到一起了,所以,此处将在Action类中,定义FormBean;先定义两个私有的属性username和password,分别添加它们的getter和setter方法;再定义一个验证username和password是否为null和长度是否为0的validator方法;再重写execute()方法,该方法是执行,不能缺少哦!并在方法中调用验证方法。
第四步:编写Struts.xml
在Eclipse中必须自己去建立xml文件,先在NetJavaStruts项目的src目录下建立一个XML文件,文件的名字是struts.xml,struts.xml文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts是根元素 -->
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="false"/>
<!-- 加载配置文件 -->
<include file="sample.xml"/>
</struts>
<struts>标签是Struts2配置的根元素;<constant>标签表示设置常量;<include>标签表示加载配置;Struts2提供的一个特殊标签,可以允许开发人员将配置文件分散开来,这样就不会导致一个配置文件中写N多配置信息,有助于管理;建议采用这种方式来开发,属性file表示要加载的配置文件名。
第五步:编写Struts配置信息
在src目录下建立一个example.xml的XML文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts是根元素-->
<struts>
<package name="sample" namespace="/sample" extends="struts-default">
<action name="validator" class="sample.Login">
<result name="view_Success">/main.jsp</result>
<result name="view_Login">/login.jsp</result>
</action>
</package>
</struts>
在<struts>标签中可以定义多个<package>标签,<package>标签是用来设置包的;name属性表示包的名字,可以被其他的package通过该名字引用;namespace表示命名空间,类似于Servlet的请求路径,当然此处也是设置的请求路径;extends表示该配置文件继承自哪里,默认使用的是(大部分使用的都是)struts-default。在<package>标签下也可以有多个<action>标签,<action>标签是用来设置每一个动作请求的;name属性用来表示该动作的名字,class表示该动作所对应的类是哪一个。<action>标签下可以有多个<result>标签,每一个标签对应一个处理后结果要显示的页面,切记name属性中的值要和Action类中的返回的值一一对应。
Struts2中除了绝对配置,还可以使用其他的配置方式:
<!-- name指定action工作单元的名字为Login_*,*号表示只要是以Login_开头的都将由该工作单元匹配;
method表示用哪个方法来处理,此处{1}将由动作名来的方法来处理;
class是指定该工作单元所指定的类全路径 -->
<action name="Login_*" method="{1}" class="example.Login">
<!-- name表示要返回值的是input,如果返回input,则由/example/Login.jsp来显示 -->
<result name="input">/example/Login.jsp</result>
<!-- type表示将执行Action,此处执行Menu名字的Action -->
<result type="redirectAction">Menu</result>
</action>
<!-- name指定action工作单元的名字为*,*号表示匹配所有的;
class是指定该工作单元所指定的类全路径 -->
<action name="*" class="example.ExampleSupport">
<!-- 表示将由动作名所对应的*.jsp来显示结果 -->
<result>/example/{1}.jsp</result>
第六步:编写JSP
JSP页面有三个,分别如下:
index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="0;url=login.jsp">
<title>第一个Struts2示例</title>
</head>
<body>
<h3>加载中...</h3>
</body>
</html>
说明:Mete标签的http-equiv属性中的refresh表示刷新的意思,content属性中的第一个参数0,表示间隔0秒就开始刷新,url就表示刷新后要跳转的页面是login.jsp
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>第一个Struts2示例</title>
</head>
<body>
<h3>用户登录</h3>
<s:form action="sample/validator.action">
<s:textfield name="username" label="账号"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
</body>
</html>
说明:此页面中使用了Struts2带的标签库,这一行代码是引入Struts2的标签库<%@ taglib prefix="s" uri="/struts-tags" %>;红色边框中的内容是关于Struts2标签的使用方式。
main.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>第一个Struts2示例</title>
</head>
<body>
<h1><s:property value="username"/></h1>
</body>
</html>
说明:此页面中使用了Struts2标签库的property标签,value属性中的名字,必须要在Action中存在该属性,否则无法显示其结果。
到这里就已经成功了完成了第一个Struts2示例,此处使用的版本是Struts 2.2.1.1,看到这里了,就该你开工动手了,享受最后出来的成果吧!嘿嘿!
index.html页面运行的结果如下图:
login.jsp页面运行的结果如下图:
main.jsp页面运行的结果如下图:
在学习的时候,建议到官网上,下载完整的zip文档,然后参考里边的几个示例,这样上手会比较快。当然,如果你的英文更好,可以直接看官方提供的文档,我的英语不是很好所以有点麻烦,嘿嘿!就先到这里了!
分享到:
相关推荐
这个入门学习源码包包含了关于Struts2的基础知识、学习笔记以及源码实例,旨在帮助初学者快速理解和掌握Struts2的核心概念和技术。 首先,让我们深入了解Struts2的基本原理。Struts2是Apache软件基金会的一个开源...
struts 初步认识Struts2并部署验证 struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter ...
本入门案例主要涵盖了Struts2的基础环境搭建和配置文件的使用,帮助初学者快速理解和掌握Struts2的核心概念。 在开始之前,确保你已经安装了Java开发工具包(JDK)和Apache Maven或Apache Ant,这些都是开发Java ...
这个入门教程包含了源码和实例,旨在帮助初学者快速理解并掌握Struts2的核心概念和工作原理。 首先,让我们深入了解一下Struts2的基础知识。Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,融合了...
"workspace"文件可能是开发环境中项目的源代码目录,里面包含了快速入门示例的全部源码,包括Action类、视图文件(JSP或Freemarker)、配置文件等,读者可以通过阅读和运行这些代码来深入理解Struts2的工作原理。...
总结来说,"struts2官方入门案列curd"是一个很好的起点,用于学习如何使用Struts2框架实现Web应用的基础功能。通过理解并实践这个案例,开发者可以掌握Struts2的核心概念,为后续的复杂应用开发打下坚实基础。
这个"struts2入门小例子+源码"是专为初学者设计的,旨在帮助他们快速掌握Struts2的基础知识和实践操作。 首先,让我们了解Struts2的核心概念: 1. **MVC模式**:Struts2基于Model-View-Controller(MVC)设计模式...
这个"Struts2.0入门实例源码"是学习Struts2.0的基础教程,通过实践来帮助初学者理解框架的核心概念和工作原理。 1. **MVC模式的理解**:MVC模式是软件工程中常用的设计模式,将业务逻辑(Model)、用户界面(View)...
学习struts2的笔记与源码:输入验证、国际化、拦截器等
本资源包含"15_学员用书_STRUTS2核心_IMAGE版.pdf"这本书的源码,适合初学者自学使用。 首先,Struts2框架是Apache软件基金会的开源项目,它继承了Struts1的优点,并吸取了其他框架如WebWork的精华。Struts2的核心...
本资源"struts快速入门源码"旨在帮助初学者快速掌握Struts框架的核心概念和基本用法,确保在学习过程中不会遇到任何报错,是学习Struts的优质实践案例。 Struts1.2是该框架的一个较早版本,虽然现在已经有了更新的...
标题"十个struts入门程序源码"表明这是一份包含10个不同示例的源代码集合,用于初学者学习和理解Struts 2框架的基础用法。这些源码通常会涵盖Struts 2中的核心概念和常用功能,如Action类、结果类型、拦截器、动态...
十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决了一部分问题,而结合起来则能构建出高效、可维护的Web应用程序。这里我们将深入探讨这三个框架的基本概念、功能以及它们如何协同工作。 首先...
#### 二、Struts2入门案例 - **Hello Struts2**:通过创建一个简单的“Hello World”示例,帮助开发者快速上手Struts2的基本配置和运行流程。 - **Action类详解**:Action类是Struts2的核心组件之一,负责处理用户...
struts2.0工程源码(完整的struts2.0学习工程源码) 这是一个完整的工程源码,包括所用到的jar包和发布配置文件。...导入到eclipse里几个运行,struts2.0入门学习工程,适合struts2.0广大爱好者和初学者学习和交流。
在"Struts 2.0从入门到精通(2)-源码"的学习中,你可以深入研究Action类的编写、拦截器的实现、配置文件的配置,以及如何结合实际项目需求进行定制。通过源码分析,可以更清楚地理解Struts 2.0的工作原理,这对于...
- 下载:Struts2的安装始于从Apache官方网站下载完整发布版(Full Distribution),包含源码、文档、库文件和示例程序。 - 解压:下载的zip包通常命名为`struts-2.XXX-all.zip`,解压后会看到`src`、`docs`、`lib`和...
Struts2入门视频,包含源码!!!链接失效评论或私信,我会更新!