Struts2配置与流程

Struts2环境的搭建

(1)下载Struts2

    目录结构
            apps:该文件夹下包含了基于Struts2的示例应用
            docs:包含了Struts2的相关文档 
            lib:包含了Struts2的核心类库,以及Struts2的第三方类库

            src:包含了Struts框架的所有源代码  

(2)创建web项目,导入struts2所需jar包,lib中有struts2的所有jar包,但是我们不需要那么多。

我们只把必需的添加到项目即可。将apps目录下struts2-blank.war压缩包中的lib目录下的jar包添加到我们项目中即可。这是struts2必需的jar包。

Struts2架构

struts使用拦截器作为增强处理,以用户的逻辑控制器为目标,创建一个控制器代理,控制器代理回调业务控制器的execute方法处理用户请求,该方法的返回值决定struts2将怎样的视图资源呈现给用户

struts2大致处理流程:

(1)浏览器发送请求 
(2)核心控制器根据请求决定是否调用相应的Action 
(3)struts2内置的拦截器链会自动对请求进行一些操作 
(4)回调Action的execute方法,执行操作。 
(5)Action会将处理结果存入stack Context中,并返回字符串,核心控制器根据字符串跳转到指定的视图资源。 
(6)视图资源会读取Stack Context中的信息,向浏览器生成响应数据。

Struts2入门案例

(1)编辑web应用的web.xml配置文件,配置struts2的核心拦截器。

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

(2)从用户请求开始,我们实现一个登陆表单

这里的action属性比较特殊,不是普通的servlet。
    当表单提交给login时,struts的拦截器会起作用,调用用户开发的Action处理用户请求 
        <body>
            <form action="login" method="post">
                用户名:<input type="text" name="username"><br>
                密   码:<input type="password" name="password"><br>
                <input type="submit" value="登录">
            </form>

        </body> 

(3)实现控制器Action类处理用户请求

我们已经指出,MVC框架的核心就是控制器,控制器处理具体用户请求。

 这个类实现Action接口,并实现接口的execute方法。  
    该类包含的多个属性用于封装用户的请求参数。 我们可能现在很难理解,我们请求的参数是怎么赋值给这个类的。
    我们说过,在调用Action方法之前,struts2的内置拦截器会自动负责解析用户请求参数,并赋值给Action相应的参数

    public class LoginAction extends Action{
                private String username;   //用户名
                private String password;   //密码
                public String getUsername() {
                    return username;
                }
                public void setUsername(String username) {
                    this.username = username;
                }
                public String getPassword() {
                    return password;
                }
                public void setPassword(String password) {
                    this.password = password;
                } 
                //判断用户名和密码是否相同
                public String execute(){
                    if(getUsername().equals("cad")&&getPassword().equals("123456")){
                        return "success";
                    }else
                    {
                        return "error";
                    }
                }

            } 

(4)配置Action

我们用户发送login请求,那么如果根据login请求去调用相应的Action实现类呢?这就需要我们去配置Action。

配置struts.xml ,struts.xml应该放在src的classes路径下 

<package name="demo" extends="struts-default"> //包  name随便取,extends 照写就ok 

             <action name="login" class="com.cad.struts2.LoginAction"> //action name为login,即为负责处理login的请求,action默认调用自身的execute方法处理请求

                   <result name="success">/welcome.jsp</result>  //根据返回的字符串转发到相应页面
                   <result name="error">/error.jsp</result> 
                </action>

            </package>

Struts2两个重要组成部分

struts2核心就是核心控制器和业务控制器。

核心控制器StrutsPrepareAndExecuteFilter

StrutsPrepareAndExecuteFilter作为一个filter运行在web应用中,负责拦截所有用户请求,该filter 会过滤用户请求,然 
后将请求都交给struts2框架处理。拦截器会默认拦截扩展名为.action的请求,什么后缀名都不写也可以。例如  

hello.action或者hello都会进行拦截。xxx.jsp就不会进行拦截,直接放行。

struts2内部运行流程

(1)客户端发出HTTP请求

(2)然后请求被核心过滤器StrutsPrepareAndExecuteFilter拦截

(3)核心过滤器将请求转发到Action映射器,Action映射器负责识别当前的请求是否需要交由Struts2处理。

(4)Action映射器返回需要struts2处理的信息,StrutsPrepareAndExecuteFilter会创建一个Action代理

(5)Action代理并不知道执行哪一个Action,它会向配置管理器询问调用哪一个Action,配置管理器会从struts.xml读取我们配置的Action信息。

(6)Action代理创建相关请求的Action对象,调用相关的方法之前,struts2的一系列拦截器会帮我们做一些操作,例如获取请求参数等。

(7)然后调用execute方法根据返回的字符串去匹配相应的页面,

(8)页面可以获取一些页面模板,然后生成最终页面,再倒序的执行拦截器的后续操作

(9)最后生成HTTP响应内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值