美文网首页
struts2入门

struts2入门

作者: 取名废同学 | 来源:发表于2018-07-30 10:46 被阅读0次

    2020.11.10修改:这东西可以不学,完全用不上。


    Struts2是一种基于MVC的轻量级的web应用框架。

    一、背景:struts1和webwork结合,产生struts2,所以struts2本质上是webwork2.3,与struts原理不是很有关联,但借助了struts1的名声。

    sturts2的基本组成和关系:

    二、使用配置: MyEclipse10搭建Strust2开发环境 - CSDN博客

    在myeclipse配置struts2.x:

    先建一个java web项目 右键 confiure facet-->选install apache struts2.x,一直next,去掉自动添加的库

    完成后,把之前下载的struts2.x的安装包中lib中的所有jar文件拷到webRoot下的lib下,配置一下struts的配置文件。

    之前下载的struts2: Download a Release

    下载这个:

    lib文件中有很多jar,但必要的有11个:(用的是struts2-5.16版本)

    并且2.5版本在web.xml自动生成里要去掉ng

    一个简单实例:(基本配置如上)

    jar在lib中

    HelloWorldAction:(model)

    index.xml(view):

    自动生成的

    web.xml:一般是自动生成,注意去掉ng(去掉了中间.ng文件空间名,原因是在整合xwork的时候,同时简化了不必要的包名空间。)

    struts.xml:

    三、一些重要的配置文件:

    web.xmlstruts.xmlstruts-config.xml以及struts.properties

    1、需要加载StrutsPrepareAndExecuteFilter过滤器,该过滤器可分为两个部分strutsparepare和execute,在不同阶段进行拦截,在web.xml定义过滤器。

    2、在struts.xml中,主要负责管理应用中的action映射,以及给action包含的result定义等。

    配置文件可以有很多package,但包名统一、唯一,可以不写包名,就一个

    <struts>元素下面可以有<bean>、<constant>、<include>、<package>四种子元素

    <package>元素:定义包配置,每个<package>元素定义了一个包配置。其中的几个属性(1)name:必须属性,指定包名(一般是default);(2)extends:可选,继承其他包(一般是struts-default);(3)namespace:可选,定义该包命名空间;(4)abstract:可选,指定该包是否为抽象包,抽象包中不能包含action定义

    3、在struts.xml中命名的action name,之后在jsp中提交表单可写<form action="xxx">;

    4、要注册一个新的拦截器,把 ... 标签直接放置在标签下的struts.xml文件中即可,要创建拦截器类。

    5、struts.properties:可以不要,位置放在和struts.xml一样的位置,直接在struts.xml中配置<constant>就可以配置struts的属性。


    struts配置常量的三种方式:

    1、通过struts.properties文件(这是struts2默认的配置文件

    2、通过struts.xml配置文件(这是web应用默认的struts2配置文件)

    3、通过web应用的web.xml文件(这是web应用的配置文件

    而struts2框架加载struts2常量的顺序是:struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml(但都需要配置常量name和value,分别指定struts2属性名和属性值)

    四、actions:是struts的核心,但action还有另外两个重要的功能。 首先,action在将数据从请求传递到视图(无论是JSP还是其他类型的结果)方面起着重要作用。 第二,action必须协助框架确定哪个结果应该呈现在响应请求的视图中。是一个逻辑控制器,所以要配置逻辑视图和物理视图资源之间的对应关系。

    1、action类要封装HTTP请求参数,通常还要包含与请求参数对应的实例变量,并提供getter()和setter()方法。在action类中封装的实例变量,可以在下个页面用struts2标签来输出该实例变量的值。

    如:封装了private String tip;  并且提供了getter和setter方法

    则可在页面中用标签:<s:property value="tip"/> (系统会自动调用action类的void setTip(String tip)放到,将其请求参数传给action实例。

    2、Struts2中actions的唯一要求是必须有一个无参数方法返回String或Result对象,并且必须是POJO。如果没有指定no-argument方法,则默认是使用execute()方法。

    3、标准action接口的方法:    

    4、扩展了ActionSupport,所以我们可以使用String常量:SUCCESS和ERROR

    eg.  return SUCCESS;   return ERROR;

    有学习价值的例子:Struts2 Actions动作_w3cschool

    5、action元素属性:(1)name:必需,既是该Action的名字,也指定该Action所处理的请求的URL;(2)class:可选,默认使用ActionSupport类 (3)result:用于配置物理视图和逻辑视图之间的映射关系:

    该方式也等价于;

    6、Action的动态方法调用:运用于让同一个Action里包含多个控制处理逻辑。采用DMI(动态方法调用):action="actionName!methodName"(指定提交到哪个Action的哪个指定方法)

    (1)在其jsp代码中写下:action=”actionName ! methodName"

    (2)在Action类中写该方法(方法名为前调用的方法名),该方法除了不叫execute(),但基本操作相同。

    (3)struts.xml配置Action:要写<allowed-methods>元素严格限制允许动态调用的方法

    <action name="actionName" class=“xxx">

    ...

    <allowed-methods>methodName</allowed-methods>

    </action>

    7、指定method属性及使用通配符:通过定义每个Action时都指定method属性(指定了调用Action类的某个方法,从而不是每次都执行execute().这样就可将一个Acion类定义成多个逻辑Action,即将Action类的每个处理方法都映射出一个逻辑Action.

    并且因为action的定义较冗余,可以使用模式字符串,在class、method、result子属性中使用{N}来代表前面第N个星号所匹配的子串,这时定义的action的name="*Action",即只要用户请求的URL是*.Action.action,就可使用该Action来处理,且该Action类包含多个方法。

    8、如果有多个action,则除非请求的URL与Action的name属性绝对向他,否则按先后顺序决定由哪个Action来处理用户请求

    五、ActionSupport基类:struts2默认的action处理类

    其中有默认处理用户请求的方法,直接返回scuuess字符串:

    public String execute() throws Exception{

           return SUCCESS;

    以下六、七、八是action访问servlet API的几种方式:

    六、Action访问servlet API:通过ApplicationContext类

    1、要继承implements Action 接口

    2、定义ApplicationContext ctx=ApplicationContext.getContext()

    3、可以用于设置application范围的属性:ctx.getApplication().put("xxx“,xxx)

    4、用于设置session范围的属性:ctx.getSession().put(”xxx",xxx)

    5、用于设置request范围的属性:ctx.put("xxx",xxx);

    6、在jsp页面中访问数值时: %{applicationScope.xxx}   %{sessionScope.xxx}    %{requestScope.xxx}   

    七、Action直接访问ServletAPI:

    1、Action可实现三种接口:

    ServletContextAware:可直接访问web应用的servletContext实例,必须实现void setServletContext(ServletContext context)方法

    ServletRequestAware:可直接访问用户请求的HttpServletRequest实例,必须实现void setServletRequest(HttpServletRequest request)方法

    ServletResponseAware:可直接访问用户请求的HttpServletResponse实例,必须实现void setServletResponse(HttpServletResponse response)方法

    八、使用ServletActionContext访问ServletAPI:

    包含几个静态方法以获得相应对象:getPageContext()、getRequest()、getResponse()、getServletContext()

    OGNL

    OGNL(Object-Graph Navigation Language,对象图导航语言)是一种强大的表达式语言,用于引用和操作值栈上的数据,还可用于数据传输和类型转换。

    OGNL非常类似于JSP表达式语言。OGNL基于上下文中存有根对象或默认对象的理念,使用标记符号(即#号)来引用默认或根对象的属性。

    相关文章

      网友评论

          本文标题:struts2入门

          本文链接:https://www.haomeiwen.com/subject/uzxgmftx.html