Struts2的基本配置和使用过程
建立web项目
建立时注意使用 JavaEE5.0
导入jar包
以下9个为核心包:
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
xwork-core-2.3.16.3.jar
注意,导入jar包位置为WEB-INF下的lib文件夹,其他位置不可
在web.xml中添加Struts2核心filter
注意此处所有的页面访问均要通过Struts2的filter,若导包错误,会导致org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter找不到,则所有页面均为404
此时在页面中的所有请求都会根据web.xml的配置发送给指定的Struts2过滤器
配置struts.xml
此处以登录用的LoginAction为例
action元素
属性 | 作用 |
---|---|
name | 相当于配置的servlet名字,在发送表单时发送至此名称就会进入相应的Struts2处理脚本 |
class | Struts2处理脚本的实际位置,从第一层包名开始 |
result元素
属性 | 作用 |
---|---|
name | 用于匹配此Struts2处理脚本反悔的结果字符串 |
节点内容 | 根据结果字符串进行页面跳转 |
MyEclipse中配置struts.xml
编写Struts2的Java脚本文件
此处以登录的LoginAction.java为例
此脚本需实现Action接口,重写其excute方法,这个方法需返回一个字符串,此字符串的内容用于匹配struts.xml中result的属性
这个类的属性会自动从request中读取对应的属性值,无需再手动从request中取值 这里使用的message变量可在前端页面中使用OGNL表达式取出
Struts2的Action中的字符串常量
属性 | 值 |
---|---|
SUCCESS | "success" |
NONE | "none" |
ERROR | "error" |
LOGIN | "login" |
INPUT | "input" |
五个常量可用 Action.常量名 来调用,如Action.SUCCESS会得到success字符串
在Struts2中获取Servlet API
解耦方式
通过ActionContext类的getContext()获取ActionContext对象,再用ActionContext对象的getSession()和get("")方法获取session,request和application
获取到的是Map对象,要使用put方法向其中添加键值对
解耦方式(注入)
首先要求Action所在类实现SessionAware接口,然后定义三者的Map属性,再由setter向其中中注入对象
耦合方式
直接使用ServletActionContext的三个方法获得session,request,application对象
Struts2数据校验
要求Action类继承ActionSupport类,并在类中重写validate()方法
此处以登录界面的非空验证为例
注意:此方法默认返回“input”,所以需要在struts.xml中加入result对应input这个结果
在前端页面要使用OGNL表达式中的<s:filederror/>标签来获取提示信息
Struts2 标签
首先要在前端页面中导入Struts 2标签库,类似于JSTL标签库的导入方法
UI标签
标签 | 说明 |
---|---|
<s:form>...</s:form> | 获取相应form的值 |
<s:textfield>...</s:textfield> | 文本输入框 |
<s:password>...</s:password> | 密码输入框 |
<s:textarea>...</s:textarea> | 文本域输入框 |
<s:radio>...</s:radio> | 单选按钮 |
<s:checkbox>...</s:checkbox> | 复选按钮 |
<s:submit/> | 提交 |
<s:reset/> | 重置 |
<s:hidden/> | 隐藏域 |
<s:filederror/> | 数据校验信息 |
通用标签
名称 | 标签 |
---|---|
条件 | <s:if test="表达式">...</s:if> |
条件 | <s:elseif test="表达式">...</s:elseif> |
条件 | <s:else>...</s:else> |
迭代 | <s:iterator value="集合对象" status="当前元素示例" id="当前元素id">...</s:iterator> |
注意:
OGNL表达式中获取作用域中的值需要加#前缀,而获取valuestack(值栈)中的值时不用加#
Action中的属性的值都存放在valuestack中
Struts2标签中OGNL表达式与字符串的识别问题
如下标签中,value的值两侧有一对单引号
这就是强制使Struts2框架将其识别为字符串,若不加此单引号则会被识别为OGNL表达式
若希望字符串被强制识别为OGNL表达式,则需要使用%{字符串}的形式,如:
上一篇: 函数的调用过程
下一篇: 小程序开发之基础内容(text)