Struct2总结

摘自《javaWeb整合开发王者归来》

一、Struct2工作流程

假设项目名(上下文)为struts2。

1.访问jsp页面  /struts2/login.jsp

2.提交表单后数据提交给 /struts2/loginPerson.action

3.Struts2截取所有请求,包括*.action的请求

4.查找struts.xml,得知 loginPerson.action对应LoginAction

5.生成一个LoginAction实例,将提交的数据设置到该实例中

6.调用LoginAction实例的execute()主方法

7.跳转到jsp中显示结果,丢弃该LoginAction实例

 

二、Struts.xml解析

Structs有一个配置文件Struts.xml

package:所有的result、action都必须配置到package中。
package具有继承的特性。子package的Action能使用你package的资源。
自定义的package一般继承自structs-default

    <package name="test"  extends="struts-default">
        <action name="login"  class="test.LoginAction">
            <result name="success">/index.jsp</result>
            <result name="login">/login.jsp</result>
        </action>
    </package>

注意:可以在struts.xml里面配置常数,也可以在Struts.properties里面配置,

Struts.properties里面的配置会覆盖Struts.xml的配置。

复制代码
    <!--关闭动态方法调用-->
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <!--是否为开发模式-->
    <constant name="struts.devMode" value="false" />
    <!-- 与spring集成 -->
    <constant name="struts.objectFactory" value="spring" />
    <!-- 改变后缀名 -->
    <constant name="struts.action.extension" value="action" />
    <!-- 配置国际化资源文件 -->
    <constant name="struts.custom.i18n.resources"
        value="globalMessages" />
    <!-- 处理编码问题 -->
    <constant name="struts.i18n.encoding" value="GBK" />
    <!-- 当修改配置文件不需要重启服务 -->
    <constant name="struts.configuration.xml.reload" value="true" />
复制代码

三、web.xml配置Struts的Filter

以下配置表示截取所有的URI,如果URI以.action结尾,Struts2会查找对应的Action或者Jsp

    <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>

四、Action

自定义Action一般直接继承ActionSupport类,覆盖excute()方法。也可以不继承Action。

提交数据后Struts2会调用excute()方法,返回值代表页面的名称,具体文件路径在struts.xml配置文件中。

Struts2会通过getter,setter方法将jsp表单的输入内容设置进来。

Struts2框架还会将request,response数据通过setter注射进来,不必再调用servlet的api。

复制代码
public class LoginAction extends ActionSupport {
    private String account;
    private String password;

    public String execute(){
           if("123".equalsIgnoreCase(account) && "123".equals(password)) {
               return  SUCCESS;
           }
         return  LOGIN;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
复制代码


五、Struts2标签
Struts2标签示例如下:

复制代码
<body>
   <h1>欢迎来到登陆页面^_^</h1>
    <structs:form action="login">
        <structs:label value="登陆系统"></structs:label>
        <structs:textfield name="account" label="账号"></structs:textfield>
        <structs:textfield name="password" label="密码"></structs:textfield>
        <structs:submit value="登陆"></structs:submit>
    </structs:form>
</body>
</html>
复制代码

 六、Struts2获取request、respon

Struts2会自动完成HttpServlet中取参数的工作,抛弃了HttpServletRequest、HttpServletResponse等。

获取的方法有:

1.调用ServletActionContext.getRequest()

2.实现ServletRequestAware接口

posted on   乐之者v  阅读(269)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2016-06-01 java swing示例
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示