一、准备工作及实例
1.解压struts-2.1.6-all.zip
apps目录:struts2自带的例子程序
docs目录:官方文档。
lib 目录:存放所有jar文件。
Src 目录:源文件存放地
2.六个基本包
struts2-core-2.1.6.jar
freemarker-2.3.13.jar
commons-logging-1.0.4.jar
ognl-2.6.11.jar
xwork-2.1.2.jar
commons-fileupload-1.2.1.jar
特别需要说明的是目前strust2的最新版本是struts-2.1.6(现在已不是了),它作为2.1X的正式版。特别要注意导入commons-fileupload-1.2.1.jar包,在此jar包中包含了RequestContext类,如果不导入该jar包将会报异常。
3.初识struts2配置文件
(1).web.xml文件
主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml配置文件,还有的会影响struts框架的行为。除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。
(2).struts.xml文件
框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。这也是我们要配置的主要文件。
(3).struts.properties(参default.properties)
在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。我们可以在struts-default.properties文件中找到一个属性的列表。
(4)struts-default.xml
此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。我们可以在struts2-core.jar中找到这个文件。
(5)其它配置文件
velocity.properties,struts-default.vm,struts-plugin.xml
4.让MyEclipse提示xml信息
当我们在编写struts.xml时,发现eclipse并不会给出帮助提示,那是因为MyEclipse默认并不支持struts2,所以我们需要手工导入dtd以支持提示。步骤:[window][preferences][MyEclipse][Files and Editors][XML][xml Catelog]然后在右边点add添加:location为dtd文件所在的位置(struts-2.0.dtd文件struts2-core-2.1.6.jar中可以得到),KeyType选择URI,Key为struts-2.0.dtd文件中文档声明的内容(http://struts.apache.org/dtds/struts-2.0.dtd),在struts.xml文件中也有此key值。
5.如何使用alt+/提示
在MyEclipse6.5中,默认的提示为Ctrl+Space,而它会与我们的输入法切换冲突,使提示失效。找到key,先取消Content Assist命令的绑定,再用“alt+/”来绑定。
6.实例
步骤一,新建myStruts2项目,并导入struts2的六个基本jar包。
步骤二,建立LoginAction文件,主要代码如下:
package com.asm;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private String username;
private String password;
...省略get/set方法
public String execute() throws Exception {
if (username.equals("struts2")) {
return "loginSuccess";
} else {
return "loginFailure";
}
}
}
说明:实现了Action接口,主要是为了保证execute的正确定义,其实我们也可以不实现此接口,只要能保证execute方法书写的正确书写(方法名,返回值)。
步骤三,在struts.xml文件中注册LoginAction。此配置文件要放在src目录下,实质就是成为classpath环境变量下的文件。主要代码如下:
<?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>
<package name="myFirst" namespace="/" extends="struts-default">
<action name="login" class="com.asm.LoginAction">
<result name="loginSuccess">/success.jsp</result>
<result name="loginFailure">/failure.jsp</result>
</action>
</package>
</struts>
说明:package后面会有详细说明。action元素中的name属性值指定了此action所指定的请求路径为“login.action”。后面login.jsp中的<form action=...>属性值就会参照此name属性。
步骤四、提供jsp页面
login.jsp主要代码:
<body>
<form action="<%=request.getContextPath()%>/login.action" method="get">
户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="login">
</form>
</body>
failure.jsp主要代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
登录失败,错误的用户名:<s:property value="username"/><br>
<a href="<%=request.getContextPath()%>/login.jsp">返回</a>
</body>
</html>
说明:使用了标签库,在struts2中使用标签库非常简单,只需要像上面那样导入标签库便可以使用所有的struts2的所有标签
success.jsp主要代码
<body> 登录成功!</body>
步骤五、配置web.xml。完成核心监听器注册。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-->
<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>
</web-app>
说明:注释掉的部分为以前2.1.4版本中用的核心filter类。
步骤六、发布测试。
简要分析执行流程:
当输入.../login.jsp访问jsp页面填写完相关信息并提交给login.action时,它会首先被在web.xml中配置的过滤器监听到,过滤器会去查找strust.xml文件,并结合namespace查找名为login的action,查找到此action便交给其处理,LoginAction内部会执行execute方法,并返回结果result(result也是参照的struts.xml中action下的result配置)。 关于表单传参,主要是参照的action中的方法名,而非属性名。
7.开启struts2自带的开发模式常量
在以前的开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新改变的内容,在struts2中可以通过一个常量来达到此目的。即在struts.xml中的<struts>元素下增加如下内容:<constant name="struts.devMode" value="true"></constant> 这样配置后,当配置文件修改保存时就会及时更新到服务器中。
8.vo传参模式
Copy上面的myStruts2项目,改名为myStruts2Vo项目。作如下修改:在LoginAction中有两个字段:username,password。把此两个属性重构到com.asm.vo.User类中,然后在LoginAction中提供User对象及相应的get/set方法。现在需要注意的是在login.jsp中会有如下的修改:
户名:<input type="text" name="user.username"><br>
密码:<input type="password" name="user.password"><br>
关键就是改掉name属性值。其它基本无变动。 后话:假如此此User对象并不能和Model层的相应对象完全对应,我们还应借助此User对象在Action中构建出Model层的相应对象,这样,在exectue方法中便能通过构建的Model对象作为参数与Model层交互。
9.ModerDriven传参模式
Copy上面的myStruts2Vo项目,改名为myStruts2Model项目。重点是修改LoginAction,修改后的主要内容如下:
package com.asm;
import com.asm.vo.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
public String execute() throws Exception {
if (user.getUsername().equals("struts2")) {
return "loginSuccess";
} else {
return "loginFailure";
}
}
public User getModel() {
return user;
}
}
说明:它实现了ModelDriven接口,并使用了泛性机制(必须),因此要求jdk1.5以上。
现在需要注意的是在login.jsp中name属性值为User中两个字段,和第一个实例一样。说明:此方式一般不会使用,在此略作了解。
分享到:
相关推荐
### Struts2入门知识点详解 #### 一、Struts2简介及历史背景 **Struts2** 是一款基于Java的企业级应用开发框架,它继承和发展了经典的**Struts1**框架,并融合了WebWork框架的一些优秀特性。Struts2最初被称为**...
这篇学习笔记将带你入门Struts2,通过创建第一个实例来理解其核心概念和基本配置。 首先,了解Struts2框架的结构至关重要。Struts2的核心组件包括Action、Result、Interceptor等,它们协同工作,处理HTTP请求并呈现...
一、Struts2入门 Struts2作为Apache软件基金会的一个项目,是Struts1的升级版,它提供了更灵活的控制流、强大的异常处理和插件架构。入门案例通常包括创建一个简单的“Hello, World!”应用,通过配置Struts2的核心...
标题"Struts2入门笔记1-4"暗示了这是一个关于Struts2基础知识的学习过程,涵盖了从基础到进阶的内容,可能包括了Struts2的核心概念、配置、拦截器以及实际应用等。 描述中提到,Struts2的控制实现是通过Filter来...
- **解压struts-2.1.6-all.zip**:这是Struts2的一个发布版本,包含各种资源和示例程序,帮助开发者快速入门和开发。 - **apps目录**:包含Struts2自带的示例程序,用于学习和参考。 - **docs目录**:官方文档,...
这个入门学习源码包包含了关于Struts2的基础知识、学习笔记以及源码实例,旨在帮助初学者快速理解和掌握Struts2的核心概念和技术。 首先,让我们深入了解Struts2的基本原理。Struts2是Apache软件基金会的一个开源...
通过达内的这套学习资料,初学者将逐步掌握以上知识点,通过实例练习和笔记解析,加深对Struts2框架的理解,最终能够独立完成基于Struts2的Web项目开发。同时,理论学习与实践操作相结合,有助于巩固所学,提升实际...
### Struts基础入门知识点 #### 一、Struts1简介 Struts1 是一款用于构建企业级Java Web应用的开源框架。它属于Model-View-Controller (MVC)设计模式的一种实现,帮助开发者构建出结构清晰、易于维护的Web应用程序...
ValueStack是Struts2的核心概念,它是一个对象栈,存储Action实例和其他值,方便视图层获取数据。调试ValueStack可以帮助理解数据流和数据绑定过程。 以上就是Struts2学习笔记中的主要内容,通过这些知识点的学习...
#### 一、Struts2框架介绍 Struts2是一个基于MVC模式的开源Java Web框架,它提供了丰富的功能用于构建Web应用程序。与Struts1相比,Struts2的设计思想和架构有着根本的不同。Struts2的核心是基于WebWork框架,并且...
在源码中,你可能还会发现关于Struts2拦截器(Interceptor)的使用,这是Struts提供的一种机制,允许在Action执行前后插入自定义逻辑,比如日志记录、权限验证等。同时,Struts的插件体系也是其强大之处,比如Tiles...
根据提供的文档内容,笔记涵盖了Struts2框架的基本概念、功能、与传统Struts1的区别、核心特性、以及一个简单的入门实例。通过这些知识点,学习者可以对Struts2有一个初步的认识,并且开始上手进行实际的框架应用...
**Struts** 是由 Apache Jakarta 项目开发的一款开源框架,它通过结合 Java Server Pages (JSP) 和 Servlet 技术,提供了一套遵循 Model-View-Controller (MVC) 设计模式的标准框架。Struts 主要用于构建 Web 应用...
#### 三、Struts框架快速入门实例详解 ##### 1. 创建Web工程并引入依赖 - **创建Web工程**:使用Eclipse或其他IDE创建一个新的Web项目。 - **引入依赖**:在项目的`lib`目录下添加Struts框架所需的jar包,例如`...
Struts2是一个基于MVC设计模式的Java Web框架,它是Struts1的升级版,旨在解决Struts1在复杂应用中的一些问题。Struts2的核心目标是简化开发过程,通过分离视图(View)和逻辑处理层(Controller),提供更加灵活和强大...
在`13-Hibernate入门(上)笔记.pdf`至`19-Hibernate实体层设计笔记.pdf`中,详细介绍了Hibernate的配置、实体类的创建、映射文件的编写、HQL(Hibernate Query Language)的使用,以及如何处理复合主键等复杂情况。...
### Java从入门到精通知识点梳理 #### 一、Java核心概念 **1. 环境搭建** - **Java的历史**: Java由Sun Microsystems公司在1995年发布。 - **发展方向**: 包括JAVASE(Java Standard Edition,标准版)、JAVAME...
2. **实际案例分析**:通过具体的应用实例,深入理解Struts框架的工作原理及其在实际项目中的应用。 3. **数据库集成**:介绍如何将Struts框架与数据库技术相结合,实现高效的数据访问。 4. **Struts扩展技巧**:...
Web技术的学习笔记涵盖了从基础的JSP引擎工作原理到高级的框架如Struts1和Struts2的使用。首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,当Web容器接收到以JSP为扩展名的URL请求时,会交由JSP引擎处理...