首先我们来看下struts2的执行过程
如果各位有兴趣的话可以去查看下Struts2的源码,这里我只贴出 StrutsPrepareAndExecuteFilter 这个过滤器在中的inti方法
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { protected PrepareOperations prepare; protected ExecuteOperations execute; protected List<Pattern> excludedPatterns = null; public void init(FilterConfig filterConfig) throws ServletException { InitOperations init = new InitOperations(); Dispatcher dispatcher = null; try { FilterHostConfig config = new FilterHostConfig(filterConfig); init.initLogging(config); dispatcher = init.initDispatcher(config); init.initStaticContentLoader(config, dispatcher); prepare = new PrepareOperations(dispatcher); execute = new ExecuteOperations(dispatcher); this.excludedPatterns = init.buildExcludedPatternsList(dispatcher); postInit(dispatcher, filterConfig); } finally { if (dispatcher != null) { dispatcher.cleanUpAfterInit(); } init.cleanup(); } }
根据代码实现过滤器在服务器启动的时候创建,创建过滤器的时候执行init方法,在init方法中主要加载配置文件,包含自己创建的配置文件和struts2自带配置文件struts.xml
Struts2配置详解
1、 struts2的核心配置文件的名称和位置是固定的,位置只能存放在src下面,名称固定为struts.xml。
1、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> <package name="default" namespace="/" extends="struts-default"> <action name="userAction" class="com.netxintai.action.UserAction"> <result name="login">/index.jsp</result> </action> </package> </struts>
配置文件中主要有三个标签分别是: package、action和result
标签 package
1、类似于代码包,区别不同的action 要配置action 首先写pagckage标签,在package里面才能配置action
2、package标签属性
一、name属性:一个配置文件可以写多个package标签,name属性用于区分不同的package,每个name属性值不能相同
二、extends属性:属性值固定为 struts-default 有了这个属性之后,在package里面配置的类具有action功能 extends="struts-default"
三、namespace属性:与action标签里面的name属性值构成访问路径 namespace="/"
action标签
1 name属性 :一、namespace属性值和action和标签里面的name属性值构成访问路径 例如http://localhost:8080/day01/userAction 红色字 体部分就是package中的nameespace="/"和action标签中的name="userAction"构成的
二、在package标签里面可以写多个action标签,但是action的name属性值不能相同
2 class 属性 :Action的全路径; class="com.netxintai.action.UserAction"
3 method属性 : 让一个action可以执行多个方法。method="{1}"
result 标签 根据action中方法的返回值,配置到不同的路径里面
1 name属性:必须和方法返回值一样,否则无法找到路径
2 type属性:配置为转发或者重定向属性 默认是转发操作