一、Struts2的由来
二、搭建Struts2的开发环境
1、拷贝jar包
参考发行包中的struts2-blank.war中的jar
2、配置核心过滤器(控制器)
3、建立struts.xml的配置文件,放在应用的类路径的顶端(开发中:src目录下)
验证是否成功:部署到Tomcat中,启动,只要没有报错,就是OK。
4、写struts配置文件没有提示的问题
1、找到dtd,放到某一个目录中。WEB-INF/d
三、Struts2的执行流程全图
四、Struts2的配置文件和加载顺序
1、default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中
2、struts-default.xml 该文件保存在 struts2-core-2.3.7.jar
3、struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar(struts2的插件jar包中)
4、struts.xml该文件是web应用默认的struts配置文件(程序员写)
5、struts.properties 该文件是Struts的默认配置文件(程序员写)。构建路径的顶端
6、web.xml应用的配置文件
按照从1到6的顺序加载配置文件。后面的内容会覆盖前面的内容。
1和2和3都在框架或插件提供的jar中,不需要我们直接改。
五、struts.xml配置文件的内容标签
1、package:
作用:分模块化开发。
属性:
name:包的名称。唯一。必须的
extends:一般都需要直接或间接继承一个叫做struts-default(struts-default.xml中有定义)的包名。因为,struts框架的一些核心功能配置都在此处。
abstract:如果为true,说明是一个抽象包。说明让别人去继承。没有任何action子元素的包就可以定义为抽象包。
namespace:名称空间。一般以"/"开头,和动作名称一起,构成了用户的访问路径。
比如:
专题:package中的namesapce属性
2、action:
作用:配置动作。用户什么请求,执行哪个类,及哪个类的方法。
属性:
name:动作名称。必须的。包中要唯一。
class:动作类的全名。可以不指定,默认值是
com.opensymphony.xwork2.ActionSupport
method:执行的动作类的动作方法。可以不指定,默认值是execute。
说明:可以覆盖掉默认的动作类。一般我们不需要这么做。
3、constant配置:
推荐覆盖常量办法:在struts.xml中使用constant标签。
作用:配置常量的值。
struts2的常量都在default.properties配置文件中做了定义(struts2-core.jar/ org.apache.struts2包中)
常用的常量:
struts.i18n.reload = true 国际化配置文件更改后,自动加载。
struts.configuration.xml.reload = true struts配置文件更改后,自动加载
struts.devMode = false 如果为true,开启开发模式.实际运行应该为false
struts.i18n.encoding=UTF-8 应用使用的编码。
struts.action.extension=action,, struts2框架真正执行的url地址后缀。多个用逗号分隔
struts.serve.static.browserCache=true 静态资源告知浏览器不要缓存。
Expires:-1;Cache-Control:no-cache;Pragma:no-cache
4、包含其他的配置文件
<include file="user.xml"></include>
六、动作类:Action
1、编写动作类的方式
l 方式一:动作类就是一个POJO。可以不用继承或实现任何的类或接口。
l 方式二:动作类实现com.opensymphony.xwork2.Action接口。
SUCCESS:一切正常时使用
NONE:不转向任何视图时使用(文件下载时)
ERROR:出错(异常中)
INPUT:数据回显时。
LOGIN:转向登录页面时。
l (推荐的)方式三:动作类继承ActionSupport类。
2、动作方法:
编写要求:
必须是public的
方法必须返回String的值。如果为null,则不转向任何的视图
方法没有任何的参数
3、动作方法的映射:
4、DMI:DynamicMethod Invocation(动态方法调用)(了解)
当前配置:没有指定动作方法
url:customer!addCustomer
错误:
说明struts2框架默认是不允许执行动态方法调用的。如果要用,需要配置一个常量:
危险:容易把动作方法暴露给客户端
5、默认的action
七、Servlet规范相关实例的获取
1、Struts2的一大特点:与ServletAPI解耦了。
2、获取Servlet有关的类
l 方式一:(暂时记住。推荐的)
l 方式二:(麻烦。框架注入进来)
怎么做到的?实际上是一个拦截器来做的。
<interceptorname="servletConfig"class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
十、Struts2中的结果视图
1、展现结果
通过struts.xml中result配置来管理的。
2、result元素
作用:配置一个结果视图
属性:
name:逻辑视图名称。对应的是动作方法的返回值。
可以不写。默认值是success。
type:指定结果类型。默认值是dispatcher,就是转发。
问题:dispatcher从哪里来的?struts-default.xml中有定义。
3、常用的结果视图的类型
l dispatcher:默认结果类型。请求转发到一个页面。
l redirect:请求重定向到一个页面。
l chain:请求转发到另一个动作。
l redirectAction:重定向到另外一个动作
l stream:下载用的(文件上传和下载时再议)
l plainText:以纯文本的形式展现内容