没有合适的资源?快使用搜索试试~ 我知道了~
首页Struts2入门教程(全新完整版).
资源详情
资源评论
资源推荐
http:// www.chengxuyuans.com 程序员之家
一、准备工作及实例
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 :struts2 的 UI 标签的模板使用 freemarker 编写
commons-logging-1.0.4.jar :日志包
ognl-2.6.11.jar :对象图导航语言,通过它来读写对象属性
xwork-2.1.2.jar :xwork 类库,struts2 在其上进行构建
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6 版本后必须加入此 jar 包
特别需要说明的是目前 strust2 的最新版本是 struts-2.1.6,它作为 2.1.X 的正式版。特别要注意导
入 commons-leupload-1.2.1.jar 包,%在此 jar 包中包含了 RequestContext 类,如果不导入该 jar
包将会报异常。
3.初识 struts2 配置文件
(1).web.xml 文件
主要完成对 StrutsPrepareAndE%xecuteFilter 的配置(在以前的版本中是对 FilterDispatcher 配
置,新版本同样支持用 FilterDispatcher 配置),它的实质是一个过滤器,它 负责初始化整个
Struts 框架并且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些
额外的 xml 配置文件,还有的会影响 struts 框架的行为。除了 StrutsPrepareAndExecuteFilter 外,
Struts 还提供了一个 ActionContexCleanUp 类,它的主要任务是当有其它一些过滤器要访问一个初
始化好了的 struts 框架的时候,负责处理一些特殊的清除任务。
(2).struts.xml 文件
框架的核心配置文件就是这个默认的 str%uts.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/
1
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>
2
<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版本中用的核心lter类。StrutsPrepareAndExecuteFilter类的
init方法将会读取类路径下默认的配置文件struts.xml,并以javabean形式存放在内存中,以后
struts2对用户的每次请求将使用内存中数据,而不是重读struts.xml文件。
步骤六、发布测试。
简要分析执行流程:
当输入 login.jsp 访问 jsp 页面填写完相关信息并提交给 login.action 时,它会首先被在 web.xml 中
配置的过滤器监听到,过滤器会去查找 strust.xml 文件,并结合 namespace 查找名为 login 的
action,查找到此 action 便交给其处理,LoginAction 内部会执行 execute 方法,并返回结果
result(result 也是参照的 struts.xml 中 action 下的 result 配置)。 关于表单传参,主要是参照的
3
action 中的方法名,而非属性名。
7.开启 struts2 自带的开发模式常量
在以前的开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新
改变的内容,在 struts2 中可以通过一个常量来达到此目的。即在 struts.xml 中的<struts>元素下
增加如下内容:<constant name="struts.configuration.xml.reload" value="true" />
这样配置后,当配置文件修改保存时就会及时更新到服务器中。其它一些常量:
<!-- 指定WEB应用的编码集,相当于调用HttpServletRequest.setCharacterEncodint方法,
如果使用了velocity或freemarker,它也用于指定输出的编码格式 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 指定请求后缀为.action,指定多个请求后缀用逗号分隔 -->
<constant name="struts.action.extension" value="action" />
<!--设置浏览器是否缓存静态内容,建议:开发阶段关闭,运行时开启 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!--当struts.xml配置文件修改后,系统是否重新加载该文件,开发阶段打开此功能 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 开发提示:出错时打印更详细的信息-->
<constant name="struts.devMode" value="true" />
<!-- 指定请求的后缀可以是.do或.action -->
<constant name="struts.action.extension" value="do,action" />
注意:在 struts2.1.6 版本中存在一个 bug:即配置了 struts.i18n.encoding 常量也不能解决中文
乱码问题,原因是此版本在获取请求参数后才调用了 setCharacterEncoding()方法进行编码设置。
解 决 此 bug 的 方 法 是 配 置 一 个 lter , 并 在 doFilter 方 法 中 增 加 如 下 代 码 :
request.setCharacterEncoa2.1.8 版本中解决了此问题及 2.1.6 中存在的其它 bug,建议新项目使
用 2.1.8 版本。
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 {
4
return "loginFailure";
}
}
public User getModel() {
return user;
}
}
说明:它实现了 ModelDriven 接口,并使用了泛性机制(必须),因此要求 jdk1.5 以上。
现在需要注意的是在 login.jsp 中 name 属性值为 User 中两个字段,和第一个实例一样。说明:此方
式一般不会使用,在此略作了解。
10.为什么要使用 struts2 代替 struts1.x
(1)struts2 的 execute 方法中的参数不会依赖于 servletAPI,实现了也 servlet 解耦,是一种无侵入
式的设计。
(2)struts2 提供了拦截器,利用拦截器可以进行 AOP 编程,实现权限拦截等功能。
(3)struts2 提供了类型转换器,我们可以很容易地对请求参数转换成需要的类型。
(4)提供了同种表现层技术支持,如 JSP、freeMarker、velocity 等
(5)可以对指定的方法进行校验,可以轻松地实现表单校验功能
(6)提供了全局范围、包范围和 action 范围的国际化资源文件管理实现。
二、struts.xml 配置及例程
1.配置文件的优先级
在 struts2 中 一 些 配 置 ( 比 如 常 量 ) 可 以 同 时 在 struts-default.xml ( 只 读 性 ) , strtus-
plguin.xml(只读性),struts.xml,struts.properties 和 web.xml 文件中配置,它们的优先级逐
步升高,即是说后面的配置会覆盖掉前面相同的配置。
2.配置形式
下面以对 struts.i18n.encoding=UTF-8 的配置为例进行说明:
在 struts.xml 配置形式如下:
<constant name="struts.i18n.encoding" value="gbk"></constant>
在 struts.properties 的配置形式如下:
struts.i18n.encoding=UTF-8
在web.xml中配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
说明:官方声称配置了此常量可以解决中文乱码问题,但实事上并不能达到目的,在前面的三个项目中,
如果我们在表单中输入中文,其结果是会出现乱码。解决此问题参看 [一.7 的注意]。这是 struts2.1.6
中的一 bug,它的下一版 2.1.8 已解决此问题。
3.package 配置相关
属性名 是否必须 说明
Name
是 Package 的唯一标识,不允许同
5
剩余58页未读,继续阅读
kookaisen
- 粉丝: 21
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4