Struts2 笔记(1) Struts2引入/Action

1.strust2框架来历简介:

WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。(同时也是一个成熟的基于Web的MVC框架)

MVC:Model View Controller, model是模型,view是视图,controller是控制器,是一种框架模式.

随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架

注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同

2.web项目中的三层架构(和MVC是俩个完全不同的架构)

1.表示层

Struts2框架就是工作在这个地方

2.业务逻辑层

service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断

3.数据访问层

dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用

在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码.

注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.

3.使用struts2框架的好处(为什么要使用struts2框架)

减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.

4.struts2框架引入到web项目中

首先使用Eclipse/MyEclipse中建一个web项目.

1.把struts2相关jar包引入到项目中

2.把struts2的配置文件直接放到src下面,名字要叫做struts.xml.(运行时配置文件会被框架自动读取).

注意:如果struts.xml文件中不能自动提示出标签,把相应的dtd文件配置上去.

3.在web.xml文件中配置struts2框架的过滤器.

这个过滤器的作用:拦截struts2框架中的action.注意:如果不配置这个filter,struts2框架就不能够工作.

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

5.struts2框架中的Action

struts2框架中有一种java类叫做Action,这种说法就像J2EE项目中有一种java类加Servlet.(人们的生活中有一种人的职业叫警察)struts2框架底层还是封装了Servlet的相关内容而实现出来的.只不过struts2框架除了servlet的功能以外还扩展出了很多其他的功能,同时还大大简化了以前在servlet中繁琐的操作.

在struts2框架中有一种类就是用代替以前我们在web项目中所使用到的servlet,那么这种类,在struts2框架中被称为Action.所以Action其实也是一种java类,比servlet功能更加强大的java类,同时还比servlet中的操作简单.

6.为什么Action会有比servlet强大的功能以及简洁的操作

因为我们在web.xml文件中配置了struts2框架中专门的过滤器,用作拦截访问action的请求,拦截住之后,struts2框架就可以给Action添加很多丰富的功能了.

7.如何写一个struts2框架中的Action

三种方式:

1.只需要类中有一个固定的方法:

public String execute(){

return “…”

}

不需要实现或者继承任何接口或者父类。

注意: execute方法一定要返回String类型的对象,每一个字符串都可以对应一个跳转的页面.(字符串是可以自己随便定义的,字符串对应哪一个跳转的页面也是自己定义,在struts.xml文件中定义)

2.实现指定的一个接口:com.opensymphony.xwork2.Action

这个接口中只有一个抽象方法 public abstract String execute()throws Exception;

同时还有5个String类型的静态属性:ERROR SUCCESS INPUT NONE LOGIN

public static final String SUCCESS = “success”;

public static final String NONE = “none”;

public static final String ERROR = “error”;

public static final String INPUT = “input”;

public static final String LOGIN = “login”;

3.继承一个指定的父类:com.opensymphony.xwork2.ActionSupport

注意:这种是我们之后一直使用的方式。

8.像之前写完servlet类一样,写完action类后需要在struts.xml文件中进行配置.

在struts.xml配置action的目的和作用:通知struts2框架我们写的这个类是一个Action,将来struts2框架中要给这个类创建对象,调用方法以及这个Action加入更多丰富的功能。

例如:

    <package name="test" extends="struts-default" namespace="/test">
        <action name="MyTest">
            <result>/index.jsp</result>
        </action>
        <action name="test1" class="com.briup.web.action.ActionTest1">
            <result name="myFirstAction">/success.jsp</result>
            <result name="myError">/error.jsp</result>
        </action>
    </package>
1)配置中<package>标签及其属性的介绍:

<package name="test" extends="struts-default" namespace="/test">
<package>:一个struts.xml文件中可以配置多个<package>标签,一个<package>标签里面可以配置多个<action>标签,一个<action>标签里面可以配置多个<result>
name="test"
    表示给当前package起一个名字为test
    作用:1.唯一标识当前这个package。
     2.方便package与package之间通过这个名字来实现继承的关系.(像类和类之间的继承一样,要通过父类的名字来继承)
extends="struts-default"
    表示当前这个package继承了另外一个名字叫做struts-default的package,这个package在struts2的核心jar包中的struts-default.xml文件中定义的,里面定义了很默认的配置.
    注意:我们在struts2中定义的所有package,都会是直接或者间接的继承了struts-default这个package.(像java中所有类都是直接或间接的继承了Object类一样)

namespace="/test"
    表示当前package的命名空间为/test,将来这个package里面的所有的action在被访问的时候,路径里面都要加上这个命名空间.
2)配置中<action>标签属性及其子标签介绍:
name="test1"
    表示当前配置这个action的名字为test1,这个名字是随便起的,可以和action类的名字相同或者不同.同时将来浏览器中的地址栏里面就是要出现这个名字来访问当前这个action类
class=".."
    表示当前配置的action对应的是哪一个java类,我们可以配置一个action,但是这个action可以没有对应任何java类。就像上面配置的MyTest的例子.
<result>
    标签表示将来这个action访问完了之后有哪些跳转.
    <result name="myError">/error.jsp</result> 表示当前这个action如果返回的字符串是myError,就那么页面就跳转到/error.jsp中
    注意:每一个action被访问完之后都会有一个字符串类型的返回值,即使访问一个每一个任何java类对应action的时候,这个action也会默认返回字符串:success
    <result name="success">/index.jsp</result>  等价于  <result>/index.jsp</result>
     <result>标签中的name属性默认值就是success

9.特殊的action配置:使用通配符来配置

使用前提:原本需要配送的多个action名字或者类的名字是有一定规律的.

例如:原来需要配置这样三个action:
<action name="testCh1" class="com.briup.web.action.ActionTestCh1">
    <result>/successCh1.jsp</result>
    <result name="error">/errorCh1.jsp</result>
</action>

<action name="testCh2" class="com.briup.web.action.ActionTestCh2">
    <result>/successCh2.jsp</result>
    <result name="error">/errorCh2.jsp</result>
</action>

<action name="testCh3" class="com.briup.web.action.ActionTestCh3">
    <result>/successCh3.jsp</result>
    <result name="error">/errorCh3.jsp</result>
</action>

   这时候,我们就可以使用通配符配置一个action来代替这个三个action:
<action name="test*" class="com.briup.web.action.ActionTest{1}">
    <result>/success{1}.jsp</result>
    <result name="error">/error{1}.jsp</result>
</action>

{1}代表的时候前面name属性中所出现的第一个号如果有第二个号,可以用{2}来表示。

test*就是将来在浏览器中输入的这个action名字,如果输入的时候test1,那么这个号就代表1,如果输入的是testlogin,那么这个号就是代表login.

注意:如果原本需要配置的多个action没有非常明显的规律,那么就不要用这种方式来配置了.

10.action的特点及其访问

特点:

servlet是线程不安全的,因为servlet是单例。

struts2框架中的action是线程安全的,因为每次访问都会创建一个新的Action对象.所有在action里面可以随便的定义成员变量(只有成员变量才有线程安全的问题)

访问:

默认情况下,访问action的时候,使用namespace/actionName.action或者namespace/actionName就可以访问的到.

例如:

 <package name="test" extends="struts-default" namespace="/test">
        <action name="test1" class="类A">
        <result>/index.jsp</result>
        </action>
    </package>
 http://ip地址:端口号/项目名字/test/test1.action
 或者
 http://ip地址:端口号/项目名字/test/test1
 访问成功页面就会跳转到index.jsp页面了

但是由于不加任何后缀名也可以访问到这个action,这样容易和其他资源的访问产生冲突,
比如servlet的访问(本来是访问项目的servlet的,但是Struts2框架却当成了这是访问action的请求来处理).
所以我们需要配置一下,把action访问规定成,只能使用后缀名.action或者是.do 或者是其他形式来访问.

//可以使用.action或者.do来访问
<constant name="struts.action.extension" value="action,do"></constant>
//只能使用.action
<constant name="struts.action.extension" value="action"></constant>

11.访问action的时候,action中方法的调用

1.默认情况下,访问action的时候会调用action中的execute方法,这个方法执行完返回一个字符串,然后根据字符串进行跳转.

2.可以在<action>标签里面加上一个method属性,来指明将来访问这个action的时候会调用哪一个方法.
  例如:
<action name="test" class=".." method="login">

注意:俩个不同名字的action可以对应的是相同的一个java类.
    <action name="test1" class="类A" method="login">
    <action name="test2" class="类A" method="register">
    这样使用test1和test2俩个不同名字的action就是访问到同一个类中的俩个不同的方法:login和regist方法.但是login方法和register方法必须和execute方法类似的,都是返回String的值.

3.地址栏中动态指定要调用的方法
    例如:
<package name="test" extends="struts-default" namespace="/test">
   <action name="MyTest" class="类A">
    <result>/index.jsp</result>
       </action>
    </package>

类A里面有俩个方法:register login

默认情况下地址栏中通过MyTest.action来访问这个action会访问到它的execute方法,同时我们还可以在地址栏中动态的指定要访问的方法:
MyTest!login.action  这样就能访问到名字为MyTest的action对应类A中的login方法了.
    http://ip地址:端口号/项目名字/test/MyTest!login.action
时间: 2024-08-13 04:45:56

Struts2 笔记(1) Struts2引入/Action的相关文章

Struts2笔记02——Struts2 概述(转)

Struts2是基于MVC设计模式的一种流行.成熟的Web应用框架. 它不仅仅是Struts1的下一个版本,更是对Structs架构的一个完整重写. 而WebWork则是以Struts框架为基础的一个框架,它的目标是提供一个基于Struts的增强.改进框架,使开发人员更轻松地进行Web开发. 在一段时间后,Webwork框架和Struts社区携手共同创建了著名的Struts2框架. Struts2 框架特性 POJO forms and POJO actions - Struts2已经完成了作为

Struts2笔记——2.Action的实现、配置

实现Action Struts2中,action负责对用户请求的处理,因此它是整个应用的控制器,也是整个应用的核心.而对开发者来说,他们需要提供大量的action类.相对于struts1而言,struts2的浸入性更低,因为它的action无需继承任何父类或者接口,仅仅是一个普通的POJO(但是应该包括一个无参数的execute方法).struts2通常直接使用action来封装http请求参数(可以理解为表单中的参数,如username,password等),因此在对应的action类中,应该

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

Struts2笔记1

一.简介 1.作用于web层:Struts2是一种基于MVC模式的轻量级Web框架; 2.各文件夹简介: ?    apps:该文件夹存用于存放官方提供的Struts2示例程序,这些程序可以作为学习者的学习资料,可为学习者提供很好的参照.各示例均为war文件,可以通过zip方式进行解压. ?    docs:该文件夹用于存放官方提供的Struts2文档,包括Struts2的快速入门.Struts2的文档,以及API文档等内容. ?    lib:该文件夹用于存放Struts2的核心类库,以及St

Struts2 笔记(2) --Struts传值/跳转/拦截器/注解等

1.action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如: 通过页面要把id=1 name=tom age=20这三个参数传给action 1.action里面定义三个成员变量id name age,这个三个变量的名字一定要和所传变量的名字一致. 2.提供get/set方法 3.将来页面把这三个参数传过来的时候,struts2框架会自动的帮我们把这个三个参数值放action中的三个属性里面.(同时还做了类型的转换) 注意:这个工作其实是由defaultStack这个拦截器栈里面

Struts2笔记(学struts2只需要这一篇文章)

1.struts2框架引入到web项目中      1.把struts2相关jar包引入到项目中 2.把struts2的配置文件直接放到src下面,名字要叫做struts.xml.(运行时配置文件会被框架自动读取).      注意:如果struts.xml文件中不能自动提示标签,把相应的dtd文件配置上去. 3.在web.xml文件中配置struts2框架的过滤器.     这个过滤器的作用:拦截struts2框架中的action.     注意:如果不配置这个filter,struts2框架

【Struts2】★☆之struts2对Action提交方法进行验证

[Struts2]★☆之struts2对Action提交方法进行验证 在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等.但是这样做,不好之处就是我们可以通过人为的将开发者的验证js注掉,这样就导致验证失败,对后台安全性是一个很大的威胁,在采用struts2进行开发时,我们可以采用框架内置的校验器,对我们的Action进行校验.本文所讲诉的就是如何使用重写struts2中的ActionSupport里面的validate方法对输入值进行校验. ok

struts2之day01——06Struts2的action方法访问

struts2之day01--06Struts2的action方法访问                           (重点) 一.Action的方法访问介绍 1.有三种方法实现 第一种  使用action标签的method属性,在这个属性里面写执行的action的方法: 第二种  使用通配符方式实现: 第三种  动态访问实现(基本不用) 2.演示错误 (1)如果action方法有返回值,在配置文件中没有配置,出现错误 (2)在action里面的方法有返回值,如果有返回值时候类型必须是St

Struts2笔记——6.国际化

Struts2的国际化是建立在java的国际化基础上的.通过提供不同国家或者语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再获取该资源文件中的指定key对应的消息.Struts2框架对这一过程进行了进一步的封装,简化了应用程序的国际化.它可以为jsp,Action,全局范围提供不同的国际化资源,因此维护的时候可以分开维护.Struts2的国际化可以按照以下步骤进行:加载国际化资源文件.输出国际化. action范围.包范围的国际化资源会被系统自动加载