struts1是最早的一种基于MVC模式的应用框架;struts2是在struts1的基础上融合了xwork的功能.因此,可以说:struts2=struts1+xwork.struts本质上相当于是servlet,struts其实就是对servlet的封装,从而提高开发效率.管他三七二十一,先写一个Hello程序吧!
0)去Apache官网下载struts2的zip包,本文使用的struts-2.3.4.1版本.
1)创建一个web项目,引入struts的相关jar包.解压刚刚下载的zip包,在lib目录下找到以下这几个核心的jar(如下图),导入web项目中.
1,2jar包:文件上传相关包
3jar包 :struts对java.lang包的扩展
4jar包:struts的标签模板库jar文件
5jar包:struts对字节码的处理相关jar包
6jar包:Ognl表达式功能支持包
最后两个分别是struts2核心功能包,Xwork核心包
需要注意的是,在struts2的lib目录里有很多个jar包,远不止这8个,直接全部导入是不科学的.如果自己不想找这8个常用jar,就去apps目录下的struts2-blank.war里面拷贝现成web示例里的jar包,需要解压struts2-blank.war哦.在里面的lib目录里有13个jar包,直接拷入自己的项目中即可.(多了五个,无所谓了).
2)在项目的web.xml中,引入struts的核心过滤器,配置几行代码就搞定了.(可参考前面说的struts2-blank.war里面的web.xml文件).
<!-- 引入struts2核心过滤器 --> <filter> <filter-name>struts2</filter-name> <!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter --> <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>3)开发action. package com.bighuan.a_action; import com.opensymphony.xwork2.ActionSupport; /** * 开发action:处理请求,继承ActionSupport的叫做动作类.action类是用来替代servlet的. * action类中业务方法必须返回一个String,方法不能有参数,参考execute()方法 * @author bighuan * */ public class HelloAction extends ActionSupport { /** * 处理请求 */ @Override public String execute() throws Exception { System.out.println("访问到了action,正在处理请求ing"); System.out.println("调用service处理请求"); return "success"; } } 4)配置action,在src下新建一个struts.xml文件,其实也可以参考前面说的那个struts2-blank.war下的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.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!-- 配置action:通过hello找到Action的全路径,然后通过相应类(HelloAction)找到相应类中的方法,通过返回值确定接下来是否跳转页面 --> <action name="hello" class="com.bighuan.a_action.HelloAction" method="execute"> <!-- type默认就是dispatcher 跳转的结果类型 dispatcher 转发,不指定默认为转发 redirect 重定向 redirectAction 重定向到action资源 stream (文件下载的时候用) --> <result name="success" type="dispatcher">/success.jsp</result> </action> </package> <!-- Add packages here --> </struts> 5)发布到tomcat,通过路径(http://localhost:8080/工程名/hello)访问就打印出了HelloAction中那个execute()方法里的两行内容,并且跳转到success.jsp页面.过程很简单,但写起来就很多东西了...所以略了,写博客主要是为了加深自己的印象...1)请求数据自动封装(这功能好啊,以前在servlet封装数据好烦了)
2)文件上传的功能
3)对国际化功能的简化
4)数据校验功能
.....
还有好多
服务器启动: 1) 加载项目web.xml 2.)创建Struts核心过滤器对象, 执行filter
-->init() struts-default.xml, 核心功能的初始化 struts-plugin.xml, struts相关插件 struts.xml 用户编写的配置文件 访问: 3) 用户访问Action, 服务器根据访问路径名称,找对应的aciton配置, 创建action对象 4) 执行默认拦截器栈中定义的18个拦截器 5) 执行action的业务处理方法
目录:struts2-core-2.3.4.1.jar/ struts-default.xml 内容: 1) bean节点指定struts在运行的时候创建的对象类型 2)指定struts-default包 【用户写的package(struts.xml)一样要继承此包 】 package struts-default 包中定义了: a,定义了所有的拦截器 定义了32个拦截器! 为了拦截器引用方便,可以通过定义栈的方式引用拦截器,此时如果引用了栈,栈中的拦截器都会被引用! defaultStack:默认的栈,其中定义默认要执行的18个拦截器! b. 默认执行的拦截器栈、默认执行的action <default-interceptor-ref name="defaultStack"/> <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/> <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 3)拦截器 拦截器功能与servlet中的过滤器功能类似。 区别: 共同点: 都拦截资源! 区别: 过滤器,拦截器所有资源都可以; (/index.jsp/servlet/img/css/js) 拦截器,只拦截action请求。 拦截器是struts的概念,只能在struts中用。 过滤器是servlet的概念,可以在struts项目、servlet项目用。 4)拦截器什么时候执行? (访问/启动) 先执行action类创建,先执行拦截器? a, 用户访问时候按顺序执行18个拦截器; b, 先执行Action类的创建,再执行拦截器; 最后拦截器执行完,再执行业务方法
希望自己坚持下去,好好搞技术!