一. struts2 概述
1. struts2 框架应用 JavaEE 三层结构中 web 层框架
2. struts2 框架在 struts1 和 webwork 基础之上发展全新的框架
3. struts2 解决的问题:
4. web层其他常用框架:spring MVC
二. Struts2 入门
1. 步骤
i. 导入jar包
ii. 创建action
iii. 配置action类访问路径
1) 配置struts2核心配置文件
a) 核心配置文件名称和位置是固定的b) 位置必须在src下面,名称 struts.xml
2) 引入dtd约束
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
3) action基本配置
http://localhost:8080/Struts2-a/hello.action
iv. 配置struts2 过滤器
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. struts2 基本执行过程
3. struts2 源代码查看
i. 过滤器在服务器启动的时候创建,创建过滤器的时候执行 init() 方法
1) 在init()方法中主要加载配置文件
a) 包含自己创建的配置文件和自带的配置文件
struts.xmlweb.xml
三. Struts2 配置
1. Struts2 的核心配置文件:struts.xml
i. 名称和位置是固定的
ii. 主要的三个标签 :package、action、result
package标签
1) 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package标签里面配置action
2) package标签的属性
a) name属性
- name属性值和功能本身值没有关系
- 在一个配置文件中可以写多个package标签,name属性值不能相同
b) extends属性
- 属性值是固定的:struts-default
- 写了这个属性,它里面的配置才具有acion功能
c) namespace属性
- namespace属性和action标签里面的 name属性值构成访问路径
action标签
1) action标签配置action访问路径
2) 属性
a) name属性
- namespace属性值和标签里的name属性值构成访问路径
- 在package标签里面写多个action标签,name属性值不能相同
b) class属性
- action全路径
c) method属性
- 让action里面的多个方法,使用method属性进行配置
result标签
1) 根据action方法里的返回值,配置到不同的路径里面
2) 属性
a) name属性
- 和方法的返回值一样
b) type属性
- 配置如何到路径中去(转发或者重定向)
- 默认做转发操作
2. 分模块开发的配置
i. 单独写配置文件,把配置文件引入到核心配置文件中
3. 常用的常量
<constant name="struts.i18n.encoding" value="UTF-8" />
i. 表单提交到action 里面,在action可以获取表单提交数据
ii. 表单提交数据有中文,乱码问题时,解决:
1) post提交直接设置编码2) get提交做编码转换
iii. 如果在action获取表单通过post方式提交中文,中文乱码问题解决了,不需要自己处理
四. Actiond的访问
action编写有三种方式1. 创建普通类,这个类不继承任何类,不实现任何接口2. 创建类,实现Action接口import com.opensymphony.xwork2.Action; public class UserAction implements Action{ @Override public String execute() throws Exception { return SUCCESS; } }
3. 创建类,继承类 ActionSupport(常用)import com.opensymphony.xwork2.ActionSupport; public class OtherAction extends ActionSupport{ public String execute() throws Exception { return SUCCESS; } } //public class ActionSupport implements Action…
五. 访问action的方法(重点)
有三种实现方法1. 使用action标签的method属性,在这个属性里面写执行action的方法
i. 创建action,创建多个方法
import com.opensymphony.xwork2.ActionSupport; public class BookAction extends ActionSupport{ //添加 public String add() { System.out.println("add......"); return NONE; } //修改 public String update() { System.out.println("update......"); return NONE; } }
ii. 使用method配置
<!--配置action的方法访问 --> <package name="methoddemo" extends="struts-default" namespace="/"> <!-- 有method属性 写要执行的action里面的方法的名称 --> <action name="addAction" class="org.fan.method.BookAction" method="add"></action> <action name="updateAction" class="org.fan.method.BookAction" method="update"></action> </package>
iii. 缺陷:
action每个方法都需要配置,如果action里面有多个方法,就需要配置很多action
2. 使用通配符方式实现(重点)
i. 在action标签里面name属性,name 属性值里面写 符号”*“
1) “*”理解:表示匹配到任意内容
-访问 hello,*可以匹配到-访问 add,*可以匹配到
2) 注意:
在 struts2 2.5版本以上 不能直接使用通配符,需要在 package 标签里面 加上 <global-allowed-methods>regex:.*</global-allowed-methods>
<!-- 通配符的方式实现 --> <package name="methoddemo" extends="struts-default" namespace="/"> <global-allowed-methods>regex:.*</global-allowed-methods> <action name="book_*" class="org.fan.method.BookAction" method="{1}"></action> </package>
3. 动态访问实现(一般不用)
4. 常见错误
i. 如果action方法有返回值,在配置文件中没有配置,会出现错误:
404-No result defined for action cn.itcas.acion.HelloAction and result ok
ii. 在action里面的方法有返回值,如果有返回值的时候类型必须是 String
iii. action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置
-让返回值返回 none-方法写void(不建议)