stuct2

Struts2Struts1关系

没有关系, Struts2 全新框架,引入WebWork很多技术和思想,Struts2保留Struts1类似开发流程 

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controler)来建立模型与视图的数据交互。

Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。

Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,

所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。


二:Struts 2 各种中文件详解:

1、web.xml文件

在web.xml 配置struts2 前端控制器 (Filter)
    <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>


3:struts.xml 


执行struts2过滤器后,读取struts2.xml配置文件,将请求分发

<struts>	
	<package name="default" namespace="/" extends="struts-default">
		<action name="go" class="com.king.struct.TestAction" method="say">
			<result name="hello">/Login.jsp</result>
		</action>
	</package>

</struts>

 注意:struts 2 读取到 struts.xml的内容后,以javabean形式存放在内存中,以后Struts 2对用户

的每一次请求处理将使用内存中的数据。


三:Struts2流程分析与工具配置

1、 运行流程

请求 ---- StrutsPrepareAndExecuteFilter核心控制器 ----- Interceptors拦截器(实现代码功能 ) ----- Actionexecuute ---结果页面 Result

* 拦截器 在 struts-default.xml定义

* 执行拦截器 是 defaultStack中引用拦截器

2:struts2配置文件加载顺序

struts2框架要能执行,必须先加载StrutsPrepareAndExecuteFilter.

在StrutsPrepareAndExecuteFilter的init方法中对Dispatcher进行了初始化.

在Dispatcher类中定义的init方法内就描述了struts2配置文件加载的顺序

init_DefaultProperties(); // [1]   ----------  org/apache/struts2/default.properties 

            init_TraditionalXmlConfigurations(); // [2]  --- struts-default.xml,struts-plugin.xml,struts.xml

            init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties 

            init_CustomConfigurationProviders(); // [5]  ----- 自定义配置提供

            init_FilterInitParameters() ; // [6] ----- web.xml 

            init_AliasStandardObjects() ; // [7] ---- Bean加载

3:关于Action的配置

1.<package>  作用:是用于声明一个包。用于管理action。

1.name     它用于声明一个包名,包名不能重复,也就是它是唯一的。 

2.namespace  它与action标签的name属性合并确定了一个唯一访问action的路径。

3.extends  它代表继承的包名。

4.abstrace 它可以取值为true/false,如果为true,代表这个包是用于被继承的。

2<action>  用于声明 一个action

1.name  就是action的一个名称,它是唯一的(在同包内) 它与package中的namespace确定了访问action的路径。

2.class Action类的全名

3.method 要访问的Action类中的方法的名称,方法无参数 ,返回值为String.

3.<result> 用于确定返回结果类型

1.name  它与action中的方法返回值做对比,确定跳转路径。


4:关于action配置其它细节:

a.关于默认值问题

<package namespace="默认值"> namespace的默认值是""

<action class="默认值"  method="默认值">

class的默认值是  com.opensymphony.xwork2.ActionSupport

method的默认值是  execute

<result  name="默认值"> name的默认值是 "success"  


b.关于访问action的路径问题

现在的action的配置是:

<package name="default" namespace="/" extends="struts-default">
					<action name="hello" class="cn.itcast.action.DefaultAction">
						<result>/hello.jsp</result>
					</action>
				</package>



当我们输入:

http://localhost:8080/struts2_test/a/b/c/hello 也访问到了action。

原因:struts2中的action被访问时,它会首先查找
1.namespace="/a/b/c"  action的name=hello  没有.
2.namespace="/a/b     action的name=hello  没有
3.namespace="/a"      action的name=hello  没有
4.namespace="/"        action的name=hello  查找到了.
 
如果最后也查找不到,会报404错误.

c.默认的action。

作用:处理其它action处理不了的路径。

<default-action-ref name="action的名称" />
配置了这个,当访问的路径,其它的action处理不了时,就会执行name指定的名称的action。

d.action的默认处理类

在action配置时,如果class不写。默认情况下是 com.opensymphony.xwork2.ActionSupport。

<default-class-ref class="cn.itcast.action.DefaultAction"/>
如果设置了,那么在当前包下,默认处理action请的的处理类就为class指定的类。
 

5:关于常量配置

default.properties 它声明了struts中的常量。

问题:人为设置常量,可以在哪些位置设置 ?
1.struts.xml(应用最多)
<constant name="常量名称" value="常量值"></constant>
2.struts.properties(基本不使用)

常用常量
struts.action.extension=action,, 
这个常量用于指定strus2框架默认拦截的后缀名.

<constant name="struts.i18n.encoding" value="UTF-8"/>  
相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码 

<constant name="struts.serve.static.browserCache" value="false"/> 
false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false

<constant name="struts.devMode" value="true" />  
提供详细报错页面,修改struts.xml后不需要重启服务器 (要求)

3.web.xml(了解)

常用常量
struts.action.extension=action,, 
这个常量用于指定strus2框架默认拦截的后缀名.

<constant name="struts.i18n.encoding" value="UTF-8"/>  
相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码 

<constant name="struts.serve.static.browserCache" value="false"/> 
false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false

<constant name="struts.devMode" value="true" />  
提供详细报错页面,修改struts.xml后不需要重启服务器 (要求)



6:struts.xml文件的分离:


目的:就是为了阅读方便。可以让一个模块一个配置文件,在struts.xml文件中通过
<include file="test.xml"/>导入其它的配置文件。




四:action详解

1.关于Action类的创建方式介绍:

1.创建一个POJO类.
简单的Java对象(Plain Old Java Objects)
指的是没有实现任何接口,没有继承任何父类(除了Object)

优点:无耦合。
缺点:所以工作都要自己实现。

2.创建一个类,实现Action接口.  com.opensymphony.xwork2.Action
优点:耦合低。提供了五种结果视图,定义了一个行为方法。
缺点:所以工作都要自己实现。



3.创建一个类,继承自ActionSupport类.  com.opensymphony.xwork2.ActionSupport (主要)
ActionSupport类实现了Action接口。
优点:表单校验、错误信息设置、读取国际化信息 三个功能都支持.
缺点:耦合度高。



2:关于action的访问:()

1.通过设置method的值,来确定访问action类中的哪一个方法.
<action name="book_add" class="cn.itcast.action.BookAction" method="add"></action>
当访问的是book_add,这时就会调用BookAction类中的add方法。
<action name="book_update" class="cn.itcast.action.BookAction" method="update"></action>
当访问的是book_update,这时就会调用BookAction类中的update方法。

2.使用通配符来简化配置
1.在struts.xml文件中
<action name="*_*" class="cn.itcast.action.{1}Action" method="{2}"></action>
2.在jsp页面上
book.jsp
<a href="${pageContext.request.contextPath}/Book_add">book add</a><br>
<a href="${pageContext.request.contextPath}/Book_update">book update</a><br>
<a href="${pageContext.request.contextPath}/Book_delete">book delete</a><br>
<a href="${pageContext.request.contextPath}/Book_search">book search</a><br>
product.jsp
<a href="${pageContext.request.contextPath}/Product_add">product add</a><br>
<a href="${pageContext.request.contextPath}/Product_update">product update</a><br>
<a href="${pageContext.request.contextPath}/Product_delete">product delete</a><br>
<a href="${pageContext.request.contextPath}/Product_search">product search</a><br>

当访问book add时,这时的路径是  Book_add,那么对于struts.xml文件中.
第一个星就是   Book
第二个星就是   add
对于{1}Action---->BookAction
对于method={2}--->method=add

使用通配符来配置注意事项:
1.必须定义一个统一的命名规范。
2.不建议使用过多的通配符,阅读不方便。


3.动态方法调用 (了解)

在struts.xml文件中
<action name="book" class="cn.itcast.action.BookAction"></action>
访问时路径: http://localhost/struts2_day01_2/book!add
就访问到了BookAction类中的add方法。

对于book!add 这就是动态方法调用。

注意:struts2框架支持动态方法调用,是因为在default.properties配置文件中设置了
                 动态方法调用为true.


struts.enable.DynamicMethodInvocation = true



4.在struts2中获取servlet api有三种方式:

1.获取一个ActionContext对象。
ActionContext context=ActionContext.getContext();

2.注入方式获取(这种方式是真正的获取到了servlet api)(了解即可)

3.通过ServletActionContext获取. (主要)
在ServletActionContext中方法都是static。
getRequest();
getResposne();
getPageContext();


五:Result结果类型

<result>标签
1.name  与action中的method的返回值匹配,进行跳转.

2.type  作用:是用于定义跳转方式
dispatcher:它代表的是请求转发,也是默认值。它一般用于从action跳转到页面。
chain:它也相当于请求转发。它一般情况下用于从一个action跳转到另一个action。

redirect:它代表的是重定向  它一般用于从action跳转到页面
redirectAction: 它代表的是重定向  它一般用于从action跳转另一个action。

stream:代表的是服务器端返回的是一个流,一般用于下载。


3:global-result里可以共用的结果集,每个action中都可以使用这个result

<package name="user" namespace="/user" extends="struts-default">
 4         
 5         <!-- 在这个package里可以共用的结果集,每个action中都可以使用这个result -->
 6         <global-results>
 7             <result name="mainpage">/main.jsp</result>
 8         </global-results>
 9         
10         <action name="index">
11             <result>/index.jsp</result>
12         </action>
13         
14         <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
15             <result>/user_success.jsp</result>
16             <result name="error">/user_error.jsp</result>
17         </action>        
18     </package>











































(主要)
itcast
itcast
itcast
it
itc
itca
itcas
itcas
itcast
itcast
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值