三大框架怎么能落下Struts2呢?Struts2明确了页面设计人员、程序设计人员以及架构设计人员之间的分工。
它试图在不同的角度上提供网页设计人员、应用程序设计人员、架构设计人员解决方案,让不同技术的人员可以彼此合作又不互相干扰。从架构设计人员的角度来看,他只需做出一些配置与定义,定义后端bean与前端页面的关系。从网页设计人员的角度来看,Struts提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份。从应用程序设计人员的角度来看,它只需要按架构师设计人员的定义,完成后端bean的实现即可。3个角色的知识领域原则上可以互不干扰,根据您的角色,您只要了解其中一个知识领域,就可以运用Struts,其它角色的知识领域您可以不用了解太多细节。
客户端提起一个HttpServletRequest请求,这个请求被提交到一些列的过滤器,由过滤器决定是否要调用某个action来处理这个请求,如果需要过滤器就会把这个请求提交给ActionProxy,ActionProxy通过struts.xml询问框架的配置文件,找到需要调用的Action类.ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。
Struts2通过setter和getter的方式实现和页面的数据交换,客户输入的信息先是传给actionServlet,然后由struts的servlet引擎根据配置文件,调用相应的actionBean,再通过配置文件将返回值返回给前端。
Struts2的实现过程:
1、添加jar到lib
2.web.xml,配置struts引擎。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name>Struts 2 Fileupload</display-name>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list >
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
3.添加struts.xml到src根目录,在struts.xml文件中添加一个actionbean
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="demo_struts2" extends="struts-default" >
<!-- 定义login的Action,该Action的实现类为demo.UserLoginAction类 -->
<action name ="fileUpload" class ="com.leec.demo_strus2.action.FileUploadAction">
<interceptor-ref name ="fileUploadStack">
<param name ="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg
</param >
</interceptor-ref>
<interceptor-ref name ="defaultStack"/>
<result name ="success"> /ShowUpload.jsp </result>
<result name ="input"> /FileUpload.jsp </result>
</action >
<action name="UserLogin" class="com.leec.demo_strus2.action.UserAction" method="login" >
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/query.jsp</result>
<result name="input">/index.jsp</result>
</action>
<!-- 查询全部 -->
<action name="User_query" class="com.leec.demo_strus2.action.UserAction" method="query">
<result name="success" >query.jsp</result>
</action>
<!-- 增 -->
<action name="User_regist" class="com.leec.demo_strus2.action.UserAction" method="regist">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/regist_error.jsp</result>
<result name="success">/query.jsp</result>
<result name="input">/add.jsp</result>
</action>
<!-- 删 -->
<action name="User_delete" class="com.leec.demo_strus2.action.UserAction" method="delete">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="success">/query.jsp</result>
<result name="input">/query.jsp</result>
</action>
<!-- 改 -->
<action name="User_change" class="com.leec.demo_strus2.action.UserAction" method="change">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="success">/query.jsp</result>
<result name="input">/change.jsp</result>
</action>
<action name="User_change1" class="com.leec.demo_strus2.action.UserAction" method="change1">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="input">/change.jsp</result>
</action>
</package>
</struts>