struts2框架教程,Struts2中如何配置struts、xml?
struts2框架教程,Struts2中如何配置struts、xml?详细介绍
本文目录一览: struts2的工作流程?
在Struts2框架中的处理大概分为以下几个步骤:
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及ActionMapper 。
扩展资料:
应用流程注解
当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。
经过Other filters(SiteMesh ,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。
ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面。
拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。
参考资料:百度百科-Struts 2
Struts2中如何配置struts、xml?
Struts2中在配置struts、xml时,解压后找到相应途径,选择配置后一直next即可。
一、办法:
1、在官网下载最新版的Struts2.从图中可以看出,即可以分开下载,又可以一次全部下载。我选择全部下载。
2、下载后将压缩包解压到磁盘根目录。
3、进入struts-2.3.16.1文件,可以看到包含如下文件夹。
4、lib文件包含了上百个库文件,但大多数是可选的,有些库是插件,用于和其他框架的整合。
我们开发时不必全部用到这些库文件,我们可根据apps文件下的模板工程查看需要哪些jar包。进入apps文件看到struts2自带了5个工程模板。
5、此时,右侧的按钮被点亮。点击“Add External JARS?”按钮,添加用户库所需的库文件;选择添加刚才解压的struts2-blank-2.war下WEB-INF/lib中的所有jar包。
二、Struts2简介:
1、Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
2、其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
3、虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
三、应用流程注解:
1、当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。
2、经过Other filters(SiteMesh ,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
3、FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。
4、ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面。
5、拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。
简述开发一个实现STRUTS2框架的程序一般经过什么具体步骤
jsp或者前台页面请求action,之前可以加过滤器,action请求service,service请求dao,dao操作数据库返回的值传给service,service再传给action,页面根据需要是遍历结果集,还是一个跳转,或者其他。
(1)导入struts2的jar
(2)配置web.xml
(3)写一个action 继承actionSupport
(4)在jsp上写一个form访问action。
(5)配置struts.xml 把action配置上
Eclipse怎样配置struts2
1,到官网上去下载struts2的所有资源包struts-2.3.24-all.zip
2,解压这个zip包,然后到apps目录下再次解压struts2-blank.war空白模版工程文件
3,进入到struts2-blank\WEB-INF 目录下
4,lib里是你需要的jar包,复制到你自己web项目的lib里去。web.xml里有struts2的过滤器,复制到你自己web项目的web.xml里,然后进入classes目录,里面有一个文件struts.xml,这个是struts2的配置文件,把它复制到你自己web项目的src下即可,然后删除此文件中package中的所有内容(注意package不能删)和include节点。至此,struts2框架搭建完毕。
工具:
Eclipse
struts2
配置方法如下:
新建WEB工程并按如下配置
在工程上右键,选择Build Path->Add Libraries…
选择“User Libraries”
点击“Finish”
打开web.xml;
打开struts2-blank-2.war下WEB-INF/web.xml文件
将上图中框起来的代码复制到工程web.xml中。
将struts2中apps/struts2-blank/WEB-INF/src/java下的struts.xml复制到MyWeb工程中src中
以上就是配置struts2的过程,可以进行开发了。
如何在eclipse中搭建struts2环境
第一步:打开eclipse,选择Help/Softwareupdates/FindandInstall第二步:选择"Softwareupdates":第三步:点击”add“第四步:选择SelectAlveoleStudioStruts2EditorFeature.第五步:选择install,等待几分钟第六步:重启eclipse生效。
配置步骤:
1、下载并解压struts2。
2、打开Eclipse,建立一个web项目"Text"。
3、在struts2文件包中,找到struts-2.3.12\apps\struts2-blank.war文件,并将其用解压软件解压出来,例如将其解压到桌面的“新建文件夹”中。
4、在解压出的文件中,找到:新建文件夹\WEB-INF\lib\ 下的所有jar包,将其中所有jar包复制到eclipse所建立的Text项目 -- WebContent -- WEB-INF --lib,切记,jar包全部导入到该lib下,不要导错。
5、在解压出的文件中,找到:新建文件夹\WEB-INF\src\java\struts.xml,将该文件复制到第二步eclipse中新建的web项目Text下的src中
6、eclipse的Text项目中,打开struts.xml文件,进行修改,只保留如下内容,修改内容用文字描述不方便
7、在解压出的文件中,找到:新建文件夹\WEB-INF\web.xml ,将该xml文件中的filter内容复制到Eclipse中的web.xml文件中相应位置。
8、eclipse的Text项目中,在WebContent下建立hello.jsp文件,并输入“HelloWorld!!”,保存。
9、右键单击Text项目,选择“Run As”--"Run on Server",运行该项目:
10弹出网站后,会显示404的错误,此时,在地址栏后面输入“hello”或者"hello.action",回车后,即可弹出“HelloWorld!!”。
struts2的主要的具体工作流程
Struts2:
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等
(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器
(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.
(6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.
(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)
(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器.
(9) 最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.
struts2的主要工作流程是这样的:
首先有一个http请求,会首先进入ActionContextCleanup(清空值栈等,但会留下自己的,比如session,Attribute等),其作用见括号中的
其次,走一些过滤器,filter,然后进入闻名的struts2的总控FilterDispatcher
穿过上述几层后,会进入ActionMapper,来判断此请求是否需要struts2处理,如果需要,那么由ActionProxy来接管,通过配置管理我们可以找到我们的struts.xml,然后进入真正做事的Action
Invocation,依次穿过我们的拦截器,进入action,从而根据返回的result选择我们要的页面,在拦截器的前半部分去值栈中取值通过标签展示在页面上,最后生成response返回,具体的图如下
此图是我自己总结的,颜色比较多的那个图是struts2的官方图片,只是加了注释
struts2说的应用一些,举例,就像我们图中的,当你点击新增按钮后,会触发一个action给web服务器,服务器接受请求,给对应的web容器,根据上下文可以找到我们的webapp应用,找到总的配置文件web.xml,根据里面的配置来判断action谁去处理,找到filter,反射创建类,回调init,读取struts2的配置文件struts.xml,根据命名空间等找到action,反射创建action类实例,回到execute方法,找到对应的result转向下一个页面,其中虚线框中为右图的一个简写
struts2的处理流程?
1、客户端向Servlet容器(如Tomcat)提交一个请求
2、请求经过一系列过滤器(如ActionContextCleanUp (已被JVM和WEB容器废弃的空对象) 过滤器等)
3、核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy (备注:JSP请求无需调用Action)
5、ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需调用的Action类
6、ActionProxy创建一个ActionInvocation的实例,(ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的)
7、ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器
8、Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
9、拦截器被再次执行
10、过滤器被再次执行
如何使用Struts2框架发布webService
使用Struts2框架创建一个web工程,引入webservice所需的jar包,我用的是cxf的jar包,
关于Struts2和webService的整合核心是对于StrutsPrepareAndExecuteFilter这个类的修改,使访问webservice的地址能够继续访问servlet.
web.xml的修改。
struts2
com.synjones.filter.ExtendStrutsFilter
struts2
/*
CXF
org.apache.cxf.transport.servlet.CXFServlet
<servlet-mapping
CXF
/ws/*
自定义过滤器StrutsPrepareAndExecuteFilter
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public
class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter{
public void doFilter(ServletRequest req, ServletResponse res,FilterChain
chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req; //不过滤的url,可以自行添加
if (request.getRequestURI().contains("/ws")) {
//System.out.println("使用自定义的过滤器");
chain.doFilter(req, res);
}else{
//System.out.println("使用默认的过滤器");
super.doFilter(request, res, chain);
}
}
}
其它的设置按照正常的webservice配置
</servlet-mapping
教你如何配置Struts2 web.xml文件
Struts 的基本配置
前面大致了解了Struts 框架的基本内容 但这些基本内容都必须建立在Struts 的配置文件基础之上 这些配置文件的配置信息也是Struts 应用的核心部分
配置Struts web xml文件
任何MVC框架都需要与Web应用整合 这就不得不借助于Struts web xml文件 只有配置在Struts web xml文件中Servlet才会被应用加载
通常 所有的MVC框架都需要Web应用加载一个核心控制器 对于Struts 框架而言 需要加载FilterDispatcher 只要Web应用负责加载FilterDispatcher FilterDispatcher将会加载应用的Struts 框架
因为Struts 将核心控制器设计成Filter 而不是一个普通Servlet 故为了让Web应用加载FilterDispacher 只需要在Struts web xml文件中配置FilterDispatcher即可
配置FilterDispatcher的代码片段如下
< ! 配置Struts 核心Filter的名字 >struts< /FILTER NAME> < FILTER CLASS> apache struts dispatcher FilterDispatcher < /FILTER CLASS>< INIT PARAM>< ! 配置Struts 框架默认加载的Action包结构 >< PARAM NAME>actionPackages< /PARAM NAME>< PARAM VALUE> apache struts showcase person< /PARAM VALUE>< /INIT PARAM>< ! 配置Struts 框架的配置提供者类 >< INIT PARAM>< PARAM NAME>configProviders < /PARAM NAME>< PARAM VALUE>lee MyConfigurationProvider< /PARAM VALUE>< /INIT PARAM>< /FILTER>
正如上面看到的 当配置Struts 的FilterDispatcher类时 可以指定一系列的初始化参数 为该Filter配置初始化参数时 其中有 个初始化参数有特殊意义
config 该参数的值是一个以英文逗号( )隔开的字符串 每个字符串都是一个XML配置文件的位置 Struts 框架将自动加载该属性指定的系列配置文件
actionPackages 该参数的值也是一个以英文逗号( )隔开的字符串 每个字符串都是一个包空间 Struts 框架将扫描这些包空间下的Action类
configProviders 如果用户需要实现自己的ConfigurationProvider类 用户可以提供一个或多个实现了ConfigurationProvider接口的类 然后将这些类的类名设置成该属性的值 多个类名之间以英文逗号( )隔开
除此之外 还可在此处配置Struts 常量 每个 元素配置一个Struts 常量 其中
子元素指定了常量name 而
子元素指定了常量value
提示 关于Struts 常量的讲解 请参阅本书的 节
在Struts web xml文件中配置了该Filter 还需要配置该Filter拦截的URL 通常 我们让该Filter拦截所有的用户请求 因此使用通配符来配置该Filter拦截的URL
下面是配置该Filter拦截URL的配置片段
< ! 配置Filter拦截的URL >< FILTER MAPPING>< ! 配置Struts 的核心FilterDispatcher拦截所有用户请求 >< FILTER NAME>struts< /FILTER NAME>/*< /URL PATTERN>< /FILTER MAPPING>
配置了Struts 的核心FilterDispatcher后 基本完成了Struts 在web xml文件中的配置
如果Web应用使用了Servlet 以前的规范 因为Web应用不会自动加载Struts 框架的标签文件 因此必须在Struts web xml文件中配置加载Struts 标签库
配置加载Struts 标签库的配置片段如下
< ! 配置Struts 标签库的URI >/s< /TAGLIB URI>< ! 指定Struts 标签库定义文件的位置 >< TAGLIB LOCATION>/WEB INF/struts tags tld< /TAGLIB LOCATION>< /TAGLIB>
在上面配置片段中 指定了Struts 标签库配置文件物理位置 /WEB INF/struts tags tld 因此我们必须手动复制Struts 的标签库定义文件 将该文件放置在Web应用的WEB INF路径下
如果Web应用使用Servlet 以上的规范 则无需在Struts web xml文件中配置标签库定义 因为Servlet 规范会自动加载标签库定义文件
提示 Struts 的标签库定义文件包含在struts core jar文件里 在struts core jar文件的META INF路径下 包含了一个struts tag tld文件 这个文件就是Struts 的标签库定义文件 Servlet 规范会自动加载该标签库文件 对于Servlet 以上的规范 Web应用自动加载该标签库定义文件 加载struts tag tld标签库定义文件时 该文件的开始部分包含如下代码片段
< TAGLIB>< ! 定义标签库的版本 >< TLIB VERSION> < /TLIB VERSION>< ! 定义标签库所需的JSP版 >< JSP VERSION> < /JSP VERSION>< SHORT NAME>s< /SHORT NAME> /struts tags< /URI> < /TAGLIB>
lishixinzhi/Article/program/Java/ky/201311/28777