1、struts2的6个配置文件
文件 | 说明 | |
不能修改 | default.properties | key=value的形式,类似于开关 |
struts-default.xml | 配置的都是struts2的核心 | |
struts-plugin.xml | 只有使用了plugin的jar时才有的配置文件 | |
struts.xml | 项目中的struts2核心配置 | |
struts.properties | 不推荐使用 | |
web.xml | 给过滤器配置参数 |
加载时机是:在项目启动时就开始加载
加载顺序:按照上述顺序加载
注意:遇到相同的配置信息时,后加载的会覆盖先加载的
配置文件的位置
default.properties配置文件位置
struts-default.xml位置
struts-plugin.xml
位置:插件包jar包中,没有导插件包时不存在
2、struts.xml中标签详解
2.1、constant标签
作用
配置struts2的常量
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
</struts>
常用的常量
常量名 | 常量值 | 说明 |
struts.i18n.encoding | UTF-8 | 项目中使用的编码 |
struts.objectFactory.spring.autoWire | name | 和spring框架整合有关 |
struts.multipart.parser | jakarta | 指定文件上传用的组件 |
struts.multipart.maxSize | 2097152 | 文件上传时,总文件大小的限制:2M |
struts.action.extension | action,, | 能进入struts2框架内部的URL地址后缀,多个值用逗号分隔 |
struts.enable.DynamicMethodInvocation | false | 是否开启动态方法调用 |
struts.devMode | false | 是否开启开发者模式 开发阶段建议为true |
struts.ui.theme | xhtml | 页面展示用的主题 |
2.2、package标签
作用
建立一个包,把我们的动作配置按照面向对象的思想来管理
属性
- name
- 指定包的名称。必须写,必须唯一
- extends
- 指定当前包的父包,子包自动具备父包的配置。
- 我们的包一般都需要继承struts-default包
- 该包中配置着struts2的核心,如果不继承该包,则不能使用struts2的核心
- abstract
- 把当前包声明为抽象包
- 抽象包就是用来被继承的,里面定义的公共配置
- 只有没有action标签的包,才能声明为抽象包
- namespace
- 指定当前包的名称空间
- 把访问URL按照模块化来管理
- 当包上指定了名称空间之后,访问URL就变成了:url = 名称空间+action标签的name取值
- 名称空间的写法
- 必须以/开头
- 后面的第一个字符必须是字母
2/3、action标签
作用
- 建立动作名称,动作类和动作方法的对应关系
属性
- name:指定动作名称,它不能重复
- class:指定动作类的全限定类名
- method:指定动作方法名称
2.4、result标签
作用
配置结果视图的地址
属性
- name:用于和动作方法的返回值比较,当一致时前往指定的位置
- type:用何种方式前往(请求转发,重定向)
常用的取值
- dispatcher:请求转发到一个指定jsp页面(默认值)
- chain:请求转发到某个Action
- redirect:重定向到一个指定的jsp页面或者是一个action
- redirectAction:重定向到一个指定的action
-
stream:文件下载的时候用到
3、创建动作类的方式
3.1、普通的Java类
public class HelloAction {
public String sayHello(){
System.out.println("HelloAction中的sayHello方法执行了。。。。");
return "success";
}
}
3.2、实现Action接口
import com.opensymphony.xwork2.Action;
public class HelloAction implements Action{
@Override
public String execute() throws Exception {
System.out.println("HelloAction中的sayHello方法执行了。。。。");
return "success";
}
}
3.3、继承ActionSupport类
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
public String sayHello(){
System.out.println("HelloAction中的sayHello方法执行了。。。。");
return "success";
}
}
4.动作方法的访问方式
动态方法访问
作用
减少Action数量
语法
动作类的名字!动作方法的名字.action
使用
- 在struts.xml文件中,开启动态方法调用
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
- 页面中
<a href="${pageContext.request.contextPath }/user!login.action">登录</a>
调用UserAction类的login()方法
通过method属性配置
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String login(){
return SUCCESS;
}
public String register(){
return SUCCESS;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<package name="user" namespace="/" extends="struts-default">
<action name="userAction" class="com.itheima.web.UserAction"
method="login">
<result name="success">/success.jsp</result>
</action>
<action name="userAction" class="com.itheima.web.UserAction"
method="register">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
通过通配符的配置方式
页面
<h1>Action方法的3种访问方式三:通过通配符的配置方式:</h1>
<a href="${pageContext.request.contextPath }/loginUser.action">登录</a>
<a href="${pageContext.request.contextPath }/registerUser.action">注册</a>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<package name="user" namespace="/" extends="struts-default">
<action name="*User" class="com.itheima.web.UserAction"
method="{1}">
<result name=”success”>/{1}_success.jsp</result>
<result name="input">/{1}.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
动作类
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String login(){
return SUCCESS;
}
public String register(){
return SUCCESS;
}
}
玩一玩
<h1>Action方法的3种访问方式三:玩一玩</h1>
<a href="${pageContext.request.contextPath }/login_User.action">登录</a>
<a href="${pageContext.request.contextPath }/register_User.action">注册</a>
<br/>
<a href="${pageContext.request.contextPath }/add_Product.action">添加商品</a>
<a href="${pageContext.request.contextPath }/update_Product.action">修改商品</a>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<package name="user" namespace="/" extends="struts-default">
<action name="*_*" class="com.itheima.action.{2}Action" method="{1}">
<result name="success">/{1}_success.jsp</result>
</action>
</package>
</struts>