一 配置详解
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>
2.struts.xml核心配置文件,主要负责管理Action
通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载
<struts>
<constant name="" value=""/>
<package name="" namespace="" extends="">
<action name="" class="">
<result name=""></result>
</action>
</package>
</struts>
constant 代表常量:常量配置在核心包下:/org/apache/struts2/default.properties里面,constant元素配置常量,可以改变Struts 2框架的一些行为
name属性表示常量名称,value属性表示常量值
<constant name="struts.i18n.encoding" value="UTF-8" />指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的输出
<constant name="struts.action.extension" value="do" /> 改变action的后缀
<constant name="struts.configuration.xml.reload" value="true" />当struts的配置文件修改后,系统是否自动重新加载该文件,默认为false,开发阶段最好打开,这样不用重启服务器。
<constant name="struts.devMode" value="true" /> 开发模式下使用,这样可以打印出更详细的错误信息
<constant name="struts.multipart.maxSize" value="10701096" /> 上传文件的大小限制,value值表示总大小,不是单个文件。
<constant name="struts.objectFactory" value="spring"/> 与spring集成时,指定由spring负责action对象的创建
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
该属性设置struts2是否支持动态方法调用,该属性的默认值是true。如需关闭,则设置value="false"。
package元素
包的作用:简化维护工作,提高重用性
包可以“继承”已定义的包,并可以添加自己包的配置
name属性为必需的且唯一,用于指定包的名称 是自己定义的便于管理Action
extends属性指定要扩展的包 必须要继承/struts-default.xml struts提供的xml文件
namespace属性定义该包中action的命名空间 ,为可选属性 就是你要访问的路径可写为“/” 访问用:http://localhost:8089//struts01/login.jsp
若写为“/user” 访问:http://localhost:8089//struts01/user/login.jsp
struts-default.xml
Struts 2默认配置文件,会自动加载
struts-default包在struts-default.xml文件中定义
struts-plugin.xml
Struts 2插件使用的配置文件
<struts>
<constant name="" value=""/>
<package name="default" namespace="/" extends="struts-default">
<action name="" class="" method="execute">
<result name=""></result>
</action>
</package>
</struts>
加载顺序
struts-default.xml→struts-plugin.xml → struts.xml
Action的作用封装工作单元、数据转移的场所 、返回结果字符串 。
method属性:实现Action中不同方法的调用
特点:
避免动态方法调用的安全隐患
导致大量的Action配置 默认method是excute()方法,但是自己可以指定调用的方法,注意不要加(),class:是调用Action的全路径,而Action是jsp页面要提交的Action,不一定和Action名字相同,因为后面class属性已经指定了要调用的类的路径。
二 方法调用
DMI动态方法调用:作用:减少Action数量
使用:actionName!methodName.action
禁用:将属性struts.enable.DynamicMethodInvocation设置为false 必须配置常量 并且将值设为true
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>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<constant name="struts.configuration.xml.reload" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="demo1Action" class="struts02.Demo1Action">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
Demo1Action
public class Demo1Action extends ActionSupport {
@Override
public String execute() throws Exception {
return "execute";
}
public String add() throws Exception {
System.out.println("add");
return SUCCESS;
}
public String delete() throws Exception {
System.out.println("delete");
return SUCCESS;
}
public String update() throws Exception {
System.out.println("update");
return SUCCESS;
}
public String find() throws Exception {
System.out.println("find");
return SUCCESS;
}
}
访问:url:http://localhost:8089/struts02/demo1Action!delete
DMI其实用的不多。
2.第二种通配符(*)的使用
另一种形式的动态方法调用
<action name= "*User"
class="cn.jbit.houserent.action.UserAction" method="{1}">
<result>/page/{1}_success.jsp</result>
<result name="input">/page/{1}.jsp</result>
</action>
/loginUser.action
-> method="login"
/page/login_success.jsp
/page/login.jsp
2.配置默认Action
没有Action匹配请求时,默认Action将被执行
通过<default-action-ref … />元素配置默认Action
<struts>
<default-action-ref name="defaultAction"/ >
<package name="default" extends="struts-default">
<action name="defaultAction">
<result>error.jsp</result>
</action>
</package>
</struts>
Result - 常用结果类型
dispatcher类型
默认结果类型,后台使用RequestDispatcher转发请求
redirect类型
后台使用的sendRedirect()将请求重定向至指定的URL
redirectAction类型 重定向到另一个Action
chain:转发到另一个Action