1 struts2是应用在javaee三层中web层的轻量级框架 2 struts2框架在struts1和webwork基础之上发展全新框架 3 struts2框架是开源框架 4 struts2框架版本 (2)struts2.3.24 |
常见web层框架
1 struts1 2 webwork 3 springMVC(常用) |
web层框架特
1 只要框架应用在web层,这类框架有共同的特点,有前端控制器(过滤器)
2 画图分析struts2解决问题: (1)BaseServlet:如果没有BaseServlet,缺陷是每个功能都需要创建servlet实现 |
Struts2框架入门案例
(1)在web.xml中进行 过滤器配置 <!-- 过滤器配置 --> <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> |
Struts2开发流程分析
struts2执行过程
|
(1)有加载顺序 Struts2自带配置文件 * default.properties : 常量配置 * struts-default.xml : 拦截器 * struts-plugin.xml : 插件 * struts.xml : 配置action,常量配置 * struts.properties: 常量配置 * web.xml :常量配置 |
Struts2的核心配置文件
1 struts2核心配置文件名称和位置固定的 (1)位置src下面 (2)名称 struts.xml
2 有三个标签 (1)package标签 (2)action标签 (3)result标签 |
标签package
1 在struts.xml配置action时候,必须首先package标签
2 package里面有属性name属性 (1)在struts.xml文件中写多个package标签,但是name属性值不能相同的
3 package里面有extends属性 (1)值固定的值 struts-default,表示拦截器部分
4 package里面有namespace属性 (1)namespace属性值和action标签name属性值构成访问路径
l /user.action |
标签action
1 action标签写在package标签里面
2 在一个package标签里面写多个action标签,但是name属性值不能相同
3 action标签name属性 (1)namespace属性值和action标签name属性值构成访问路径 (2)name属性值里面不能添加特殊符号
4 action标签class属性 (1)action类全路径
5 action标签method属性 (1)action默认执行名称是execute的方法,在action可能有其他名称的方法,让其他名称的方法执行,使用method属性实现 |
标签result
1 根据action里面的方法返回值,配置到不同的路径里面
2 result标签里面name属性 (1)name属性值和action方法返回值对应上
3 result标签里面type属性 (1)表示如何到路径中(转发或者重定向) (2)type属性默认值做转发操作 dispatcher
|
Struts2常量配置
1 struts2是框架,框架特点帮封装很多功能,struts2常量封装了框架中一部分功能
2 因为默认常量是源代码文件,不能直接修改,使用配置方式修改常量值 (1)在struts2里面常量修改有三种方式 第一种(常用):在struts.xml进行配置 第二种:在src下面创建名称struts.properties文件,进行配置 第三种:在web.xml中进行配置 l struts2里面这个常量封装这个功能: l 提交表单之后到action里面,在action获取post提交中文数据,乱码不需要自己解决
l 配置通过浏览器输入扩展名称
* 建议添加.action
(1)如果设置值true之后,修改struts.xml配置文件不需要重启动服务器
|
Action编写三种方式
第一种方式:创建类,不继承任何类,不实现任何接口 (pojo类)
第二种方式:创建类,实现接口 Action
* 如果action方法是String返回类型,不想要在action标签里面配置result标签,需要让方法方法值 NONE(不跳转)
第三种方式(常用):创建类,继承 ActionSupport类 (1)ActionSupport类是Action接口实现类
|
访问action的三种方法
在一个action里面,默认执行方法是名称是execute方法,但是action可以写其他名称的方法,执行不是execute方法配置 1 有三种方式实现 第一种 在action标签里面使用method属性实现 第二种 使用通配符方式实现(重点) 第三种 动态访问实现(不用) |
1 使用method属性
1 配置实现 <!-- 使用method属性让action里面的方法执行 --> <package name="demo2" extends="struts-default" namespace="/"> <!-- 1 让action里面的add方法执行 method: 执行的方法名称 --> <action name="bookadd" class="cn.itcast.action.BookAction" method="add"></action> <!-- 让action里面的update方法执行 --> <action name="bookupdate" class="cn.itcast.action.BookAction" method="update"></action> </package>
缺陷:action中的每个方法都需要配置action,如果action里面有很多的方法,配置很多action实现功能 |
2 使用通配符实现(重点)
1 使用通配符方式配置action里面的方法 <!-- 使用通配符让action里面的方法执行 --> <package name="demo3" extends="struts-default" namespace="/"> <!-- (1)在action标签里面使用符号 * 星号,理解为匹配任意内容 (2)把action标签name属性值写实际意义,book_* (3)book_add, book_update,使用book_*都可以匹配到 ** 两个路径里面 add和update方法名称 ** book_add,使用book_*可以匹配到,*相当于变成 add ** book_update,使用book_*可以匹配到,*相当于变成 update (4)method里面写*值 *_* :获取第一个*值 表达式 {1},第二个* 值 {2} --> <action name="book_*" class="cn.itcast.action.BookAction" method="{1}"></action> </package>
2 访问action的方法还有一种方式是: 动态访问,实际开发一般不用,作为了解
(1)开启常量
(2)配置action,不需要method属性
(3)访问时候,写action的name属性值后面添加感叹号 ! ,后面添加执行方法名称 |