struts的核心在于拦截器的机制,采用拦截器来处理业务逻辑,使得侵入性比较厉害的servlet光芒暗淡。我们来看看struts2的核心思想图解
show my code.
先来第一个.action,为了能让我们知道action确实执行了我们选择了在控制台打印一句hehe。这里作为我们struts2的业务逻辑处理模块,我们还需要为它配置struts.xml(自定义的配置文件)
package cn.canyugan.action; public class HelloAction { public String execute() { System.out.println("hehe"); 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> <!-- name:给包起名防重名 namespace:给包增加一层或多层目录 extends: 继承一个其他包,目的是引入其他包的配置 abstract: 声明包是抽象的.意思就是让别的包来继承,声明为抽象的包中不能含有Action配置 --> <!-- 常量包 --> <package name="hello" namespace="/caorui" extends="struts-default" abstract="true/false"> <!-- name:为action类加上标识 访问时输入name就可以找到action class:action完整类名 method:处理的方法 --> <action name="HelloAction" class="cn.canyugan.action.HelloAction" method="execute"> <!-- name:返回结果的标识 找到结果路径 type:可以决定跳转到结果的方式 转发,重定向 --> <result name="success" type="dispatcher">/index.jsp</result> </action> </package> </struts>
配置到这是不是认为已经大功告成了呢?运行一下看看控制台,什么也没有,明显不科学嘛。我们需要了解,任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。 通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatcher,只要Web应用负责加载FilterDispatcher,FilterDispatcher将会加载Struts2框架。 因为Struts2将核心控制器设计成Filter,而不是一个普通Servlet。故为了让Web应用加载FilterDispatcher,只需要在web.xml文件中配置FilterDispatcher即可。 所以我们再来配置一下web.xml.
<!-- 重要: 配置struts2的核心过滤器 --> <!-- 注意: 配置struts2过滤器要放置到其他过滤器后面.保证其他过滤器可以执行 --> <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>